MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、Mapper接口以及SQL映射文件的过程。这个过程可以通过MyBatis提供的逆向工程工具来完成,极大地方便了开发人员,避免了重复的代码编写,提高了开发效率。
创建逆向工程的步骤
1、添加依赖&插件
- <build>
-
- <plugins>
-
- <plugin>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-maven-plugin</artifactId>
- <version>1.3.7</version>
-
- <configuration>
-
- <configurationFile>
- src/main/resources/generatorConfig.xml
- </configurationFile>
- </configuration>
-
- <dependencies>
-
- <dependency>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-core</artifactId>
- <version>1.3.7</version>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.32</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
复制代码 构建完成以后,Maven插件管理列表:

2、创建逆向工程配置文件generatorConfig.xml
在resources目录下创建。- <?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="DB2Tables" targetRuntime="MyBatis3Simple">
-
- <commentGenerator>
- <property name="suppressAllComments" value="true"/>
- </commentGenerator>
-
- <jdbcConnection driver
- connectionURL="jdbc:mysql://localhost:3306/dbtest1?serverTimezone=GMT%2B8"
- userId="root"
- password="123456">
- </jdbcConnection>
-
- <javaModelGenerator targetPackage="com.evan.mybatis.entity"
- targetProject=".\src\main\java">
-
- <property name="enableSubPackages" value="true" />
-
- <property name="trimStrings" value="true" />
- </javaModelGenerator>
-
- <sqlMapGenerator targetPackage="com.evan.mybatis.mapper"
- targetProject=".\src\main\resources">
- <property name="enableSubPackages" value="true" />
- </sqlMapGenerator>
-
- <javaClientGenerator type="XMLMAPPER"
- targetPackage="com.evan.mybatis.mapper"
- targetProject=".\src\main\java">
- <property name="enableSubPackages" value="true" />
- </javaClientGenerator>
-
-
-
- <table tableName="t_emp" domainObjectName="Emp"/>
- <table tableName="t_dept" domainObjectName="Dept"/>
- </context>
- </generatorConfiguration>
复制代码 生成简易版本逆向工程结构
双击逆向工程插件生成工程结构。

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

注意:构建过程中出现问题,先删除构建中生成的文件在进行重新构建。
创建MyBatis核心配置文件 & properties文件
mybatis-config.xml- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="jdbc.properties"/>
-
- <settings>
-
- <setting name="mapUnderscoreToCamelCase" value="true"/>
- </settings>
-
- <typeAliases>
-
- <package name="com.evan.mybatis.entity"/>
- </typeAliases>
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
-
- <property name="driver" value="${jdbc.driver}"/>
-
- <property name="url" value="${jdbc.url}"/>
-
- <property name="username" value="${jdbc.username}"/>
-
- <property name="password" value="${jdbc.password}"/>
- </dataSource>
- </environment>
- </environments>
-
- <mappers>
-
- <package name="com.evan.mybatis.mapper"/>
- </mappers>
- </configuration>
复制代码 jdbc.properties- jdbc.driver=com.mysql.cj.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/dbtest1?serverTimezone=GMT%2B8
- jdbc.username=root
- jdbc.password=123456
复制代码 测试
创建SqlSessionUtil工具类- public class SqlSessionUtil {
- private static final Logger LOGGER = LoggerFactory.getLogger(SqlSessionUtil.class);
- public static SqlSession getSession() {
- SqlSession sqlSession = null;
- try {
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- sqlSession = new SqlSessionFactoryBuilder().build(is).openSession(true);
- } catch (IOException e) {
- LOGGER.error("SqlSessionUtil.getSession方法出现异常:{0}",e);
- }
- return sqlSession;
- }
- }
复制代码- import org.junit.Test;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class MyBatisTest {
- private static final Logger LOGGER = LoggerFactory.getLogger(MyBatisTest.class);
- /**
- * 删除操作测试
- */
- @Test
- public void test1() {
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- int result = mapper.deleteByPrimaryKey(12);
- LOGGER.info("删除操作结果:{}",result);
- sqlSession.close();
- }
- /**
- * 添加操作测试
- */
- @Test
- public void test2() {
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- int result = mapper.insert(new Emp(0, "lisi", 10, "男", 2));
- LOGGER.info("添加操作结果:{}",result);
- sqlSession.close();
- }
- /**
- * 根据主键id查询信息测试
- */
- @Test
- public void test3() {
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- Emp emp = mapper.selectByPrimaryKey(3);
- LOGGER.info("查询结果:{}",emp);
- sqlSession.close();
- }
- /**
- * 查询所有信息测试
- */
- @Test
- public void test4() {
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- List<Emp> emps = mapper.selectAll();
- emps.forEach(System.out::println);
- sqlSession.close();
- }
- /**
- * 修改操作测试
- */
- @Test
- public void test5() {
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- Emp emp = new Emp(9,"evan",20,"男",3);
- int result = mapper.updateByPrimaryKey(emp);
- LOGGER.info("修改操作结果:{}",result);
- sqlSession.close();
- }
- }
复制代码 生成标准版本逆向工程结构
修改generatorConfig.xml中的逆向工程版本生成策略:- [/code]双击逆向工程插件生成工程结构。
- 标准版本最后生成结构:
- [img]https://img2024.cnblogs.com/blog/3382744/202402/3382744-20240204051721825-1023615595.png[/img]
- [size=3]测试[/size]
- [code]public class MyBatisTest {
- private static final Logger LOGGER = LoggerFactory.getLogger(MyBatisTest.class);
-
- @Test
- public void test1() {
- SqlSession sqlSession = SqlSessionUtil.getSession();
- EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
- EmpExample empExample = new EmpExample();
- /*
- 根据条件查询数据:
- 创建条件对象,通过andXXX方法为SQL添加查询添加,每个条件之间是and关系
- */
- empExample.createCriteria()
- .andEmpNameLike("e")
- .andAgeGreaterThan(20).andDeptIdIsNotNull();
- //将之前添加的条件通过or拼接其他条件
- empExample.or().andGenderEqualTo("男");
- List<Emp> emps = mapper.selectByExample(empExample);
- emps.forEach(System.out::println);
- Emp emp = new Emp(11,"haha",12,"女",null);
- //普通修改功能,根据主键修改同时属性值null也会被修改
- //int result = mapper.updateByPrimaryKey(emp);
- //选择性修改,当属性值为null不会被修改
- int result = mapper.updateByPrimaryKeySelective(emp);
- LOGGER.info("修改操作结果:{}",result);
- sqlSession.close();
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |