内容简介:fastmybatis 1.10.12 发布,本次发布内容如下: Query类新增条件表达式query.eq(StringUtils.hasText(name), "name", name); 修复mysql下tinyint(1)返回boolean值问题 检查空字符串默认进行一次trim。mybatis.emp...
fastmybatis 1.10.12 发布,本次发布内容如下:
- Query类新增条件表达式
query.eq(StringUtils.hasText(name), "name", name);
- 修复 mysql 下tinyint(1)返回boolean值问题
- 检查空字符串默认进行一次trim。
mybatis.empty-string-with-trim=true
- 查询字段忽略空字符调整为默认开启
mybatis.ignore-empty-string=true
到1.10.12版本为止,fastmybatis实现多个有用的功能
将参数放在对象中查询
参数类,接收前端传递过来的请求参数
@Data
public class UserParam {
/**
* userId
*/
@Condition(index = 0)
private Integer userId;
/**
* 用户名
*/
@Condition(operator = Operator.like, index = 1)
private String username;
/**
* 注册开始时间
*/
@Condition(column = "reg_time", operator = Operator.ge, index = 2)
private Date regBeginTime;
/**
* 注册结束时间
*/
@Condition(column = "reg_time", operator = Operator.le, handlerClass = EndDateConditionValueHandler.class, index = 3)
private Date regEndTime;
}
controller类:
// http://localhost:8080/listUser?userId=1&username=jim®BeginTime=2021-11-12®EndTime=2021-11-13
@GetMapping("listUser")
public List<TUser> listUser(UserParam userParam) {
Query query = Query.build(userParam);
// SELECT id, username, reg_time FROM t_user
// WHERE user_id=? AND username LIKE '%?%' AND reg_time >= ? AND reg_time <= ?
List<TUser> list = mapper.list(query);
return list;
}
Query.build会自动将请求参数封装成 sql 条件进行查询
对查询出来的结果做进一步加工
Query query = new Query();
// 添加查询条件
query.eq("username", "张三")
.page(1, 2) // 分页查询,按页码分,通常使用这种。
;
// 分页信息
PageInfo<TUser> pageInfo = mapper.page(query, tUser -> {
// 对每行数据进行转换
String username = tUser.getUsername();
if ("张三".equals(username)) {
tUser.setUsername("法外狂徒");
}
return tUser;
});
返回指定字段
有时候只需要查询几个字段,并不需要返回所有字段
/**
* 返回自定义字段,并转换成自定义类集合
*
* <pre>
* SELECT id, user_address FROM `t_user` t WHERE username = ?
* </pre>
*/
@Test
public void testGivenColumns2() {
Query query = new Query();
// 添加查询条件
query.eq("username", "张三");
// 数据库字段
List<String> columns = Arrays.asList("id", "user_address");
// 查询,自定义集合
List<UserVO> list = mapper.listBySpecifiedColumns(columns, query, UserVO.class);
for (UserVO obj : list) {
System.out.println(obj);
}
}
返回指定字段并分页
Query query = new Query()
.eq("state", 0)
.page(1, 6);
PageInfo<UserVO> mapPageInfo = mapper.pageBySpecifiedColumns(Arrays.asList("id", "username"), query, UserVO.class);
System.out.println(mapPageInfo);
只返回一个字段
// 返回username列
List<String> usernameList = mapper.listBySpecifiedColumns(Collections.singletonList("username"), query, String.class);
for (String username : usernameList) {
System.out.println(username);
}
// 返回时间列
List<Date> dateList = mapper.listBySpecifiedColumns(Collections.singletonList("add_time"), query, Date.class);
for (Date date : dateList) {
System.out.println(date);
}
// 返回decimal列
List<BigDecimal> moneyList = mapper.listBySpecifiedColumns(Collections.singletonList("money"), query, BigDecimal.class);
for (BigDecimal money : moneyList) {
System.out.println(money);
}
格式化查询参数
在做日期查询时,前端会传一个日期范围:开始日期、结束日期,如:2022-02-01
、2022-02-02
,此时对应数据库查询的日期范围是:2022-02-01 00:00:00 ~ 2022-02-02 23:59:59
此时我们需要对结束时间做一下修改:
public class EndDateConditionValueHandler implements ConditionValueHandler {
public Object getConditionValue(Object defaultValue, String fieldName, Object target) {
if (defaultValue == null) {
return null;
} else if (defaultValue instanceof Date) {
// 设置时间部分
return setHMS((Date)defaultValue, 23, 59, 59);
} else {
return defaultValue instanceof LocalDateTime ? setHMS((LocalDateTime)defaultValue, 23, 59, 59) : defaultValue;
}
}
/**
* 设置时间部分
*
* @param date 日期
* @param hour 时,0~23
* @param minute 分,0~59
* @param second 秒,0~59
* @return 返回新的对象
*/
public static Date setHMS(Date date, int hour, int minute, int second) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 设置时间部分
*
* @param date 日期
* @param hour 时,0~23
* @param minute 分,0~59
* @param second 秒,0~59
* @return 返回新的对象
*/
public static LocalDateTime setHMS(LocalDateTime date, int hour, int minute, int second) {
return date.withHour(hour).withMinute(minute).withSecond(second).withNano(0);
}
}
然后使用
/**
* 有效期,开始时间
* @mock 2021-12-02
*/
@Condition(column = "begin_time", operator = Operator.ge, index = 2)
private Date effectiveBeginTime;
/**
* 有效期,结束时间
* @mock 2021-12-09
*/
@Condition(column = "end_time", operator = Operator.le, handlerClass = EndDateConditionValueHandler.class, index = 3)
private Date effectiveEndTime;
更多demo请参考:测试用例
关于fastmybatis
fastmybatis是一个mybatis开发框架,其宗旨为:简单、快速、有效。
- 零配置快速上手
- 无需编写xml文件即可完成CRUD操作
- 支持mysql、sqlserver、oracle、postgresql、sqlite
- 支持自定义sql,对于基本的增删改查不需要写SQL,对于其它特殊SQL(如统计SQL)可写在xml中
- 支持与spring-boot集成,依赖starter即可
- 支持插件编写
- 轻量级,无侵入性,是官方mybatis的一种扩展
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 地开发环境搭建利器--vagrant
- 前端开发利器:Wep Replay
- 布隆过滤器你值得拥有的开发利器
- GitHub 推出开发者赚钱新利器,100% 全给开发者!
- 微服务解决方案 Go微服务开发利器
- 前端开发利器 WebStorm 发布 2017.3.3 正式版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
R语言实战(第2版)
[美] Robert I. Kabacoff / 王小宁、刘撷芯、黄俊文等 / 人民邮电出版社 / 2016-5 / 99.00元
本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。一起来看看 《R语言实战(第2版)》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
HEX HSV 转换工具
HEX HSV 互换工具