Mybatis是一个使用相当频繁的ORM框架,但在使用此框架时不可避免的要编写和数据表对应的POJO类、XXmapper接口以及XXmapper.xml,如果都是简单的、基础的CRUD场景,那么这个过程也是相当枯燥和机械的,可以适时的引入MyBatis Generator来解放一下。
正文 MyBatis Generator (简称 MBG) 是Mybatis官方提供的逆向工程工具。它可以为 MyBatis的所有版本以及 2.2.0之后的 iBATIS版本自动生成 ORM层代码,典型地包括我们日常需要手写的 POJO
、mapper xml
以及 mapper
接口等。MyBatis Generator 自动生成的 ORM层代码几乎可以应对大部分 CRUD 数据表操作场景,可谓是一个生产力工具啊!
既然它的功能就是这么的简单明了,那就话不多说上手使用一下,先创建一个t_user数据表,表结构如下:
引入相关pom依赖及其插件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <dependency > <groupId > org.mybatis.generator</groupId > <artifactId > mybatis-generator-core</artifactId > <version > 1.3.7</version > </dependency > <plugin > <groupId > org.mybatis.generator</groupId > <artifactId > mybatis-generator-maven-plugin</artifactId > <version > 1.3.7</version > <configuration > <configurationFile > src/main/resources/mybatis-generator.xml</configurationFile > <overwrite > true</overwrite > </configuration > <dependencies > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 8.0.12</version > </dependency > </dependencies > </plugin >
然后创建src/main/resources/mybatis-generator.xml配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration > <context id ="MySql" defaultModelType ="flat" > <plugin type ="org.mybatis.generator.plugins.SerializablePlugin" /> <commentGenerator > <property name ="suppressAllComments" value ="true" /> </commentGenerator > <jdbcConnection driverClass ="com.mysql.cj.jdbc.Driver" connectionURL ="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai" userId ="root" password ="123" /> <javaModelGenerator targetPackage ="com.example.testpagehelper.edu.li.pojo" targetProject ="src/main/java" /> <sqlMapGenerator targetPackage ="mapper" targetProject ="src/main/resources" /> <javaClientGenerator targetProject ="src/main/java" targetPackage ="com.example.testpagehelper.edu.li.dao" type ="XMLMAPPER" /> <table tableName ="t_user" domainObjectName ="User" > <property name ="useActualColumnNames" value ="true" /> </table > </context > </generatorConfiguration >
记录几个关键标签的作用:
< jdbcConnection />
数据库连接配置,至关重要
<javaModelGenerator />
指定自动生成的 POJO置于哪个包下
<sqlMapGenerator />
指定自动生成的 mapper.xml置于哪个包下
<javaClientGenerator />
指定自动生成的 DAO接口置于哪个包下
<table />
指定数据表名,可以使用_和%通配符
更多关于 MyBatis Generator 配置的内容,可以移步 官方文档 。
准备好上述两步操作,就可以在maven图形化构建中找到generator插件运行,即可逆向工程自动生成:
可以看到熟悉的User、UserMapper.xml、UserMapper都自动生成好了。
自动生成的代码怎么使用呢? 我们发现通过 MyBatis Generator自动生成的代码中带有一个 Example文件,比如上图中的UserExample,其实 Example文件对于平时快速开发还是有很大好处的,它能节省很多写 sql语句的时间,举几个实际的例子吧:
单条件模糊搜索 + 排序 在我们的例子中,假如我想通过用户名 username
来在 MySQL数据表 t_user
中进行模糊搜索,并对结果进行排序,此时利用UserExample
可以方便快速的实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Service public class UserService { @Autowired UserMapper userMapper; public List<User> searchUserByUsername (String username) { UserExample userExample=new UserExample(); userExample.createCriteria().andUsernameLike('%' +username+'%' ); String orderByClause = "creattime DESC" ; userExample.setOrderByClause(orderByClause); return userMapper.selectByExample(userExample); } }
多条件精确搜索 再比如,我们想通过住址 address
和用户名 username
两个字段来在数据表 t_user
中实现精确搜索,则可以如下实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Service public class UserService { @Autowired UserMapper userMapper; public List<User> multiConditionsSearch (User user) { UserExample userExample=new UserExample(); UserExample.Criteria criteria = userExample.createCriteria(); if (!"" .equals(user.getUsername())) criteria.andUsernameEqualTo(user.getUsername()); if (!"" .equals(user.getAddress())) criteria.andAddressEqualTo(user.getAddress()); return userMapper.selectByExample(userExample); } }
MybatisGenerator的用法还有很多很多,博主只不过是初步了解。对于生成的Example的使用仁者见仁智者见智,也有很多人喜欢在配置时不生成Example,也就不能使用上述展示的用逻辑代码取代编写sql语句的方式,而是选择去xml文件中编写sql语句。这两种方法各有利弊,还是那句话:“扬长避短,灵活运用”。