sqltoy-orm 5.6.84 已经发布,ORM 框架
此版本更新内容包括:
1、扩展updateSaveFetch方法,通过类的proxy代理实现基于对象的get/set替代基于ResultSet的get和update操作 //需要引入新的依赖包
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.18.10</version>
</dependency>
//方法
/**
* @TODO 适用于库存台账、客户资金账等高并发强事务场景,一次数据库交互实现:
* <p>
* <li>1、锁查询;</li>
* <li>2、记录存在则修改;</li>
* <li>3、记录不存在则执行insert;</li>
* <li>4、返回修改或插入的记录信息</li>
* </p>
*/
public <T extends Serializable> T updateSaveFetch(final T entity, final EntityUpdateCallback<T> callback,
final String... uniqueProps);
//示例
@Test
public void testUpdateSaveFetch() {
StaffInfoVO staffInfo = new StaffInfoVO();
staffInfo.setStaffId("S0001");
staffInfo.setBeginDate(LocalDate.parse("2019-01-01"));
staffInfo.setEndDate(LocalDate.now());
staffInfo.setStaffName("陈");
lightDao.updateSaveFetch(staffInfo, (entity, rowIndex) -> {
// 这里entity取值,实际通过代理,走的是rs.getString("tel_no")获取的值
String telNo = entity.getTelNo();
if (telNo != null) {
// 这里set,实际是rs.updateString("tel_no", telNo.substring(0, 3) + "#**#" +
// telNo.substring(7));
entity.setTelNo(telNo.substring(0, 3) + "#**#" + telNo.substring(7));
}
});
}
2、TypeHandler 新增updateValue方法(极端场景下扩展使用)
// 一般无需扩展,供极端场景使用
public boolean updateValue(Integer dbType, Connection conn, ResultSet rs, FieldMeta fieldMeta, Object value) {
// fieldMeta.getType() 对应java.sql.Types.xxx
// rs.updateObject(fieldMeta.getColumnName(),value)
return false;
}
<!-- 其他非spring框架可以基于sagacity-sqltoy 进行扩展 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy</artifactId>
<version>5.6.84</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-spring-starter</artifactId>
<version>5.6.84</version>
</dependency>
<!-- solon 插件 -->
<dependency>
<groupId>com.sagframe</groupId>
<artifactId>sagacity-sqltoy-solon-plugin</artifactId>
<version>5.6.84</version>
</dependency>
详情查看:https://gitee.com/sagacity/sagacity-sqltoy/releases/5.6.84