1、修复ToChar函数:场景to_char(t.total_amt)单参数场景
2、打springboot-starter包时增加yml配置提示json到META-INFO下
3、BeanUtil、CollectionUtil部分代码编写优化(已验证)
4、修复oracle timestamp转localDateTime精度问题
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC3.jre8 -->
<version>5.6.7.RC3</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC3.jre8 -->
<version>5.6.7.RC3</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC3.jre8 -->
<version>5.6.7.RC3</version>
</dependency>
1、修复ToChar函数:场景to_char(t.total_amt)单参数场景
2、打springboot-starter包时增加yml配置提示json到META-INFO下
3、BeanUtil、CollectionUtil部分代码编写优化(已验证)
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC2.jre8 -->
<version>5.6.7.RC2</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC2.jre8 -->
<version>5.6.7.RC2</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.7.RC2.jre8 -->
<version>5.6.7.RC2</version>
</dependency>
1、增强MapperUtils支持指定映射关系
2、增强@include(id="sqlId")动态根据方言获取id,如sqlId_mysql
请根据需要进行升级
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.6.jre8 -->
<version>5.6.6</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.6.jre8 -->
<version>5.6.6</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.6.jre8 -->
<version>5.6.6</version>
</dependency>
1、完成solon、spring aot的适配
2、强化wrapTreeTable的参数合法性校验
3、支持非spring等框架下的事务
4、字段加密排除同时被脱敏场景,同时配置加密、脱敏则以加密为主
5、updateByQuery、deleteByQuery 只有where("1=1") 自动去除whre 1=1
6、增加H2数据库DDL创建支持
7、优化solon 集成数据库的事务适配
SqlToyContext sqlToyContext = new SqlToyContext();
sqlToyContext.setSqlResourcesDir("classpath:sqltoy/demo.sql.xml");
sqlToyContext.initialize();
Map<String, String> map = new HashMap<>();
map.put(DruidDataSourceFactory.PROP_URL, "jdbc:mysql://192.168.56.101:3306/sqltoy");
// 设置驱动Driver
map.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.jdbc.Driver");
// 设置用户名
map.put(DruidDataSourceFactory.PROP_USERNAME, "root");
// 设置密码
map.put(DruidDataSourceFactory.PROP_PASSWORD, "123456");
// 创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
sqlToyContext.setDefaultDataSource(dataSource);
// 框架默认提供了DefaultLightDaoImpl实现
LightDao lightDao = new DefaultLightDaoImpl(sqlToyContext);
// 非事务
// lightDao.find("select * from staff_info where status=:status",
// MapKit.map("status", "1"), StaffInfo.class);
// 事务场景(代码是演示)
Object result = DBTransUtils.doTrans(lightDao.getDataSource(), () -> {
// 这里可以多个操作行为
lightDao.updateByQuery(StaffInfo.class,EntityUpdate.create().set("sexType", "F").where("staffId=?").values("S0001"));
return lightDao.find("select * from staff_info where status=:status", MapKit.map("status", "1"),StaffInfo.class);
});
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.jre8 -->
<version>5.6.5</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.jre8 -->
<version>5.6.5</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.jre8 -->
<version>5.6.5</version>
</dependency>
1、完成solon、spring aot的适配
2、强化wrapTreeTable的参数合法性校验
3、支持非spring等框架下的事务
4、字段加密排除同时被脱敏场景,同时配置加密、脱敏则以加密为主
5、updateByQuery、deleteByQuery 只有where("1=1") 自动去除whre 1=1
6、增加H2数据库DDL创建支持
SqlToyContext sqlToyContext = new SqlToyContext();
sqlToyContext.setSqlResourcesDir("classpath:sqltoy/demo.sql.xml");
sqlToyContext.initialize();
Map<String, String> map = new HashMap<>();
map.put(DruidDataSourceFactory.PROP_URL, "jdbc:mysql://10.10.10.134:3306/java20");
// 设置驱动Driver
map.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.jdbc.Driver");
// 设置用户名
map.put(DruidDataSourceFactory.PROP_USERNAME, "root");
// 设置密码
map.put(DruidDataSourceFactory.PROP_PASSWORD, "123456");
// 创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
sqlToyContext.setDefaultDataSource(dataSource);
// 框架默认提供了DefaultLightDaoImpl实现
LightDao lightDao = new DefaultLightDaoImpl(sqlToyContext);
// 非事务
// lightDao.find("select * from staff_info where status=:status",
// MapKit.map("status", "1"), StaffInfo.class);
// 事务场景(代码是演示)
Object result = DBTransUtils.doTrans(lightDao.getDataSource(), () -> {
// 这里可以多个操作行为
lightDao.updateByQuery(StaffInfo.class,
EntityUpdate.create().set("sexType", "F").where("staffId=?").values("S0001"));
return lightDao.find("select * from staff_info where status=:status", MapKit.map("status", "1"),
StaffInfo.class);
});
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC7.jre8 -->
<version>5.6.5.RC7</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC7.jre8 -->
<version>5.6.5.RC7</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC7.jre8 -->
<version>5.6.5.RC7</version>
</dependency>
1、完成solon、spring aot的适配
2、强化wrapTreeTable的参数合法性校验
3、支持非spring等框架下的事务
4、字段加密排除同时被脱敏场景,同时配置加密、脱敏则以加密为主
5、updateByQuery、deleteByQuery 只有where("1=1") 自动去除whre 1=1
6、增加H2数据库DDL创建支持
SqlToyContext sqlToyContext = new SqlToyContext();
sqlToyContext.setSqlResourcesDir("classpath:sqltoy/demo.sql.xml");
sqlToyContext.initialize();
Map<String, String> map = new HashMap<>();
map.put(DruidDataSourceFactory.PROP_URL, "jdbc:mysql://10.10.10.134:3306/java20");
// 设置驱动Driver
map.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.jdbc.Driver");
// 设置用户名
map.put(DruidDataSourceFactory.PROP_USERNAME, "root");
// 设置密码
map.put(DruidDataSourceFactory.PROP_PASSWORD, "123456");
// 创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
sqlToyContext.setDefaultDataSource(dataSource);
// 框架默认提供了DefaultLightDaoImpl实现
LightDao lightDao = new DefaultLightDaoImpl(sqlToyContext);
// 非事务
// lightDao.find("select * from staff_info where status=:status",
// MapKit.map("status", "1"), StaffInfo.class);
// 事务场景(代码是演示)
Object result = DBTransUtils.doTrans(lightDao.getDataSource(), () -> {
// 这里可以多个操作行为
lightDao.updateByQuery(StaffInfo.class,
EntityUpdate.create().set("sexType", "F").where("staffId=?").values("S0001"));
return lightDao.find("select * from staff_info where status=:status", MapKit.map("status", "1"),
StaffInfo.class);
});
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC6.jre8 -->
<version>5.6.5.RC6</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC6.jre8 -->
<version>5.6.5.RC6</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC6.jre8 -->
<version>5.6.5.RC6</version>
</dependency>
1、完成solon、spring aot的适配
2、强化wrapTreeTable的参数合法性校验
3、支持非spring等框架下的事务
4、字段加密排除同时被脱敏场景,同时配置加密、脱敏则以加密为主
5、updateByQuery、deleteByQuery 只有where("1=1") 自动去除whre 1=1
SqlToyContext sqlToyContext = new SqlToyContext();
sqlToyContext.setSqlResourcesDir("classpath:sqltoy/demo.sql.xml");
sqlToyContext.initialize();
Map<String, String> map = new HashMap<>();
map.put(DruidDataSourceFactory.PROP_URL, "jdbc:mysql://10.10.10.134:3306/java20");
// 设置驱动Driver
map.put(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.jdbc.Driver");
// 设置用户名
map.put(DruidDataSourceFactory.PROP_USERNAME, "root");
// 设置密码
map.put(DruidDataSourceFactory.PROP_PASSWORD, "123456");
// 创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
sqlToyContext.setDefaultDataSource(dataSource);
// 框架默认提供了DefaultLightDaoImpl实现
LightDao lightDao = new DefaultLightDaoImpl(sqlToyContext);
// 非事务
// lightDao.find("select * from staff_info where status=:status",
// MapKit.map("status", "1"), StaffInfo.class);
// 事务场景(代码是演示)
Object result = DBTransUtils.doTrans(lightDao.getDataSource(), () -> {
// 这里可以多个操作行为
lightDao.updateByQuery(StaffInfo.class,
EntityUpdate.create().set("sexType", "F").where("staffId=?").values("S0001"));
return lightDao.find("select * from staff_info where status=:status", MapKit.map("status", "1"),
StaffInfo.class);
});
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC5.jre8 -->
<version>5.6.5.RC5</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC5.jre8 -->
<version>5.6.5.RC5</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.5.RC5.jre8 -->
<version>5.6.5.RC5</version>
</dependency>
1、因存在count缓存、pageNo越界、查询count和查询记录的时间差等场景,导致totalCount跟pageNo、pageSize、rowSize的逻辑值差异,比如:totalCount=8,pageNo=2,rowSize=1,pageSize=10,应校正totalCount=11
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.4.jre8 -->
<version>5.6.4</version>
</dependency>
<!-- 纯粹springboot项目只需引入sagacity-sqltoy-spring-starter依赖即可 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.4.jre8 -->
<version>5.6.4</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sqltoy-orm-solon-plugin</artifactId>
<!-- jdk8 对应的版本号为:5.6.4.jre8 -->
<version>5.6.4</version>
</dependency>
1、因分页取count会排除掉最外层的order by,而order by ? ?模式需要排除掉动态参数
2、优化存储过程调用总记录数的日志输出
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.3.jre8 -->
<version>5.6.3</version>
</dependency>
<!-- 纯粹springboot项目只需引入sagacity-sqltoy-spring-starter依赖即可 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.3.jre8 -->
<version>5.6.3</version>
</dependency>
1、优化单笔记录插入PrepareStatement 未关闭的缺陷
感谢@legendary 的反馈
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.2.jre8 -->
<version>5.6.2</version>
</dependency>
<!-- 纯粹springboot项目只需引入sagacity-sqltoy-spring-starter依赖即可 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.2.jre8 -->
<version>5.6.2</version>
</dependency>
1、支持convertType别名@SqlToyFieldAlias双向PO<-->DTO 映射 (感谢 @gleam )
2、优化sql查询结果封装OneToOne,OneToMany 按照业务逻辑场景,而非存粹的数据库表主外键 (感谢 @俊华 )
感谢:@俊华、@Gleam 两位用户的反馈
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.1.jre8 -->
<version>5.6.1</version>
</dependency>
<!-- 纯粹springboot项目只需引入sagacity-sqltoy-spring-starter依赖即可 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.1.jre8 -->
<version>5.6.1</version>
</dependency>
1、拆分sqltoy-orm-core\sqltoy-orm-spring\sqltoy-orm-spring-starter 三个子项目,剥离对spring的依赖
2、分5.6.x 和 5.6.x.jre8 两个分支版本,5.6.x 以jdk17、springboot3.x 为起点
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<!-- jdk8 对应的版本号为:5.6.0.jre8 -->
<version>5.6.0</version>
</dependency>
<!-- 纯粹springboot项目只需引入sagacity-sqltoy-spring-starter依赖即可 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<!-- jdk8 对应的版本号为:5.6.0.jre8 -->
<version>5.6.0</version>
</dependency>
3、传统spring项目只需引入sagacity-sqltoy-spring依赖
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring</artifactId>
<!-- jdk8 对应的版本号为:5.6.0.jre8 -->
<version>5.6.0</version>
</dependency>
<!-- spring sqltoy xml 配置-->
<!-- 配置sqltoy框架的上下文 -->
<bean id="sqlToyContext" class="org.sagacity.sqltoy.SqlToyContext"
init-method="initialize" destroy-method="destroy">
<!-- sqltoy5.6.x 传统spring项目需设置appContext、connectionFactory -->
<property name="appContext">
<bean class="org.sagacity.sqltoy.integration.impl.SpringAppContext"/>
</property>
<property name="connectionFactory">
<bean class="org.sagacity.sqltoy.integration.impl.SpringConnectionFactory"/>
</property>
<!-- 指定sql.xml 文件的路径实现目录的递归查找,多个路径则用逗号分隔 -->
<property name="sqlResourcesDir"
value="classpath:com/sqltoy/quickstart" />
<!--非必须属性:默认值为false -->
<property name="debug" value="${sqltoy.debug}" />
</bean>
1、优化@value(:param)输出,支持日期、数组、集合、枚举等类型
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.100</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.100</version>
</dependency>
1、修改org.sagacity.sqltoy.integration.impl.SpringAppContext 自动注入applictionContext,简化传统spring xml配置项目SqltoyContext实例创建
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.98</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.98</version>
</dependency>
1、优化英文日期星期二(Tues)、四(Thur)简写的解析缺陷,规范为(Tue、Thu)
感谢@兵兵 的反馈
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.96</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.96</version>
</dependency>
1、优化updateByQuery条件属性跟修改属性一致时的缺陷
感谢@俊华 的反馈
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.95</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.95</version>
</dependency>
1、优化安全脱敏邮件类型时maskCode非null判断
2、优化同比环比计算改用BIGDECIMAL进行计算保障精度
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.94</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.94</version>
</dependency>
1、修复@loop和sql日志中localDateTime纳秒输出缺陷
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.93</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.93</version>
</dependency>
1、修复含with as (select * from @fast( ... union all )) select * from table,极端场景下分页查询count未正确处理union 的缺陷
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.92</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.92</version>
</dependency>
1、修复updateByQuery中UnifyFieldsHandler未判null引发的空指针异常
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.2.91</version>
</dependency>
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-starter</artifactId>
<version>5.2.91</version>
</dependency>