逆向工程
正向工程:先创建 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,则不修改这个字段
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战