类 MySQLDao<Entity>

java.lang.Object
cool.scx.dao.impl.MySQLDao<Entity>
所有已实现的接口:
BaseDao<Entity,Long>

public class MySQLDao<Entity> extends Object implements BaseDao<Entity,Long>
最基本的 可以实现 实体类 CRUD 的 DAO
版本:
0.1.3
作者:
scx567888
  • 字段详细资料

    • tableInfo

      protected final TableInfo<?> 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
  • 构造器详细资料

    • MySQLDao

      public MySQLDao(TableInfo<?> tableInfo, Class<Entity> entityClass, SQLRunner sqlRunner)
      a
      参数:
      tableInfo - 因为其使用 SQL.ofPlaceholder 的方式进行参数填充 所以必须是 BaseColumnInfo 才可以
      entityClass - a
      sqlRunner - a
  • 方法详细资料

    • insert

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

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

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

      public final SQL buildSelectSQL(Query query, SelectFilter 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), SelectFilter.ofIncluded("carID")),
                       SelectFilter.ofExcluded()
            ));
            // 同时也支持 whereSQL 方法
            // 这个写法和上方完全相同
            var cars1 = carService._select(new Query().whereSQL("id IN ",
                       personService._buildSelectSQL(new Query().lessThan("age", 100), SelectFilter.ofIncluded("carID")),
                       SelectFilter.ofExcluded()
            ));
        

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

      public final SQL buildSelectSQLWithAlias(Query query, SelectFilter 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, UpdateFilter 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 TableInfo<?> _tableInfo()
    • _entityClass

      public final Class<Entity> _entityClass()
      指定者:
      _entityClass 在接口中 BaseDao<Entity,Long>
    • _sqlRunner

      public final SQLRunner _sqlRunner()