MyBatis的逆向工程详细步骤操作

cnblogs 2024-06-15 15:09:00 阅读 56

1. MyBatis的逆向工程详细步骤操作

@

目录

  • 1. MyBatis的逆向工程详细步骤操作
  • 2. 逆向工程配置与生成
    • 2.1 MyBatis3Simple:基础版,只有基本的增删改查
      • 2.1.1 第一步:在pom.xml 中添加逆向工程插件
      • 2.1.2 第二步:配置 generatorConfig.xml
      • 2.1.3 第三步:运行插件
      • 2.1.4 第四步:测试运行
    • 2.2 MyBatis3:生成的是增强版
  • 3. 总结:
  • 4. 最后:

所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

思考:使用这个插件的话,需要给这个插件配置哪些信息?

  • POJO类名,包名以及要生成的所在位置
  • SqlMapper.xml 文件名以及生成位置
  • Mapper 接口名以及生成位置
  • 连接数据库的信息
  • 指定哪些表参与逆向工程
  • ......

关于 MyBatis 的逆向工程有两个版本: 对应在 targetRuntime 的两个值:

  1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。
  2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

在这里插入图片描述

2. 逆向工程配置与生成

在这里插入图片描述

下面我们进行逆向工程配置,让其为我们自动生成va的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。

2.1 MyBatis3Simple:基础版,只有基本的增删改查

2.1.1 第一步:在pom.xml 中添加逆向工程插件

大家直接复制就好了,不用修改的。

<!--定制构建过程-->

<build>

<!--可配置多个插件-->

<plugins>

<!--其中的一个插件:mybatis逆向工程插件-->

<plugin>

<!--插件的GAV坐标-->

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.4.1</version>

<!--允许覆盖-->

<configuration>

<overwrite>true</overwrite>

</configuration>

<!--插件的依赖-->

<dependencies>

<!--mysql驱动依赖-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.30</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.rainbowsea</groupId>

<artifactId>mybatis-012-generator2</artifactId>

<version>1.0-SNAPSHOT</version>

<properties>

<maven.compiler.source>17</maven.compiler.source>

<maven.compiler.target>17</maven.compiler.target>

</properties>

<dependencies>

<!-- mybatis 的依赖-->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.5.10</version>

</dependency>

<!-- mysql -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.30</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13.2</version>

<scope>test</scope>

</dependency>

<!-- 引入 logback的依赖,这个日志框架实现了slf4j 规范-->

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.2.11</version>

</dependency>

</dependencies>

<!--定制构建过程-->

<build>

<!--可配置多个插件-->

<plugins>

<!--其中的一个插件:mybatis逆向工程插件-->

<plugin>

<!--插件的GAV坐标-->

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.4.1</version>

<!--允许覆盖-->

<configuration>

<overwrite>true</overwrite>

</configuration>

<!--插件的依赖-->

<dependencies>

<!--mysql驱动依赖-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.30</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

</project>

2.1.2 第二步:配置 generatorConfig.xml

注意:该文件必须配置到类的根路径下,并且该文件名必须是为 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:生成的是基础版,只有基本的增删改查。

MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

-->

<context targetRuntime="MyBatis3Simple">

<!--防止生成重复代码-->

<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

<commentGenerator>

<!--是否去掉生成日期-->

<property name="suppressDate" value="true"/>

<!--是否去除注释-->

<property name="suppressAllComments" value="true"/>

</commentGenerator>

<!--连接数据库信息-->

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/powernode"

userId="root"

password="root">

</jdbcConnection>

<!-- 生成pojo包名和位置 -->

<javaModelGenerator targetPackage="com.powernode.mybatis.pojo" targetProject="src/main/java">

<!--是否开启子包-->

<property name="enableSubPackages" value="true"/>

<!--是否去除字段名的前后空白-->

<property name="trimStrings" value="true"/>

</javaModelGenerator>

<!-- 生成SQL映射文件的包名和位置 -->

<sqlMapGenerator targetPackage="com.powernode.mybatis.mapper" targetProject="src/main/resources">

<!--是否开启子包-->

<property name="enableSubPackages" value="true"/>

</sqlMapGenerator>

<!-- 生成Mapper接口的包名和位置 -->

<javaClientGenerator

type="xmlMapper"

targetPackage="com.powernode.mybatis.mapper"

targetProject="src/main/java">

<property name="enableSubPackages" value="true"/>

</javaClientGenerator>

<!-- 表名和对应的实体类名-->

<table tableName="t_car" domainObjectName="Car"/>

</context>

</generatorConfiguration>

在这里插入图片描述

下面,我们先使用 MyBatis3Simple:生成的是基础版,只有基本的增删改查

在这里插入图片描述

注意:需要将其中的一些信息修改为你自己的比如(数据库的账号密码,以及你所想的包名的路径名称等等)

在这里插入图片描述

<?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:生成的是基础版,只有基本的增删改查。

MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

-->

<context targetRuntime="MyBatis3Simple">

<!--防止生成重复代码-->

<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

<commentGenerator>

<!--是否去掉生成日期-->

<property name="suppressDate" value="true"/>

<!--是否去除注释-->

<property name="suppressAllComments" value="true"/>

</commentGenerator>

<!--连接数据库信息-->

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/powernode"

userId="root"

password="MySQL123">

</jdbcConnection>

<!-- 生成pojo包名和位置 -->

<javaModelGenerator targetPackage="com.rainbowsea.mybatis.pojo" targetProject="src/main/java">

<!--是否开启子包-->

<property name="enableSubPackages" value="true"/>

<!--是否去除字段名的前后空白-->

<property name="trimStrings" value="true"/>

</javaModelGenerator>

<!-- 生成SQL映射文件的包名和位置 -->

<sqlMapGenerator targetPackage="com.rainbowsea.mybatis.mapper" targetProject="src/main/resources">

<!--是否开启子包-->

<property name="enableSubPackages" value="true"/>

</sqlMapGenerator>

<!-- 生成Mapper接口的包名和位置 -->

<javaClientGenerator

type="xmlMapper"

targetPackage="com.rainbowsea.mybatis.mapper"

targetProject="src/main/java">

<property name="enableSubPackages" value="true"/>

</javaClientGenerator>

<!-- 表名和对应的实体类名-->

<table tableName="t_car" domainObjectName="Car"/>

</context>

</generatorConfiguration>

2.1.3 第三步:运行插件

在这里插入图片描述

在这里插入图片描述

我们可以打开项目看看。

在这里插入图片描述

在这里插入图片描述

2.1.4 第四步:测试运行

别忘记了,运行MyBatis 还是需要导入关于 MyBatis 的相关依赖的 jar 包的

  • 依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖
  • jdbc.properties
  • mybatis-config.xml
  • logback.xml

编写测试程序:

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.mybatis.test;

import com.rainbowsea.mybatis.mapper.CarMapper;

import com.rainbowsea.mybatis.pojo.Car;

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 org.junit.Test;

import java.io.IOException;

public class CarMapperTest {

// CarExample类负责封装查询条件的

@Test

public void testSelect() throws IOException {

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");

SqlSession sqlSession = sqlSessionFactory.openSession();

CarMapper mapper = sqlSession.getMapper(CarMapper.class);

// 执行查询

// 1. 查询一个

Car car = mapper.selectByPrimaryKey(118L);

System.out.println(car);

sqlSession.close();

}

}

2.2 MyBatis3:生成的是增强版

升级为 MyBatis3 增强版,只需要在 generatorConfig.xml 配置文件当中的targetRuntime="MyBatis3" 的值,设置为:myBatis3 即可。其它的和上面 MyBatis3Simple 的操作是一样的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

如下运行测试:

在这里插入图片描述

package com.rainbowsea.mybatis.test;

import com.rainbowsea.mybatis.mapper.CarMapper;

import com.rainbowsea.mybatis.pojo.Car;

import com.rainbowsea.mybatis.pojo.CarExample;

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 org.junit.Test;

import java.io.IOException;

import java.math.BigDecimal;

import java.util.List;

public class CarMapperTest {

@Test

public void testDeleteByPrimaryKey() throws IOException {

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "mybatis");

SqlSession sqlSession = sqlSessionFactory.openSession();

CarMapper mapper = sqlSession.getMapper(CarMapper.class);

// 执行查询

// 1. 查询一个

Car car = mapper.selectByPrimaryKey(118L);

System.out.println(car);

// 2. 查询所有(selectByExample 根据条件查询,如果条件是null表示没有条件)

List<Car> cars = mapper.selectByExample(null);

cars.forEach(car1 -> {

System.out.println(car1);

});

// 3. 按照条件进行查询

// 封装条件,通过CarExample 对象来封装查询条件

CarExample carExample = new CarExample();

// 调用carExample.createCriteria()方法来创建查询条件

carExample.createCriteria()

.andBrandLike("小米")

.andGuidePriceGreaterThan(new BigDecimal(30.0));

// 添加 or

carExample.or().andCarTypeEqualTo("燃油车");

// 执行查询

List<Car> cars2 = mapper.selectByExample(carExample);

cars2.forEach(car2->{

System.out.println(car2);

});

sqlSession.close();

}

}

在这里插入图片描述

package com.powernode.mybatis.test;

import com.powernode.mybatis.mapper.CarMapper;

import com.powernode.mybatis.pojo.Car;

import com.powernode.mybatis.pojo.CarExample;

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 org.junit.Test;

import java.math.BigDecimal;

import java.util.List;

public class GeneratorTest {

@Test

public void testGenerator() throws Exception{

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));

SqlSession sqlSession = sqlSessionFactory.openSession();

CarMapper mapper = sqlSession.getMapper(CarMapper.class);

// 增

/*Car car = new Car();

car.setCarNum("1111");

car.setBrand("比亚迪唐");

car.setGuidePrice(new BigDecimal(30.0));

car.setProduceTime("2010-10-12");

car.setCarType("燃油车");

int count = mapper.insert(car);

System.out.println("插入了几条记录:" + count);*/

// 删

/*int count = mapper.deleteByPrimaryKey(83L);

System.out.println("删除了几条记录:" + count);*/

// 改

// 根据主键修改

/*Car car = new Car();

car.setId(89L);

car.setGuidePrice(new BigDecimal(20.0));

car.setCarType("新能源");

int count = mapper.updateByPrimaryKey(car);

System.out.println("更新了几条记录:" + count);*/

// 根据主键选择性修改

/*car = new Car();

car.setId(89L);

car.setCarNum("3333");

car.setBrand("宝马520Li");

car.setProduceTime("1999-01-10");

count = mapper.updateByPrimaryKeySelective(car);

System.out.println("更新了几条记录:" + count);*/

// 查一个

Car car = mapper.selectByPrimaryKey(89L);

System.out.println(car);

// 查所有

List<Car> cars = mapper.selectByExample(null);

cars.forEach(c -> System.out.println(c));

// 多条件查询

// QBC 风格:Query By Criteria 一种查询方式,比较面向对象,看不到sql语句。

CarExample carExample = new CarExample();

carExample.createCriteria()

.andBrandEqualTo("丰田霸道")

.andGuidePriceGreaterThan(new BigDecimal(60.0));

carExample.or().andProduceTimeBetween("2000-10-11", "2022-10-11");

mapper.selectByExample(carExample);

sqlSession.commit();

}

}

3. 总结:

  1. 所谓的逆向工程:会/可以根据数据库表逆向生成Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
  2. 关于 MyBatis 的逆向工程有两个版本:对应在 targetRuntime 的两个值:

1. MyBatis3Simple:生成的是基础版,只有基本的增删改查。

2. MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

  1. 注意:MyBatis3 增强版,多出来的这个 CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的

4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。