一、什么是MyBatis逆向工程
正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。 Hibernate是支持正向工程的。
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:Java实体类、Mapper接口、Mapper映射文件
二、创建逆向工程的步骤
①数据的准备
CREATE DATABASE IF NOT EXISTS db_test;
USE db_test;
CREATE TABLE IF NOT EXISTS t_student(
student_id BIGINT PRIMARY KEY auto_increment,
name VARCHAR(20),
age INT,
sex CHAR,
birth date,
score DOUBLE
);
INSERT INTO t_student(name,age,sex,birth,score)
VALUES ('Sakura',10,'女','1987-04-01',95),
('Mikoto',14,'女','1995-05-02',100),
('Shana',15,'女',null,97);
②添加依赖和插件
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
<!-- 配置MyBatis逆向工程的插件-->
<build>
<!-- 构建过程中用到的插件 -->
<plugins>
<!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<!-- 允许覆盖 -->
<configuration>
<overwrite>true</overwrite>
</configuration>
<!-- 插件的依赖 -->
<dependencies>
<!-- 逆向工程的核心依赖 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
③创建逆向工程的配置文件
逆向工程的配置文件的文件名必须是:generatorConfig.xml,存放在类的根目录下。
<?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="MyBatis3">
<commentGenerator>
<!-- 是否去掉生成日期 -->
<property name="suppressDate" value="true"></property>
<!-- 是否去除注释 -->
<property name="suppressAllComments" value="true"></property>
</commentGenerator>
<!-- 数据库的连接信息 -->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_test"
userId="root"
password="abc123">
</jdbcConnection>
<!--
javaBean的生成策略
targetPackage:设置要生成的包目录
targetProject:设置要生成在哪个项目中
-->
<javaModelGenerator targetPackage="star.light.pojo" targetProject=".\src\main\java">
<!-- 设置是否能够使用子包 -->
<property name="enableSubPackages" value="true" />
<!-- 设置是否需要将数据库中字段前后的空格去掉,以便生成实体类的属性 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--
SQL映射文件的生成策略
targetPackage:设置要生成的包目录
targetProject:设置要生成在哪个项目中
-->
<sqlMapGenerator targetPackage="star.light.mapper" targetProject=".\src\main\resources">
<!-- 设置是否能够使用子包 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--
Mapper接口的生成策略
targetPackage:设置要生成的包目录
targetProject:设置要生成在哪个项目中
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="star.light.mapper" targetProject=".\src\main\java">
<!-- 设置是否能够使用子包 -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--
逆向分析的表
tableName设置为*号,可以对应所有表,此时不写domainObjectName
domainObjectName属性指定生成出来的实体类的类名
-->
<table tableName="t_student" domainObjectName="Student"/>
</context>
</generatorConfiguration>
④执行插件的generate目标
⑤运行结果
三、测试程序
①导入jar包
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!-- junit 测试程序 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
②创建核心配置文件
创建 MyBatis 的核心配置文件,习惯上命名为 mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。配置 MyBatis 的核心配置文件中的标签必须按照固定的顺序:
properties --> settings --> typeAliases --> typeHandlers --> objectFactory --> objectWrapperFactory --> reflectorFactory --> plugins --> environments --> databaseIdProvider --> mappers
<?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标签的内容是MyBatis极为重要的调整设置,它们会改变MyBatis的运行时行为 -->
<settings>
<!-- 指定MyBatis所有日志的具体实现,未指定时将自动查找 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 开启驼峰命名自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<!-- 将这个包下的所有的类全部起别名,别名就是类简名,不区分大小写 -->
<package name="star.light.pojo"/>
</typeAliases>
<!-- environments:配置多个连接数据库环境 -->
<environments default="development">
<!-- environment:配置某个具体的环境 -->
<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>
<!-- 从Mapper接口所在的包的路径中加载 -->
<package name="star.light.mapper"/>
</mappers>
</configuration>
数据库连接信息的配置文件:jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_test
jdbc.username=root
jdbc.password=abc123
②封装SqlSessionUtil工具
package star.light.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
public class SqlSessionUtil {
private static SqlSessionFactory sqlSessionFactory;
// 为了防止new对象,工具类的构造方法一般都是私有的
// 工具类中所有的方法都是静态的,直接采用类型即可调用,不需要new对象
private SqlSessionUtil(){}
// 静态代码块在类加载的时候执行
// SqlSesionUtil工具类在进行第一次加载的时候,解析MyBatis和核心配置文件,创建SqlSessionFactory对象
static {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 获取会话对象
* @return 会话对象
*/
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
③测试程序
package star.light.test;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import star.light.mapper.StudentMapper;
import star.light.pojo.Student;
import star.light.pojo.StudentExample;
import star.light.util.SqlSessionUtil;
import java.util.List;
public class ReverseTest {
@Test
public void testDeletStudentByStudentId(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
// 根据主键删除
int affectedRowCount = mapper.deleteByPrimaryKey(3L);
System.out.println("affectedRowCount = " + affectedRowCount);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testSelectStudentByStudentId(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
// 根据主键查询
Student student = mapper.selectByPrimaryKey(1L);
System.out.println(student);
sqlSession.close();
}
@Test
public void testSelectAllStudent(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
// 根据条件查询,如果查询条件为null,表示没有条件
List<Student> students = mapper.selectByExample(null);
students.forEach(System.out::println);
sqlSession.close();
}
@Test
public void testSelectStudentByCriteria(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
// 封装条件,通过StudentExample封装条件
StudentExample studentExample = new StudentExample();
// 创建查询条件
studentExample.createCriteria().andNameLike("Sakura").andSexEqualTo("女");
// 添加or条件
studentExample.or().andSexEqualTo("女").andAgeGreaterThan(10);
// 根据条件进行查询
List<Student> students = mapper.selectByExample(studentExample);
students.forEach(System.out::println);
sqlSession.close();
}
}
标签:逆向,12,mapper,--,StudentMapper,sqlSession,org,MyBatis,import
From: https://www.cnblogs.com/nanoha/p/16816167.html