MyBatis的逆向工程教程
MyBatis逆向工程是指根据数据库表结构自动生成对应的实体类、Mapper接口以及SQL映射文件的过程。这个过程可以通过MyBatis提供的逆向工程工具来完成,极大地方便了开发人员,避免了重复的代码编写,提高了开发效率。
创建逆向工程的步骤
1、添加依赖&插件
<!-- 控制Maven在构建过程中配置相关配置 --> <build> <!-- 构建过程中的使用的插件 --> <plugins> <!-- MyBatis逆向工程操作插件 --> <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> <!-- MySQL驱动 --> <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> <!-- targetRuntime属性: 执行生成的逆向工程的版本 属性值: MyBatis3Simple: 生成基本的CRUD(简易版本) MyBatis3: 生成带条件的CRUD(标准版本) --> <context id="DB2Tables" targetRuntime="MyBatis3Simple"> <!-- 表示生成文件不带注释 --> <commentGenerator> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 数据库的连接信息 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/dbtest1?serverTimezone=GMT%2B8" userId="root" password="123456"> </jdbcConnection> <!-- javaBean的生成策略--> <javaModelGenerator targetPackage="com.evan.mybatis.entity" targetProject=".\src\main\java"> <!-- 开启子包识别 --> <property name="enableSubPackages" value="true" /> <!-- 将数据表中字段前后的空格清除,生成实体类属性 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- SQL映射文件的生成策略 --> <sqlMapGenerator targetPackage="com.evan.mybatis.mapper" targetProject=".\src\main\resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- Mapper接口的生成策略,即DAO接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.evan.mybatis.mapper" targetProject=".\src\main\java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 逆向分析的表 --> <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName --> <!-- domainObjectName属性指定生成出来的实体类的类名 --> <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文件,此后就可以在当前文件的数据源连接信息使用${}的方式访问value --> <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> <!-- 引入mybatis的映射文件 --> <mappers> <!-- 以包为单位引入映射文件 要求: 1、mapper接口所在的包要和映射文件所在的包一致 2、mapper接口要和映射文件的名字一致 --> <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
中的逆向工程版本生成策略:
<!-- 生成标准版本逆向工程结构 --> <context id="DB2Tables" targetRuntime="MyBatis3"> </context>
双击逆向工程插件生成工程结构。
标准版本最后生成结构:
测试
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(null); 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(); } }
分类:
Java / MyBatis
标签:
MyBatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南