逆向工程

正向工程:先创建 Java 实体类,由框架负责根据实体类生成数据库表

 

逆向工程

1、先创建数据库表,由框架负责根据数据库表

2、反向生成如下资源

(1)Java 实体类

(2)Mapper 接口

(3)Mapper 映射文件

 

创建逆向工程的步骤

1、添加依赖和插件

(1)依赖和插件中的 MySQL 驱动版本需要一致

<dependencies>
	<!-- MyBatis核心依赖包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.9</version>
	</dependency>
    
	<!-- junit测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.13.2</version>
		<scope>test</scope>
	</dependency>
	
    <!-- MySQL驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.27</version>
	</dependency>
	
    <!-- log4j日志 -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>
</dependencies>

<!-- 控制Maven在构建过程中相关配置 -->
<build>
    
    <!-- 构建过程中使用的插件 -->
    <plugins>
        
        <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.0</version>
            
            <!-- 插件的依赖 -->
            <dependencies>
                
                <!-- 逆向工程的核心依赖 -->
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.2</version>
                </dependency>
                
                <!-- 数据库连接池 -->
                <dependency>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                    <version>0.9.2</version>
                </dependency>
                
                <!-- MySQL驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.27</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

2、创建 MyBatis 核心配置文件

3、创建逆向工程的配置文件

(1)文件名必须为:generatorConfig.xml

(2) 生成基本 CRUD(5 种):增、删、改、查询所有、根据主键查询

<?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">
        
        <!-- 数据库的连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://ip:端口/数据库名"
                        userId="用户名"
                        password="密码">
        </jdbcConnection>
        
        <!-- JavaBean生成策略 -->
        <javaModelGenerator targetPackage="org.test.mybatis.pojo" targetProject=".\src\main\java">
            
            <!-- targetPackage 是否使用子包,true:每一个 . 代表一个子包;false:org.test.mybatis.pojo 是一个包-->
            <property name="enableSubPackages" value="true" />
            
            <!-- 去除字段名前后空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="org.test.mybatis.mapper"
                         targetProject=".\src\main\resources">
            
            <!-- targetPackage 是否使用子包,true:每一个 . 代表一个子包;false:org.test.mybatis.mapper 是一个包-->
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="org.test.mybatis.mapper" targetProject=".\src\main\java">
            
            <!-- targetPackage 是否使用子包,true:每一个 . 代表一个子包;false:org.test.mybatis.mapper 是一个包-->
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        
        <!--
            逆向分析的表
            tableName属性:设置为*号,可以对应所有表,则不需要设置domainObjectName
            domainObjectName属性:指定生成出来的实体类的类名
            不需要设置接口、映射文件的名称,根据实体类的类名自动添加Mapper后缀生成
        -->
        <table tableName="emps" domainObjectName="Emp"/>
        <table tableName="depts" domainObjectName="Dept"/>
    </context>
</generatorConfiguration>

4、执行

(1)对应 Maven 工程的 -> 插件 -> mybatis-generator ->mybatis-generator:generate

(2)若再次执行插件,需要删除逆向工程的 JavaBean、Mapper 接口、映射文件,否则可能会追加,而不是重新生成映射文件

 

生成带条件的 CRUD

1、生成除基本的 POJO 外,每个 POJO 追加生成 Example 类

(1)用于实现条件查询

(2)创建 POJO 对应 Example 类,Example 作为条件,传入 Mapper 接口对应方法 

2、Mapper 接口中

(1)带 Example 的方法,表示根据条件进行 SQL 操作

(2)带 Selective 的方法,表示选择性 SQL 操作

 

QBC

1、Query By Criteria

2、查询

(1)mapper.selectByExample():按条件查询,需要传入一个 example 对象或 null ;如果传入一个null,则表示没有条件,即查询所有数据

(2)example.createCriteria().andXxx():创建条件对象,通过 andXxx() 方法为 SQL 添加查询添加,每个条件之间是 and 关系

(3)example.or().andXxx():将之前添加的条件通过 or 拼接其他条件

3、增

(1)mapper.insert():若没有手动设置某字段的值,则会插入 null,即使该字段设置默认值,也会插入null

(2)mapper.insertSelective():加入 null 校验,即只会插入数据不为 null 的字段值,若某字段不传值,或者传值为 null 时,默认值都会生效

4、改

(1)mapper.updateByPrimaryKey():通过主键进行数据修改,如果某一个值为 null,也会将对应的字段改为 null

(2)mapper.updateByPrimaryKeySelective():通过主键进行选择性数据修改,如果某个值为 null,则不修改这个字段

posted @   半条咸鱼  阅读(176)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示