MyBatis的逆向工程教程

打印 上一主题 下一主题

主题 879|帖子 879|积分 2637

MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、Mapper接口以及SQL映射文件的过程。这个过程可以通过MyBatis提供的逆向工程工具来完成,极大地方便了开发人员,避免了重复的代码编写,提高了开发效率。
创建逆向工程的步骤

1、添加依赖&插件
  1. <build>
  2.        
  3.         <plugins>
  4.                
  5.                 <plugin>
  6.                         <groupId>org.mybatis.generator</groupId>
  7.                         <artifactId>mybatis-generator-maven-plugin</artifactId>
  8.                         <version>1.3.7</version>
  9.                        
  10.                         <configuration>
  11.                                
  12.                                 <configurationFile>
  13.                                         src/main/resources/generatorConfig.xml
  14.                                 </configurationFile>
  15.                         </configuration>
  16.                        
  17.                         <dependencies>
  18.                                
  19.                                 <dependency>
  20.                                         <groupId>org.mybatis.generator</groupId>
  21.                                         <artifactId>mybatis-generator-core</artifactId>
  22.                                         <version>1.3.7</version>
  23.                                 </dependency>
  24.                                
  25.                                 <dependency>
  26.                                         <groupId>mysql</groupId>
  27.                                         <artifactId>mysql-connector-java</artifactId>
  28.                                         <version>8.0.32</version>
  29.                                 </dependency>
  30.                         </dependencies>
  31.                 </plugin>
  32.         </plugins>
  33. </build>
复制代码
构建完成以后,Maven插件管理列表:

2、创建逆向工程配置文件generatorConfig.xml

在resources目录下创建。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3.         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6.    
  7.     <context id="DB2Tables" targetRuntime="MyBatis3Simple">
  8.         
  9.         <commentGenerator>
  10.             <property name="suppressAllComments" value="true"/>
  11.         </commentGenerator>
  12.         
  13.         <jdbcConnection driver
  14.                         connectionURL="jdbc:mysql://localhost:3306/dbtest1?serverTimezone=GMT%2B8"
  15.                         userId="root"
  16.                         password="123456">
  17.         </jdbcConnection>
  18.         
  19.         <javaModelGenerator targetPackage="com.evan.mybatis.entity"
  20.                             targetProject=".\src\main\java">
  21.             
  22.             <property name="enableSubPackages" value="true" />
  23.             
  24.             <property name="trimStrings" value="true" />
  25.         </javaModelGenerator>
  26.         
  27.         <sqlMapGenerator targetPackage="com.evan.mybatis.mapper"
  28.                          targetProject=".\src\main\resources">
  29.             <property name="enableSubPackages" value="true" />
  30.         </sqlMapGenerator>
  31.         
  32.         <javaClientGenerator type="XMLMAPPER"
  33.                              targetPackage="com.evan.mybatis.mapper"
  34.                              targetProject=".\src\main\java">
  35.             <property name="enableSubPackages" value="true" />
  36.         </javaClientGenerator>
  37.         
  38.         
  39.         
  40.         <table tableName="t_emp" domainObjectName="Emp"/>
  41.         <table tableName="t_dept" domainObjectName="Dept"/>
  42.     </context>
  43. </generatorConfiguration>
复制代码
生成简易版本逆向工程结构

双击逆向工程插件生成工程结构。

最终生成的Mavne工程的整体结构:

注意:构建过程中出现问题,先删除构建中生成的文件在进行重新构建。
创建MyBatis核心配置文件 & properties文件

mybatis-config.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.    
  7.     <properties resource="jdbc.properties"/>
  8.    
  9.     <settings>
  10.         
  11.         <setting name="mapUnderscoreToCamelCase" value="true"/>
  12.     </settings>
  13.    
  14.     <typeAliases>
  15.         
  16.         <package name="com.evan.mybatis.entity"/>
  17.     </typeAliases>
  18.    
  19.     <environments default="development">
  20.         <environment id="development">
  21.             <transactionManager type="JDBC"/>
  22.             <dataSource type="POOLED">
  23.                
  24.                 <property name="driver" value="${jdbc.driver}"/>
  25.                
  26.                 <property name="url" value="${jdbc.url}"/>
  27.                
  28.                 <property name="username" value="${jdbc.username}"/>
  29.                
  30.                 <property name="password" value="${jdbc.password}"/>
  31.             </dataSource>
  32.         </environment>
  33.     </environments>
  34.    
  35.     <mappers>
  36.         
  37.         <package name="com.evan.mybatis.mapper"/>
  38.     </mappers>
  39. </configuration>
复制代码
jdbc.properties
  1. jdbc.driver=com.mysql.cj.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/dbtest1?serverTimezone=GMT%2B8
  3. jdbc.username=root
  4. jdbc.password=123456
复制代码
测试

创建SqlSessionUtil工具类
  1. public class SqlSessionUtil {
  2.     private static final Logger LOGGER = LoggerFactory.getLogger(SqlSessionUtil.class);
  3.     public static SqlSession getSession() {
  4.         SqlSession sqlSession = null;
  5.         try {
  6.             InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
  7.             sqlSession = new SqlSessionFactoryBuilder().build(is).openSession(true);
  8.         } catch (IOException e) {
  9.             LOGGER.error("SqlSessionUtil.getSession方法出现异常:{0}",e);
  10.         }
  11.         return sqlSession;
  12.     }
  13. }
复制代码
  1. import org.junit.Test;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class MyBatisTest {
  5.     private static final Logger LOGGER = LoggerFactory.getLogger(MyBatisTest.class);
  6.     /**
  7.      * 删除操作测试
  8.      */
  9.     @Test
  10.     public void test1() {
  11.         SqlSession sqlSession = SqlSessionUtil.getSqlSession();
  12.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  13.         int result = mapper.deleteByPrimaryKey(12);
  14.         LOGGER.info("删除操作结果:{}",result);
  15.         sqlSession.close();
  16.     }
  17.     /**
  18.      * 添加操作测试
  19.      */
  20.     @Test
  21.     public void test2() {
  22.         SqlSession sqlSession = SqlSessionUtil.getSqlSession();
  23.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  24.         int result = mapper.insert(new Emp(0, "lisi", 10, "男", 2));
  25.         LOGGER.info("添加操作结果:{}",result);
  26.         sqlSession.close();
  27.     }
  28.     /**
  29.      * 根据主键id查询信息测试
  30.      */
  31.     @Test
  32.     public void test3() {
  33.         SqlSession sqlSession = SqlSessionUtil.getSqlSession();
  34.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  35.         Emp emp = mapper.selectByPrimaryKey(3);
  36.         LOGGER.info("查询结果:{}",emp);
  37.         sqlSession.close();
  38.     }
  39.     /**
  40.      * 查询所有信息测试
  41.      */
  42.     @Test
  43.     public void test4() {
  44.         SqlSession sqlSession = SqlSessionUtil.getSqlSession();
  45.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  46.         List<Emp> emps = mapper.selectAll();
  47.         emps.forEach(System.out::println);
  48.         sqlSession.close();
  49.     }
  50.     /**
  51.      * 修改操作测试
  52.      */
  53.     @Test
  54.     public void test5() {
  55.         SqlSession sqlSession = SqlSessionUtil.getSqlSession();
  56.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  57.         Emp emp = new Emp(9,"evan",20,"男",3);
  58.         int result = mapper.updateByPrimaryKey(emp);
  59.         LOGGER.info("修改操作结果:{}",result);
  60.         sqlSession.close();
  61.     }
  62. }
复制代码
生成标准版本逆向工程结构

修改generatorConfig.xml中的逆向工程版本生成策略:
  1. [/code]双击逆向工程插件生成工程结构。
  2. 标准版本最后生成结构:
  3. [img]https://img2024.cnblogs.com/blog/3382744/202402/3382744-20240204051721825-1023615595.png[/img]
  4. [size=3]测试[/size]
  5. [code]public class MyBatisTest {
  6.     private static final Logger LOGGER = LoggerFactory.getLogger(MyBatisTest.class);
  7.    
  8.     @Test
  9.     public void test1() {
  10.         SqlSession sqlSession = SqlSessionUtil.getSession();
  11.         EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  12.         EmpExample empExample = new EmpExample();
  13.         /*
  14.         根据条件查询数据:
  15.         创建条件对象,通过andXXX方法为SQL添加查询添加,每个条件之间是and关系
  16.          */
  17.         empExample.createCriteria()
  18.                 .andEmpNameLike("e")
  19.                 .andAgeGreaterThan(20).andDeptIdIsNotNull();
  20.         //将之前添加的条件通过or拼接其他条件
  21.         empExample.or().andGenderEqualTo("男");
  22.         List<Emp> emps = mapper.selectByExample(empExample);
  23.         emps.forEach(System.out::println);
  24.         Emp emp = new Emp(11,"haha",12,"女",null);
  25.         //普通修改功能,根据主键修改同时属性值null也会被修改
  26.         //int result = mapper.updateByPrimaryKey(emp);
  27.         //选择性修改,当属性值为null不会被修改
  28.         int result = mapper.updateByPrimaryKeySelective(emp);
  29.         LOGGER.info("修改操作结果:{}",result);
  30.         sqlSession.close();
  31.     }
  32. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表