ToB企服应用市场:ToB评测及商务社交产业平台
标题:
MyBatis的逆向工程教程
[打印本页]
作者:
半亩花草
时间:
2024-4-23 04:07
标题:
MyBatis的逆向工程教程
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();
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4