类 JDBCDao<Entity>

java.lang.Object
cool.scx.data.jdbc.JDBCDao<Entity>
所有已实现的接口:
BaseDao<Entity,Long>

public class JDBCDao<Entity> extends Object implements BaseDao<Entity,Long>
使用 JDBC 接口, 通过 SQL 操作关系型数据库的 DAO
版本:
0.1.3
作者:
scx567888
  • 字段详细资料

    • tableInfo

      protected final AnnotationConfigTable tableInfo
      实体类对应的 table 结构
    • entityClass

      protected final Class<Entity> entityClass
      实体类 class 用于泛型转换
    • sqlRunner

      protected final SQLRunner sqlRunner
      SQLRunner
    • entityBeanListHandler

      protected final ResultHandler<List<Entity>> entityBeanListHandler
      实体类对应的 BeanListHandler
    • countResultHandler

      protected final ResultHandler<Long> countResultHandler
      查询 count 所用的 handler
    • dialect

      protected final Dialect dialect
      方言
    • whereParser

      protected final JDBCDaoWhereParser whereParser
      where 解析器
    • groupByParser

      protected final JDBCDaoGroupByParser groupByParser
    • orderByParser

      protected final JDBCDaoOrderByParser orderByParser
  • 构造器详细资料

    • JDBCDao

      public JDBCDao(Class<Entity> entityClass, DataSource dataSource)
      a
      参数:
      entityClass - a
      dataSource - a
  • 方法详细资料

    • insert

      public final Long insert(Entity entity, ColumnFilter updateFilter)
      保存单条数据
      指定者:
      insert 在接口中 BaseDao<Entity,Long>
      参数:
      entity - 待插入的数据
      updateFilter - a
      返回:
      插入成功的主键 ID 如果插入失败或数据没有主键则返回 null
    • insertBatch

      public final List<Long> insertBatch(Collection<Entity> entityList, ColumnFilter updateFilter)
      保存多条数据
      指定者:
      insertBatch 在接口中 BaseDao<Entity,Long>
      参数:
      entityList - 待保存的列表
      updateFilter - a
      返回:
      保存成功的主键 (ID) 列表
    • select

      public final List<Entity> select(Query query, ColumnFilter selectFilter)
      获取列表
      指定者:
      select 在接口中 BaseDao<Entity,Long>
      参数:
      query - 查询过滤条件.
      selectFilter - a
      返回:
      a List object.
    • buildSelectSQL

      public final SQL buildSelectSQL(Query query, ColumnFilter selectFilter)
      构建 (根据聚合查询条件 Query 获取数据列表) 的SQL
      可用于另一条查询语句的 where 条件 用法
      
            // 假设有以下结构的两个实体类
            public class Person {
      
                // ID
                public Long id;
      
                // 关联的 汽车 ID
                public Long carID;
      
                // 年龄
                public Integer age;
      
            }
            public class Car {
      
                // ID
                public Long id;
      
                // 汽车 名称
                public String name;
      
            }
            // 现在想做如下查询 根据所有 person 表中年龄小于 100 的 carID 查询 car 表中的数据
            // 可以按照如下写法
            var cars = carService._select(new Query().in("id",
                       personService._buildSelectSQL(new Query().lessThan("age", 100), ColumnFilter.ofIncluded("carID")),
                       ColumnFilter.ofExcluded()
            ));
            // 同时也支持 whereSQL 方法
            // 这个写法和上方完全相同
            var cars1 = carService._select(new Query().whereSQL("id IN ",
                       personService._buildSelectSQL(new Query().lessThan("age", 100), ColumnFilter.ofIncluded("carID")),
                       ColumnFilter.ofExcluded()
            ));
        

      注意 !!! 若同时使用 limit 和 in/not in 请使用 buildSelectSQLWithAlias(Query, ColumnFilter)
      参数:
      query - 聚合查询参数对象
      selectFilter - 查询字段过滤器
      返回:
      selectSQL
    • buildSelectSQLWithAlias

      public final SQL buildSelectSQLWithAlias(Query query, ColumnFilter selectFilter)
      在 mysql 中 不支持 in 子句中包含 limit 但是我们可以使用 一个嵌套的别名表来跳过检查 此方法便是用于生成嵌套的 sql 的
      参数:
      query - q
      selectFilter - s
      返回:
      a
    • count

      public final long count(Query query)
      获取条数
      指定者:
      count 在接口中 BaseDao<Entity,Long>
      参数:
      query - 查询条件
      返回:
      条数
    • update

      public final long update(Entity entity, Query query, ColumnFilter updateFilter)
      更新数据
      指定者:
      update 在接口中 BaseDao<Entity,Long>
      参数:
      entity - 要更新的数据
      query - 更新的过滤条件
      updateFilter - a
      返回:
      受影响的条数
    • delete

      public final long delete(Query query)
      删除数据
      指定者:
      delete 在接口中 BaseDao<Entity,Long>
      参数:
      query - where 条件
      返回:
      受影响的条数 (被成功删除的数据条数)
    • _truncate

      public final void _truncate()
      清空表中所有数据 (注意此操作不受事务影响, 所以慎用!!!)
    • _tableInfo

      public final Table<? extends ColumnMapping> _tableInfo()
    • _entityClass

      public final Class<Entity> _entityClass()
      从接口复制的说明: BaseDao
      获取 类
      指定者:
      _entityClass 在接口中 BaseDao<Entity,Long>
      返回:
      a
    • _sqlRunner

      public final SQLRunner _sqlRunner()