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

大爱柠檬汁
 大爱柠檬汁
发布于 2019年11月27日
收藏 40

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官方文档

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:Mybatis Generator 1.4.0 发布,自动代码工具
加载中

精彩评论

w
weir2016
mybatis-plus 打遍天下无敌手

最新评论(15

zhanggang807
zhanggang807
MyBatis3DynamicSql 不太喜欢这种 模式, java编码方式拼sql不直观
风水书生
风水书生
php的用户,很喜欢这种操作模式。
我看到这种觉得神烦。不像sql直观
熊猫叔叔
还是习惯手撸xml,
OSC_YTfjsI
OSC_YTfjsI
之前有想过写一个这个 东西 一看代码发现 lambda 的写法还不够彻底 加油
w
weir2016
mybatis-plus 打遍天下无敌手
大爱柠檬汁
大爱柠檬汁
每个人想法不一样,我始终觉得在代码里面写sql很不好。万一改个字段,又不能像代码一样能提示错误。
w
wyccc
xml才是没有字段校验,mbp的lambdaWrapper对字段是强校验。
大爱柠檬汁
大爱柠檬汁
Mybatis Generator官方不推荐生成xml的模式,而且那是很老的模式了。
Mybatis Plus的方式我没使用过,不知道。你可以举个例子或者给个网址,我看看你说的lambdaWrapper是怎么一种方式。
这是一个小号
userService.lambdaQuery().eq(User::getUserName,"XXX").one() ->select * from user where user_name = 'XXX'
大爱柠檬汁
大爱柠檬汁
谢谢 我去看了官方的文档 感觉都差不多
L
LongCity
我的想法与你相反, 我觉得sql是最清晰的。单纯代码而言,一个普通的查询,sql的代码量很少,一眼就扫完了,而java组装query对象有太多字符。在我知道表结构的情况下,我看sql立刻就能大概判断出性能了,而动态的代码往往能组装成很多种调用方式,无法直观地判断性能。
买房也用券
买房也用券
太臃肿,不喜欢用
陈钇蒙
java-mysql这条技术栈感觉太臃肿了, 为了使用mysql要附上太多库了, mybatis, mybatis-plus, 一旦读写分离分库分表又要加一堆share-jdbc, 表格动态修改又要使用flyway, 我已经全面放弃mysql, 转向mongodb了, 一个spring-mongodb就能解决全部问题, 其他分库问题mongodb靠自己就能解决
w
weir2016
恩恩现在好多都用mongoDB了
h
hu0301
理解很到位,样例也很好,值得借鉴。⭐⭐⭐⭐⭐
返回顶部
顶部