fastmybatis 1.10.12 发布,mybatis 开发利器

栏目: 软件资讯 · 发布时间: 2年前

内容简介: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&regBeginTime=2021-11-12&regEndTime=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-012022-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的一种扩展

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

社交天性

社交天性

[美] 马修·利伯曼(Matthew D. Lieberman) / 贾拥民 / 浙江人民出版社 / 2016-6 / 69.90

[内容简介] ● 《社交天性》是社会心理学家马修·利伯曼解读人类“社会脑”的权威之作,它告诉我们为什么在充满合作与竞争的智慧社会中人们喜爱社交又相互连接,个人的社会影响力如何得以发挥,书中处处充满了令人惊喜的洞见。 ● 为什么有的人天生善于社交,而有的人总是充满障碍? 为什么智商越高的人越难相处? 心痛对人的伤害甚至超过头痛? 慈善组织如何激发人们的捐赠行为? ......一起来看看 《社交天性》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具