模拟一个简单的ORM(对象关系映射)查询构建器,它使用泛型来实现类型安全的SQL查询构造。
1. 基础实体类和注解
首先定义一些基础注解和实体类:
// 表注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {
String name();
}
// 列注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String name();
boolean nullable() default true;
}
// 主键注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Id {
String name() default "";
boolean autoIncrement() default false;
}
2. 泛型Repository接口
public interface Repository<T, ID> { // 保存实体 T save(T entity); // 根据ID查找 Optional<T> findById(ID id); // 查询所有 List<T> findAll(); // 条件查询 List<T> findBy(Specification<T> specification); // 删除 void delete(T entity); // 计数 long count(); }
3. 查询条件构建器(使用泛型链式调用)
public class QueryBuilder<T> { private final Class<T> entityClass; private final List<Predicate> predicates = new ArrayList<>(); private final List<Order> orders = new ArrayList<>(); public QueryBuilder(Class<T> entityClass) { this.entityClass = entityClass; } public QueryBuilder<T> where(Predicate<T> predicate) { predicates.add(predicate); return this; } public QueryBuilder<T> orderBy(Order<T> order) { orders.add(order); return this; } public Specification<T> build() { return n