反转基因福娃 发表于 2024-6-15 13:54:42

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

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 的两个值:

[*]MyBatis3Simple:天生的是底子版,只有基本的增删改查。
[*]MyBatis3:天生的是增强版,除了基本的增删改查之外还有复杂的增删改查。
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650661-516454160.png
2. 逆向工程设置与天生

https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650553-1678532666.png
下面我们举行逆向工程设置,让其为我们自动天生va的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
2.1 MyBatis3Simple:底子版,只有基本的增删改查

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

大家直接复制就好了,不消修改的。
<build>

<plugins>
   
    <plugin>
      
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.4.1</version>
      
      <configuration>
      <overwrite>true</overwrite>
      </configuration>
      
      <dependencies>
      
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.30</version>
      </dependency>
      </dependencies>
    </plugin>
</plugins>
</build> https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650680-911592518.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650683-803760712.png
<?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>
      
      <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
      </dependency>

      
      <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>

      
      <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
      </dependency>
    </dependencies>

   
    <build>
      
      <plugins>
            
            <plugin>
               
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.1</version>
               
                <configuration>
                  <overwrite>true</overwrite>
                </configuration>
               
                <dependencies>
                  
                  <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>
   
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">
      
      <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
      
      <commentGenerator>
            
            <property name="suppressDate" value="true"/>
            
            <property name="suppressAllComments" value="true"/>
      </commentGenerator>

      
      <jdbcConnection driver
                        connectionURL="jdbc:mysql://localhost:3306/powernode"
                        userId="root"
                        password="root">
      </jdbcConnection>

      
      <javaModelGenerator targetPackage="com.powernode.mybatis.pojo" targetProject="src/main/java">
            
            <property name="enableSubPackages" value="true"/>
            
            <property name="trimStrings" value="true"/>
      </javaModelGenerator>

      
      <sqlMapGenerator targetPackage="com.powernode.mybatis.mapper" targetProject="src/main/resources">
            
            <property name="enableSubPackages" value="true"/>
      </sqlMapGenerator>

      
      <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> https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650625-332439896.png
下面,我们先使用 MyBatis3Simple:天生的是底子版,只有基本的增删改查
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650610-1756215282.png
注意:需要将其中的一些信息修改为你自己的比如(数据库的账号暗码,以及你所想的包名的路径名称等等)
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650724-445943238.png
<?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">
      
      <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

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

      
      <jdbcConnection driver
                        connectionURL="jdbc:mysql://localhost:3306/powernode"
                        userId="root"
                        password="MySQL123">
      </jdbcConnection>

      
      <javaModelGenerator targetPackage="com.rainbowsea.mybatis.pojo" targetProject="src/main/java">
            
            <property name="enableSubPackages" value="true"/>
            
            <property name="trimStrings" value="true"/>
      </javaModelGenerator>

      
      <sqlMapGenerator targetPackage="com.rainbowsea.mybatis.mapper" targetProject="src/main/resources">
            
            <property name="enableSubPackages" value="true"/>
      </sqlMapGenerator>

      
      <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 第三步:运行插件

https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650652-1628828042.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650592-528552141.png
我们可以打开项目看看。
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650658-423626154.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650682-337546162.png
2.1.4 第四步:测试运行

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


[*]依靠:mybatis依靠、mysql驱动依靠、junit依靠、logback依靠
[*]jdbc.properties
[*]mybatis-config.xml
[*]logback.xml
编写测试程序:
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650574-1577936864.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650708-639116638.png
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 的操纵是一样的。
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650685-1235189933.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650605-1274924850.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650615-1038086592.png
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650674-1286257994.png
注意:MyBatis3 增强版,多出来的这个CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的
如下运行测试:
https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650563-202236175.png
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();

    }
} https://img2024.cnblogs.com/blog/3084824/202406/3084824-20240615144650616-731802817.png
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. 总结:


[*]所谓的逆向工程:会/可以根据数据库表逆向天生Java的 POJO类,SqlMapper.xml (对应SQL映射文件),以及Mapper 接口类等。
[*]关于 MyBatis 的逆向工程有两个版本:对应在targetRuntime 的两个值:
1.MyBatis3Simple:生成的是基础版,只有基本的增删改查。
2.MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
[*]注意:MyBatis3 增强版,多出来的这个CarExample 实体类对象,是封装了条件,通过CarExample 对象来封装查询条件的
4. 最后:

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MyBatis的逆向工程详细步骤操纵