Mybatis Generator 1.4.0 发布,自动代码工具

来源: 投稿
2019-11-27

Mybatis Generator是一个自动代码工具,此版本相较于旧版本有很多重要的更新。

Mybatis Generator目前有5种运行模式,分别为:MyBatis3DynamicSql、MyBatis3Kotlin、MyBatis3、MyBatis3Simple、MyBatis3DynamicSqlV1。

<context id="MysqlTables" targetRuntime="MyBatis3DynamicSql" defaultModelType="flat">
 <!-- 省略中间 -->
</context>

1、MyBatis3、MyBatis3Simple是比较老的模式,通常生成mapper接口、model实体和XML文件(当javaClientGenerator type为 ANNOTATEDMAPPER 时不生成XML)。这两种模式生成的文件只需要依赖Mybatis3即可正常工作,但是对于很多操作不支持。如果想要使用数据库函数或者多表联合查询,这种模式下是不支持的,需要写额外的SQL。

2、MyBatis3DynamicSqlV1是比较新的模式。除了需要依赖Mybatis3以外,还需要mybatis-dynamic-sql才能正常工作。相比上面的老模式,这种模式更加方便。

        Student obj = new Student();
        obj.setEmail("xxx@xx.com");

        //跟新id为8的学生信息
        studentMapper.updateByPrimaryKeySelective(obj);

        //将学生id大于10并且名字含有"张"或者性别为1的进行更新。
        // sql: update student set email='xxx@xx.com' where id >10 and (name like '%张%' or sex =1)
        studentMapper.updateByExampleSelective(obj).where(student.id, isGreaterThan(10L))
                .and(student.name, isLike("%张%"), SqlBuilder.or(student.sex, isEqualTo(1)))
                .build().execute();
        //多表join查询,这主要是Mybatis-Dynamic-Sql的功能
        SelectStatementProvider selectStatement =select(student.allColumns()).from(student).join(teacher)
                .on(student.id, equalTo(teacher.id))
                .where(teacher.age, isGreaterThanOrEqualTo(30))
                .build().render(RenderingStrategies.MYBATIS3);
        List<Student> list = studentMapper.selectMany(selectStatement);

3、MyBatis3DynamicSql、MyBatis3Kotlin这两种模式是类似的,一种是使用java,一种是Kotlin。这是在MyBatis3DynamicSqlV1基础上改进而来。这次的更新主要集中在这种模式上面。

  • 删除了*ByExample的方法。
  • 增加了Optional支持。
  • 增加了批量新增的支持。
        Student obj = new Student();
        obj.setEmail("xxx@xx.com");
        //跟原来一样的更新
        studentMapper.updateByPrimaryKeySelective(obj);
        //批量新增
        studentMapper.insertMultiple(Collections.singleton(obj));
        //按条件更新 类似updateByExample  sql: update student set email = #{email} where id >5 and ( name like '%wang%' or sex =1 )
        studentMapper.update(completer ->
                completer.set(student.email).equalTo(obj.getEmail())
                        .where(student.id, isGreaterThanOrEqualTo(5L))
                        .and(student.name, isLike("%wang%"), SqlBuilder.or(student.sex, isEqualTo(1)))
        );
        //按条件搜索 类似 selectByExample  sql: select * from student where id >= 5 and ( name like '%wang%' or sex =1 )
        List<Student> list = studentMapper.select(completer ->
                completer.where(student.id, isGreaterThanOrEqualTo(5L))
                        .and(student.name, isLike("%wang%"), SqlBuilder.or(student.sex, isEqualTo(1)))
        );
        // Optional 支持
        Optional<Student> optional = studentMapper.selectByPrimaryKey(5L);
        optional.ifPresent(value -> System.out.println(value.getEmail()));
        //Mybatis-Dynamic-Sql 功能
        SelectStatementProvider selectStatement =select(student.allColumns()).from(student).join(teacher)
                .on(student.id, equalTo(teacher.id))
                .where(teacher.age, isGreaterThanOrEqualTo(30))
                .build().render(RenderingStrategies.MYBATIS3);
        List<Student> studentList = studentMapper.selectMany(selectStatement);

默认模式为MyBatis3DynamicSql,强烈推荐。具体更新,请查看官网Mybatis Generator官方文档

展开阅读全文
41 收藏
分享
加载中
精彩评论
mybatis-plus 打遍天下无敌手
2019-11-27 18:03
3
举报
最新评论 (15)
MyBatis3DynamicSql 不太喜欢这种 模式, java编码方式拼sql不直观
2019-12-05 21:03
0
回复
举报
php的用户,很喜欢这种操作模式。
我看到这种觉得神烦。不像sql直观
2019-11-28 09:59
0
回复
举报
还是习惯手撸xml,
2019-11-28 08:18
0
回复
举报
之前有想过写一个这个 东西 一看代码发现 lambda 的写法还不够彻底 加油
2019-11-27 21:41
0
回复
举报
mybatis-plus 打遍天下无敌手
2019-11-27 18:03
3
回复
举报
每个人想法不一样,我始终觉得在代码里面写sql很不好。万一改个字段,又不能像代码一样能提示错误。
2019-11-27 21:51
0
回复
举报
xml才是没有字段校验,mbp的lambdaWrapper对字段是强校验。
2019-11-27 21:56
0
回复
举报
Mybatis Generator官方不推荐生成xml的模式,而且那是很老的模式了。
Mybatis Plus的方式我没使用过,不知道。你可以举个例子或者给个网址,我看看你说的lambdaWrapper是怎么一种方式。
2019-11-27 22:02
0
回复
举报
userService.lambdaQuery().eq(User::getUserName,"XXX").one() ->select * from user where user_name = 'XXX'
2019-11-28 17:17
0
回复
举报
谢谢 我去看了官方的文档 感觉都差不多
2019-11-29 09:16
0
回复
举报
我的想法与你相反, 我觉得sql是最清晰的。单纯代码而言,一个普通的查询,sql的代码量很少,一眼就扫完了,而java组装query对象有太多字符。在我知道表结构的情况下,我看sql立刻就能大概判断出性能了,而动态的代码往往能组装成很多种调用方式,无法直观地判断性能。
2019-11-29 09:33
0
回复
举报
太臃肿,不喜欢用
2019-11-28 09:48
0
回复
举报
java-mysql这条技术栈感觉太臃肿了, 为了使用mysql要附上太多库了, mybatis, mybatis-plus, 一旦读写分离分库分表又要加一堆share-jdbc, 表格动态修改又要使用flyway, 我已经全面放弃mysql, 转向mongodb了, 一个spring-mongodb就能解决全部问题, 其他分库问题mongodb靠自己就能解决
2019-11-28 10:46
0
回复
举报
恩恩现在好多都用mongoDB了
2019-11-28 11:00
0
回复
举报
理解很到位,样例也很好,值得借鉴。⭐⭐⭐⭐⭐
2019-11-27 15:13
0
回复
举报
更多评论
15 评论
41 收藏
分享
返回顶部
顶部