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的一种扩展

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

查看所有标签

猜你喜欢:

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

R语言实战(第2版)

R语言实战(第2版)

[美] Robert I. Kabacoff / 王小宁、刘撷芯、黄俊文等 / 人民邮电出版社 / 2016-5 / 99.00元

本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。一起来看看 《R语言实战(第2版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具