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基礎上改進而來。這次的更新主要集中在這種模式上面。
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官方文檔
[admin
]