不好意思,我吹牛了,有点标题党。
本次的升级并没有什么新鲜的东西,就是给StringBuilder套了个壳子,本质上还是字符串的拼接,目的是为了减少大量的if,让判断+拼接的过程缩短在一行上,以及在拼接时不再需要注意空格了。
可是,不管怎么样,反正比以前更方便了就是了,大家如果有兴趣的话可以了解一下。
假如我们有一个实体对象,需要把它作为查询条件,那么我们一般的做法是这样的。
// 作为查询条件的实体对象 ParamPO paramPO = new ParamPO(); paramPO.setAge(10); paramPO.setHeight(1); // sql主体,JDK17+的写法 String sql = """ select id,name,age,create_time from user_info where 1=1 """; // 拼接条件 StringBuilder stringBuilder = new StringBuilder(sql); if(paramPO.getAge() > 0){ stringBuilder.append(" and age > {age}"); // 需要注意空格,不然一不小心就沾一起了 } if(paramPO.getName() != null){ stringBuilder.append(" and name = {name}"); // 需要注意空格,不然一不小心就沾一起了 } if(paramPO.getHeight() != null){ stringBuilder.append(" and height > {height}"); // 需要注意空格,不然一不小心就沾一起了 } // 查询数据 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).selectList(stringBuilder.toString(), paramPO, ParamPO.class);
这里面最被人诟病的就在于拼接条件的这一段,因为会出现大量的if,本来一行就可以解决的,现在变成了三行
所以,我们此次的升级就是为了让这一段更优雅一点。
以实体对象作为参数的示例
ParamPO paramPO = new ParamPO(); paramPO.setAge(10); paramPO.setHeight(1); // sql主体,JDK17+的写法 String sql = """ select id,name,age,create_time from user_info where 1=1 """; // 条件拼接 SqlBuilder sqlBuilder = SqlBuilder.builder() .init(sql) // 这里传入sql主体 .append("and age > {age}", paramPO.getAge() > 0) // 第一个参数传入要拼接的where条件,第二个参数传入是否要拼接的判断条件,也就是说第二个参数的等式成立才会将第一个参数拼接到sql上去,下面都是一样的 .append("and name = {name}", paramPO.getName() != null) .append("and height > {height}", paramPO.getHeight() != null); // 直接toString 可以获取到拼接后的完整sql String sql = sqlBuilder.toString(); // 查询数据 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).selectList(sql, paramPO, ParamPO.class);
以数组作为参数的示例
// 作为参数的数组 List<Object> params = new ArrayList<>(); // sql主体,JDK17+的写法 String sql = """ select id,name,age,create_time from user_info where 1=1 """; // 条件拼接 SqlBuilder sqlBuilder = SqlBuilder.builder() .init(sql) // 这里传入sql主体 // 这里为了偷懒,还是用到了paramPO对象,反正大家懂那个意思就行了 // 第一个参数传入要拼接的where条件,第二个参数传入是否要拼接的判断条件 // 也就是说第二个参数的等式成立才会将第一个参数拼接到sql上去,下面都是一样的 // 第三个参数是一个回调函数,用来往params里添加数据的 .append("and age > ?", paramPO.getAge() > 0, ()->{params.add(paramPO.getAge());}) .append("and name = ?", paramPO.getName() != null, ()->{params.add(paramPO.getName());}) .append("and height > ?", paramPO.getHeight() != null, ()->{params.add(paramPO.getHeight());}); // 直接toString 可以获取到拼接后的完整sql String sql = sqlBuilder.toString(); // 查询数据,注意看第二个参数,需要将List转成数组 List<ParamPO> result = MagicDBUtils.get(jdbcTemplate).selectList(sql, params.toArray(), ParamPO.class);
简单说明
我们肯定都知道这个吧
@Resource private JdbcTemplate jdbcTemplate;
本工具包只是对它做了一个很轻微的扩展,大家不必把它当成是一个持久层框架,而且它事实上也不是一个框架,就是个小型的工具包而已,里面提供的功能也不仅仅是操作数据库。
大家如果有兴趣可以访问官网了解详情:https://magician-io.com
评论删除后,数据将无法恢复
据说在代码里拼接查询条件不够优雅?Magic-1.0.2 发布
不好意思,我吹牛了,有点标题党。
本次的升级并没有什么新鲜的东西,就是给StringBuilder套了个壳子,本质上还是字符串的拼接,目的是为了减少大量的if,让判断+拼接的过程缩短在一行上,以及在拼接时不再需要注意空格了。
可是,不管怎么样,反正比以前更方便了就是了,大家如果有兴趣的话可以了解一下。
假如我们有一个实体对象,需要把它作为查询条件,那么我们一般的做法是这样的。
这里面最被人诟病的就在于拼接条件的这一段,因为会出现大量的if,本来一行就可以解决的,现在变成了三行
所以,我们此次的升级就是为了让这一段更优雅一点。
以实体对象作为参数的示例
以数组作为参数的示例
简单说明
我们肯定都知道这个吧
本工具包只是对它做了一个很轻微的扩展,大家不必把它当成是一个持久层框架,而且它事实上也不是一个框架,就是个小型的工具包而已,里面提供的功能也不仅仅是操作数据库。
大家如果有兴趣可以访问官网了解详情:https://magician-io.com