内容简介: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的一种扩展
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mobilizing Web Sites
Layon, Kristofer / 2011-12 / 266.00元
Everyone has been talking about the mobile web in recent years, and more of us are browsing the web on smartphones and similar devices than ever before. But most of what we are viewing has not yet bee......一起来看看 《Mobilizing Web Sites》 这本书的介绍吧!