一、什么是Mybatis逆向工程?
简单的解释就是通过数据库中的单表,自动生成java代码。
我们平时在使用Mabatis框架进行Web应用开发的过程中,需要根据数据库表编写对应的Pojo类和Mapper映射文件,而这个过程重复单一且浪费时间。基于此,MyBatis官方为了让开发者更加方便快捷地使用MYBatis框架而不必编写繁琐的Pojo类以及Mapper文件,提供了一个十分简洁的逆向工程的工具。
Mybatis官方提供了逆向工程,可以针对数据库的表自动生成对应的mybatis代码(mapper.javamapper.xmlpojo类)有了这个工具可以大大简化我们持久层代码的编写,和写代码过程中出错的概率。
二、逆向工程的下载
https://github.com/mybatis/generator/releases/tag/mybatis-generator-1.3.2
下载完后,先将逆向工程复制到工作空间中
然后再导入到eclipse中:
三、Mybatis逆向工程的使用步骤
第一步:在generatorConfig.xml中配置Mapper生成的详细信息
注意修改以下几点:
- 修改要生成的数据库表
- pojo文件所在包路径
- Mapper所在的包路径
<?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="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/e3mall" userId="root" password="123"> </jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="cn.itcast.mybatis.pojo" targetProject=".src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="cn.itcast.mybatis.mapper" targetProject=".src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.mybatis.mapper" targetProject=".src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table schema="" tableName="user"></table> <table schema="" tableName="order"></table> </context> </generatorConfiguration>
第二步:生成逆向工程代码
找到下图所示的java文件,执行工程main主函数
刷新工程,发现代码生成:
注意:Mapper映射文件已经存在时,如果重新生成mapper.xml文件,内容不被覆盖而是进行内容追加,结果导致mybatis解析失败。故需要重新生成代码时,先删除原来已经生成的mapper xml文件再进行生成。Mybatis自动生成的pojo类及对应的mapper.java文件不是内容而是直接覆盖没有此问题。
四、测试逆向工程代码
第一步:将生成的代码复制到mybatis-spring工程中
第二步:在applicationContext.xml修改spring配置文件
<!-- Mapper代理的方式开发方式,扫描包方式配置代理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置mapper接口 --> <property name="basePackage" value="cn.itcast.mybatis.mapper"/> </bean>
第三步:编写测试方法:
public class UserMapperTest { private ApplicationContext context; @Before public void setUp() throws Exception { context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); } @Test public void testInsert() { // 获取Mapper UserMapper userMapper = this.context.getBean(UserMapper.class); User user = new User(); user.setUsername("曹操"); user.setAddress("魏国"); user.setSex("男"); userMapper.insert(user); } @Test public void testSelectByExample() { // 获取Mapper UserMapper userMapper = this.context.getBean(UserMapper.class); // 创建User对象扩展类,用户设置查询条件 UserExample example = new UserExample(); Criteria criteria = example.createCriteria(); criteria.andUsernameLike("%张%"); // 查询数据 List<User> list = userMapper.selectByExample(example); for (User user : list) { System.out.println(user); } } @Test public void testSelectByPrimaryKey() { // 获取Mapper UserMapper userMapper = this.context.getBean(UserMapper.class); User user = userMapper.selectByPrimaryKey(1); System.out.println(user); } }
参考文章:https://blog.csdn.net/lisongjia123/article/details/51244029