userEntities4 = userMapper.selectByExampleAndRowBounds(example1, new RowBounds(0, 3));
return "selectAll: " + JSON.toJSONString(userEntities1) +
" select: " + JSON.toJSONString(select) +
"
selectByExample:" + JSON.toJSONString(userEntities) +
"
selectOne:" + JSON.toJSONString(v) +
"
selectByPrimaryKey:" + JSON.toJSONString(userEntity) +
"
selectByRowBounds:" + JSON.toJSONString(userEntities2) +
"
selectByExampleAndRowBounds:" + JSON.toJSONString(userEntities3) +
"
selectByExampleAndRowBounds:" + JSON.toJSONString(userEntities4);
}
#### BaseCRUDManager使用代码示例
```
@Controller
public class TestController{
@Autowired
private TestManager testManager;
@Autowired
private BaseCRUDManager baseCRUDManager;
/**
* 首页
*/
@RequestMapping("/testDate")
@ResponseBody
public String testDate(){
UserEntity insert = baseCRUDManager.insert(UserEntity.builder().loginName("111").build());
UserEntity insertSelective = baseCRUDManager.insertSelective(UserEntity.builder().loginName("222").build());
List userEntities1 = baseCRUDManager.selectAll(UserEntity.class);
boolean b = baseCRUDManager.updateByPrimaryKey(UserEntity.builder().id(1L).mobile("1111").build());
boolean b1 = baseCRUDManager.updateByPrimaryKeySelective(UserEntity.builder().id(2L).mobile("1111").build());
UserEntity userEntity = baseCRUDManager.selectOne(UserEntity.builder().id(1L).mobile("1111").build());
UserEntity userEntity1 = baseCRUDManager.selectByPrimaryKey(UserEntity.builder().id(8L).mobile("1111").build());
List select = baseCRUDManager.select(UserEntity.builder().mobile("1111").build());
int i = baseCRUDManager.selectCount(UserEntity.builder().build());
int sss = baseCRUDManager.delete(UserEntity.builder().realName("sss").build());
int i1 = baseCRUDManager.deleteByPrimaryKey(UserEntity.builder().id(5L).loginName("222").build());
boolean b2 = baseCRUDManager.existsByPrimaryKey(UserEntity.builder().id(1L).build());
boolean b3 = baseCRUDManager.existsByPrimaryKey(UserEntity.builder().id(222L).build());
UserEntity user = new UserEntity();
user.setCurrentPage(1);
user.setPageSize(5);
LinkedHashMap ordermap = new LinkedHashMap<>();
ordermap.put("id",BaseModel.ASC);
user.setOrderBy(ordermap);
PageResultCommand search = baseCRUDManager.search(user);
PageResultCommand search3 = baseCRUDManager.search(user, 1, 5, ordermap);
return "success";
}
}
```
#### AC.Table支持的共通类BaseCRUDManager的CUDR方法接口文档如下
/**
* 根据实体对象的非Null字段作为Where条件查询结果集,如果对象的属性值都为null则返回全部数据等同于selectAll
* @param t 实体对象
* @param 实体对象类型
* @return List实体对象列表
* @version 支持版本1.1.0.RELEASE
*/
List select(T t);
/**
* 根据实体对象的@IsKey主键字段的值作为Where条件查询结果,主键字段不能为null
* @param t 实体对象(只设置主键值即可,其他字段值不会读取)
* @param 实体对象类型
* @return 实体对象
* @version 支持版本1.1.0.RELEASE
*/
T selectByPrimaryKey(T t);
/**
* 查询表全部数据
* @param clasz 实体对象的class
* @param 实体对象类型
* @return List实体对象列表
* @version 支持版本1.1.0.RELEASE
*/
List selectAll(Class clasz);
/**
* 根据实体对象的非Null字段作为Where条件查询结果集的Count,如果对象的属性值都为null则Count全表
* @param t 实体对象
* @param 实体对象类型
* @return 结果数量
* @version 支持版本1.1.0.RELEASE
*/
int selectCount(T t);
/**
* 根据实体对象的非Null字段作为Where条件查询结果集,如果对象的属性值都为null则返回结果集的第一条使用的limit 1
* @param t 实体对象
* @param 实体对象类型
* @return 实体对象
* @version 支持版本1.1.0.RELEASE
*/
T selectOne(T t);
/**
* 根据实体对象的非Null字段作为Where条件进行删除操作,如果对象的属性值都为null则删除表全部数据
* @param t 实体对象
* @param 实体对象类型
* @return 返回成功条数
* @version 支持版本1.1.0.RELEASE
*/
int delete(T t);
/**
* 根据实体对象的@IsKey主键字段的值作为Where条件进行删除操作,主键字段不能为null
* @param t 实体对象(只设置主键值即可,其他字段值不会读取)
* @param 实体对象类型
* @return 返回成功条数
* @version 支持版本1.1.0.RELEASE
*/
int deleteByPrimaryKey(T t);
/**
* 根据实体对象的@IsKey主键字段的值作为Where条件查询该数据是否存在,主键字段不能为null
* @param t 实体对象(只设置主键值即可,其他字段值不会读取)
* @param 实体对象类型
* @return true存在,fasle不存在
* @version 支持版本1.1.0.RELEASE
*/
boolean existsByPrimaryKey(T t);
/**
* 根据实体对象保存一条数据,主键如果没有设置自增属性则必须不能为null
* @param t 实体对象
* @param 实体对象类型
* @return 实体对象
* @version 支持版本1.1.0.RELEASE
*/
T insert(T t);
/**
* 根据实体对象保存一条数据,如果属性值为null则不插入默认使用数据库的字段默认值,主键如果没有设置自增属性则必须不能为null
* @param t 实体对象
* @param 实体对象类型
* @return 实体对象
* @version 支持版本1.1.0.RELEASE
*/
T insertSelective(T t);
/**
* 根据实体对象主键作为Where条件更新其他字段数据,主键必须不能为null
* @param t 实体对象
* @param 实体对象类型
* @return 更新结果
* @version 支持版本1.1.0.RELEASE
*/
boolean updateByPrimaryKey(T t);
/**
* 根据实体对象主键作为Where条件更新其他字段数据,如果其他字段属性值为null则忽略更新,主键必须不能为null
* @param t 实体对象
* @param 实体对象类型
* @return 更新结果
* @version 支持版本1.1.0.RELEASE
*/
boolean updateByPrimaryKeySelective(T t);
/**
* 直接根据sql查询数据,并根据指定的对象类型转化后返回
*
* @param sql 动态sql
* @param beanClass 返回list对象类型
* @param 实体对象类型
* @return list的实体对象类型
* @version 支持版本1.1.0.RELEASE
*/
List query(String sql, Class beanClass);
/**
* 直接根据sql查询返回数据
*
* @param sql 自定义的sql
* @return list map结构的数据
* @version 支持版本1.1.0.RELEASE
*/
List> query(String sql);
/**
* 根据实体对象的非Null字段作为Where条件查询结果集,如果对象的属性值都为null则返回全部数据等同于selectAll+分页
*
* @param t 实体对象
* @param currentPage 分页参数查询第几页,默认1
* @param pageSize 分页参数每页显示的条数,默认10
* @param orderby 分页使用的排序,有序的Map结构{key(要排序的字段名),value(desc/asc)}
* @param 实体类型
* @return PageResultCommand分页对象类型
* @version 支持版本1.1.1.RELEASE
*/
PageResultCommand search(T t, Integer currentPage, Integer pageSize,LinkedHashMap orderby);
/**
* 根据实体对象的非Null字段作为Where条件查询结果集,如果对象的属性值都为null则返回全部数据等同于selectAll+分页
* @param t 实体对象
* @param 实体对象类型
* @return PageResultCommand分页对象类型
* @version 支持版本1.1.1.RELEASE
*/
PageResultCommand search(T t);
#### mybatis增加功能自动创建表——A.C.Table版本说明
1. 该版本修复了修改主键同时修改其类型引起的error(版本1.0.1)
2. 该版本修复了根据model创建时没有创建父类中的字段的问题(ps:目前只支持扫描一层继承)(版本1.0.1)
3. 该版本增加了对唯一约束的支持(版本1.0.1)
4. 从原有的框架中剥离出来,支持任意结构的spring+mybatis的框架使用(版本1.0.1)
5. 再次声明A.C.Table目前仅支持mysql数据库(版本1.0.1)
6. 修复了不同数据库中有相同表名时,启动报错的问题。(版本1.0.2)
7. 修复了model属性名与表字段名不一致时公共的查询方法查不出数据的问题。(版本1.0.2)
8. 增加了对公共的CUDR方法的优化,保存成功会返回id,query查询时可以设置参数进行分页查询(pageSize:int类型标识每页数量,currentPage:int类型标识当前第几页,start:int类型从第几条开始,orderField:string类型排序字段,sortStr:string类型排序方式(desc,asc))(版本1.0.3)
9. 增加了对Mysql的longtext和mediumtext两种字段类型的支持,公共的CUDR方法的优化,原query方法更正为search,现query方法支持动态sql查询,原orderField字段只支持单个字段的排序,现修改为orderBy字段,支持数据类型为LinkedHashMap,有序,key为字段名,value为排序方式(版本1.0.4)
10. 增加对mysql数据库(timestamp/time/date/float/bit)五种数据类型的支持(版本1.0.5)
11. 增加对springboot框架的支持(版本1.0.5)
12. 删除旧版本在@Colum中实现唯一约束的方式(版本1.0.6.RELEASE)
13. 增加了新的唯一约束实现方式@Unique,支持多字段聚合约束(版本1.0.6.RELEASE)
14. 增加了索引创建方式@Index,支持多字段聚合索引(版本1.0.6.RELEASE)
15. 修复query查询方法无法返回父类字段数据的bug(版本1.0.6.RELEASE)
16. 修复原本是主键,现在依然主键,修改该字段的其他信息时会报multiple primary key defined(例如id为int(11),改为int(10)后,就可重现次bug)(版本1.0.7.RELEASE)
17. 增加对字段备注的支持,使用方式@Column的comment属性(版本1.0.7.RELEASE)
18. 修复issues/IZ6WQ:bit类型的默认值设置失败,默认值可以使用0、1、true、false(版本1.0.8.1.RELEASE)
19. 修复issues/IYTJ1:使用@Unique进行联合约束,启动项目自动创建表结构后,删除联合约束报错(版本1.0.8.1.RELEASE)
20. 迭代issues/IYW9F:mybatis.model.pack支持多包扫描","或者";"隔开(版本1.0.8.1.RELEASE)
21. 修复issues/I160LP:drop拼写的问题(版本1.0.9.RELEASE)
22. 优化issues/I1IENW:@Index,@Unique创建索引和唯一约束的实现逻辑,默认会给索引名和约束名增加前缀actable_idx_和actable_uni_方便更新删除时只针对这两个前缀的进行删除更新,避免删掉手动创建的字段的索引约束 (版本1.0.9.RELEASE)
23. 修复issues/I16OZQ::@Index,@Unique在只设置了索引名称没有设置索引字段时,报错的bug,并且原有name改为value,原有value改为columns(版本1.0.9.RELEASE)
24. 迭代issues/I1IF5E:增加对tinyint/smallint/mediumint/year/blob/longblob/mediumblob/tinytext/tinyblob/binary字段类型的支持 (版本1.0.9.RELEASE)
25. 迭代issues/I1IF5Q:框架模式新增add模式,本模式下只具备,新增表/新增字段/新增索引/新增唯一约束的功能,不会做修改和删除 (版本1.0.9.RELEASE)
26. 迭代issues/I193FC:@Column的name属性改为非必填,不填默认使用属性名作为表字段名 (版本1.0.9.RELEASE)
27. 迭代issues/I193FC:@Column的type属性改为非必填,不填默认使用属性的数据类型进行转换,转换失败的字段不会添加 (版本1.0.9.RELEASE)
支持java类型转mysql类型如下:
java.lang.String
java.lang.Long
java.lang.Integer
java.lang.Boolean
java.math.BigInteger
java.lang.Float
java.lang.Double
java.math.BigDecimal
java.sql.Date
java.util.Date
java.sql.Timestamp
java.sql.Time
本次迭代至1.0.9.RELEASE,极大的简化了注解的使用复杂度,在保留原有复杂的自定义配置能力的同时,增加了更多的默认适配能力
也就是对于@Column标签如果对字段命名等没有任何要求的情况下,直接使用标签即可,无需配置类型等参数,会默认根据上面支持的类型去进行匹配转换
28. 迭代issues/I1ILS6:@IsKey/@IsAutoIncrement/@IsNotNull用来代替 @Column中的isKey/isAutoIncrement/isNull三个属性,当然旧的配置方式仍然是支持的 (版本1.0.9.RELEASE)
29. 紧急修复1.0.9.RELEASE版本CUDR的bug,请不要使用1.0.9.RELEASE版本(版本1.0.9.1.RELEASE)
30. 迭代issues/I1IVXK:BaseMysqlCRUDManager该工具类废弃,请勿使用,新增工具类BaseCRUDManager,新的insert接口取消了对主键的integer类型的限定,主键可以自由使用类型(版本1.1.0.RELEASE)
新增工具类BaseCRUDManager的方法列表如下,详细接口文档见文档结尾部分:
List select(T t);
T selectByPrimaryKey(T t);
List selectAll(Class clasz);
int selectCount(T t);
T selectOne(T t);
int delete(T t);
int deleteByPrimaryKey(T t);
boolean existsByPrimaryKey(T t);
T insert(T t);
T insertSelective(T t);
boolean updateByPrimaryKey(T t);
boolean updateByPrimaryKeySelective(T t);
List query(String sql, Class beanClass);
List> query(String sql);
31. 迭代issues/I1JC91:工具类BaseCRUDManager新增对分页查询的支持,新增两个search接口一个实体中包含分页字段,一个通过方法参数传递分页字段(版本1.1.1.RELEASE)
新增工具类BaseCRUDManager的方法列表如下,详细接口文档见文档结尾部分:
PageResultCommand search(T t, Integer currentPage, Integer pageSize,LinkedHashMap orderby);
PageResultCommand search(T t);
32. 建表的字段时如果@Column没有设置字段名,那么默认会读属性的名字,根据驼峰转换逻辑,进行转换例如loginName会转换为login_name作为字段名,如果没有驼峰也就是全是小写字母,那么直接作为字段名,如果设置了Column(name="LOGIN_NAME")那么默认创建的字段会转换为小写,也就是login_name,所以字段名都会强制转换为小写(版本1.2.0.RELEASE,**该版本对于之前建表字段名使用大写的项目不向下兼容,要升级至此版本需谨慎**)
33. 修复索引约束创建完成后,修改字段名的情况下报错的bug(版本1.2.0.RELEASE,**该版本对于之前建表字段名使用大写的项目不向下兼容,要升级至此版本需谨慎**)
34. 为了防止配置信息引起歧义(版本1.2.0.RELEASE,**该版本对于之前建表字段名使用大写的项目不向下兼容,要升级至此版本需谨慎**)
mybatis.table.auto 变为 actable.table.auto
mybatis.model.pack 变为 actable.model.pack
mybatis.database.type 变为 actable.database.type
35. 修复建表时没有读取继承类中的字段信息的问题(版本1.2.0.RELEASE,**该版本对于之前建表字段名使用大写的项目不向下兼容,要升级至此版本需谨慎**)
36. 迭代issues/I1LUAZ:修复实体对象字段有多个大写,转换为列名时,只转换了第一个下划线,提供对@Table标签的驼峰转换的支持,不填表名默认使用类名驼峰转换(版本1.2.1.RELEASE)
37. 支持使用javax.persistence的Column/Table/Id等注解生成及更新表(版本1.3.0.RELEASE)
javax.persistence.Column = com.gitee.sunchenbin.mybatis.actable.annotation.Column
javax.persistence.Column.name = com.gitee.sunchenbin.mybatis.actable.annotation.Column.name
javax.persistence.Column.length = com.gitee.sunchenbin.mybatis.actable.annotation.Column.length
javax.persistence.Column.scale = com.gitee.sunchenbin.mybatis.actable.annotation.Column.decimalLength
javax.persistence.Table = com.gitee.sunchenbin.mybatis.actable.annotation.Table
javax.persistence.Id = com.gitee.sunchenbin.mybatis.actable.annotation.IsKey
38. 引入对tk.mybatis的支持,方便更灵活的CUDR,仅限于使用javax.persistence包的Column/Table/Id等注解时生效,如使用actable的注解则只支持BaseCRUDManager(版本1.3.0.RELEASE)
39. 增加对json数据类型的支持(版本1.3.0.RELEASE)
40. 增加注解@ColumnComment字段注释,用来替代@Column中的comment(版本1.3.0.RELEASE)
41. 增加注解@DefaultValue字段默认值,用来替代@Column中的defaultValue(版本1.3.0.RELEASE)
42. 增加注解@ColumnType字段类型,用来替代@Column中的type,取值范围MySqlTypeConstant中的枚举(版本1.3.0.RELEASE)
43. 增加注解@TableComment用来配置表的注释,可用来替代@Table的comment(版本1.3.0.RELEASE)
44. 迭代issues/I24UU4:增加注解@TableCharset用来配置表的字符集,可用来替代@Table的charset,取值范围MySqlCharsetConstant中的枚举(版本1.3.1.RELEASE)
45. 增加注解@TableEngine用来配置表的注释,可用来替代@Table的engine,取值范围MySqlEngineConstant中的枚举(版本1.3.1.RELEASE)
46. 删除默认依赖tk.mybatis的pom配置,避免跟其他框架冲突,如需使用自行依赖即可,只要依赖tk.mybatis的pom,actable可以完全兼容使用(版本1.3.2.RELEASE)
47. 修复bug,当设置bit类型的默认值时,启动时会一直日志输出修改改字段的日志记录(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
48. 修复bug,当使用默认的字段类型时,可以通过@Column的length和decimalLength来配置长度(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
49. @ColumnType增加length和decimalLength两个属性用来配置该类型的长度(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
50. 优化注解@Column的type字段以及注解@ColumnType的value字段,类型从String改为枚举类型,枚举类为MySqlTypeConstant(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
51. 优化注解@TableCharset的value和@TableEngine的value字段类型从String改为枚举类型,枚举类为MySqlCharsetConstant和MySqlEngineConstant(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
52. 修复bug,当id使用Long类型时,采用BaseCRUDManagerImpl中的保存和更新方法时报错的问题(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
53. 优化引入对mybatis-plus的支持,方便更灵活的CUDR,支持@TableName/@TableField/@TableId三个注解(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
54. 移除@LengthCount和@LengthDefault两个注解(版本1.4.0.RELEASE,该版本不向下兼容需修改少量代码,谨慎升级)
55. issues/I28XQY:新增java默认转换LocalDateTime/LocalDate/LocalTime数据类型的支持(版本1.4.1.RELEASE)
56. 修正DOUBLE和FLOAT支持设置小数长度(版本1.4.1.RELEASE)
57. Table标签新增属性isSimple表示是否开启简单的配置模式,如果开启,实体的属性可以不打@Column的标签全部按照默认规则驼峰转换创建字段,默认为false不开启(版本1.4.1.RELEASE)
58. Table标签新增属性excludeFields用来标记排除属性名,排除掉的属性不参与建表(版本1.4.1.RELEASE)
59. 检查实体类有重名的表名会抛异常(版本1.4.1.RELEASE)
60. issues/I2BL9O:新增数据包装数据类型Short,删除byte类型的支持(版本1.4.2.RELEASE)
61. 修复bug,当使用@TableEngine和@TableCharset是失效的问题(版本1.4.3.RELEASE)
62. 修复bug,@Column.isNull()和@javax.persistence.Column.nullable()(版本1.4.4.RELEASE)
63. 修复bug,float和double类型默认小数位数为2,如果强制指定0的情况下会失效,修复后效果为默认效数位数0,人工指定则按照人工指定的来(版本1.4.5.RELEASE)
64. issues/I2DU0K,优化默认值指定的缺陷,之前无法指定某些特殊类型的默认值,例如CURRENT_TIMESTAMP这种,现在支持了,会根据字段类型来决定,目前只有String和Boolean采用字符串传参的方式使用的是'#{}',其他类型均使用原生方式拼接sql使用的是'${}'(版本1.4.6.RELEASE)
65. 新增注解@IsNativeDefValue值的范围是true或者false基于上一版本64条更新日志,系统会自动根据数据类型判断是否使用原生的值作为DEFAULT,这里增加这个注解用来可以手动指定,增加了一些灵活性(版本1.4.7.RELEASE)
66. 新增两个配置项,允许自行指定生成的索引和约束的前缀,不指定默认使用actable_idx_和actable_uni_
actable.index.prefix=自己定义的索引前缀
actable.unique.prefix=自己定义的唯一约束前缀
67. 如果字段名中包含 ` 关键字会默认忽略掉,因为actable建表时自动给所有字段名增加过了,这个主要是为了避免字段名是数据库的关键字(版本1.4.8.RELEASE)
68. 修复66条自定义索引和唯一约束前缀的功能bug(版本1.4.8.RELEASE)
69. SysMysqlCreateTableManagerImpl.getAllFields方法改为public可被重写(版本1.4.9.RELEASE)
70. issues/I38G7Q:修复避免子类重写付类属性时创建重复字段报错的问题(版本1.4.9.RELEASE)
71. issues/I2CVCS:迭代优化actable.model.pack配置属性支持模糊扫描,支持类似com.bz.**.entity且支持配置多个路径英文逗号或者分号隔开(版本1.4.9.RELEASE)
72. 增加注解@EnableTimeSuffix,支持表名添加时间后缀(版本1.5.0.RELEASE)
73. issues/I3PRVK:添加@IgnoreUpdate注解 标注当前字段参与创建不参与更新,解决使用@DefaultValue("NULL ON UPDATE CURRENT_TIMESTAMP")时当前字段每次重启项目都会进行更新操作的问题(版本1.5.0.RELEASE)
74. issues/I3NGD2:添加@IgnoreTable注解 设置某个model实体不参与建表操作(版本1.5.0.RELEASE)
75. issues/I3TNMB:修复使用mybatisplus时使用了多租户的插件时,使用@ColumnComment注解报错的问题(版本1.5.0.RELEASE)