Mybatis逆向⼯程配置与⽣成
- 使用基础版本
- 前置准备
- 项目结构
- 导入依赖
- 配置generatorConfig.xml
- 数据库表
- 使用逆向工程
- 点击插件使用
- 双击之后效果
- UserMapper.xml的内容
- UserMapper接口的内容
- 测试逆向工程
- 使用增强版
- 项目结构
- UserExample和UserWithBLOBs
- UserMapper接口
- 测试方法
- 测试结果
使用基础版本
前置准备
项目结构
创建一个空的模块,此时java目录里面没有代码,mapper映射文件也没有。
导入依赖
在pom中添加逆向⼯程插件
<!--定制构建过程-->
<build><!--可配置多个插件--><plugins><!--mybatis逆向⼯程插件--><plugin><!--插件的GAV坐标--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.1</version><!--允许覆盖--><!--如果存在pojo实体类使用逆向工程时候,是清空然后在写入,如果不覆盖可能是追加的模式,会出错--><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>
注:
GAV坐标是指在软件开发中常用的一种标识方式,用于唯一确定一个软件插件或库。它由三个部分组成:Group ID(组织ID)、Artifact ID(项目ID)和Version(版本号),因此又称为GAV坐标。
- Group ID(组织ID):代表开发插件或库的组织或团队的唯一标识符。
- Artifact ID(项目ID):代表插件或库的名称或项目的唯一标识符。
- Version(版本号):代表插件或库的特定版本。
配置generatorConfig.xml
该⽂件名必须叫做:generatorConfig.xml,该⽂件必须放在类的根路径下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><!--targetRuntime有两个值:MyBatis3Simple:⽣成的是基础版,只有基本的增删改查。MyBatis3:⽣成的是增强版,除了基本的增删改查之外还有复杂的增删改查。--><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 driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/hqyj03"userId="root"password="yjg"></jdbcConnection><!-- ⽣成pojo包名和位置 --><javaModelGenerator targetPackage="com.yjg.mybatis.pojo" targetProject="src/main/java"><!--是否开启⼦包-->
<!--如果为false会把com.yjg.mybatis.pojo当成一个目录造出来--><property name="enableSubPackages" value="true"/><!--是否去除字段名的前后空⽩--><property name="trimStrings" value="true"/></javaModelGenerator><!-- ⽣成SQL映射⽂件的包名和位置 --><sqlMapGenerator targetPackage="com.yjg.mybatis.mapper" targetProject="src/main/resources"><!--是否开启⼦包--><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- ⽣成Mapper接⼝的包名和位置 --><javaClientGeneratortype="xmlMapper"targetPackage="com.yjg.mybatis.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 表名和对应的实体类名--><table tableName="user" domainObjectName="User"/></context>
</generatorConfiguration>
数据库表
CREATE TABLE `user` (`id` int(11) NOT NULL,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
使用逆向工程
点击插件使用
双击之后效果
双击之后就会出现,对应得实体类和mapper映射文件。
UserMapper.xml的内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yjg.mybatis.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.yjg.mybatis.pojo.User"><id column="id" jdbcType="INTEGER" property="id" /><result column="username" jdbcType="VARCHAR" property="username" /><result column="password" jdbcType="VARCHAR" property="password" /></resultMap><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from userwhere id = #{id,jdbcType=INTEGER}</delete><insert id="insert" parameterType="com.yjg.mybatis.pojo.User">insert into user (id, username, password)values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR})</insert><update id="updateByPrimaryKey" parameterType="com.yjg.mybatis.pojo.User">update userset username = #{username,jdbcType=VARCHAR},password = #{password,jdbcType=VARCHAR}where id = #{id,jdbcType=INTEGER}</update><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select id, username, passwordfrom userwhere id = #{id,jdbcType=INTEGER}</select><select id="selectAll" resultMap="BaseResultMap">select id, username, passwordfrom user</select>
</mapper>
UserMapper接口的内容
package com.yjg.mybatis.mapper;
import com.yjg.mybatis.pojo.User;
import java.util.List;
public interface UserMapper {int deleteByPrimaryKey(Integer id);int insert(User row);User selectByPrimaryKey(Integer id);List<User> selectAll();int updateByPrimaryKey(User row);
}
测试逆向工程
使用接口里面的方法看是否能够成功操作数据库
测试一
@Test
public void test01() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> users = userMapper.selectAll();users.forEach(user -> System.out.println(user));
}
测试结果
能够查出结果,没有问题
测试二
@Test
public void test02() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.deleteByPrimaryKey(0);System.out.println(i);
}
测试结果
能够删除数据库数据,没有问题
使用增强版
在配置generatorConfig.xml的时候
targetRuntime有两个值:
MyBatis3Simple:⽣成的是基础版,只有基本的增删改查。
MyBatis3:⽣成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
只需要把上面的generatorConfig.xml文件的targetRuntime值换一下即可。
项目结构
当使用增强版本的时候,就会出现除了User实体类的其他两个类
UserExample和UserWithBLOBs
UserExample
:UserExample
是一个用于构建查询条件的辅助类。它提供了一系列的方法,用于设置查询条件,比如等于、大于、小于、排序等。通过使用UserExample
,可以方便地构建复杂的查询条件,并将其传递给MyBatis的查询接口进行数据库查询操作。UserWithBLOBs
:UserWithBLOBs
是生成的包含大字段(BLOBs)的实体类。如果表中存在大字段类型(如TEXT、BLOB等),MyBatis逆向工程会为这些字段生成对应的实体类,并在原有的实体类(比如User
)基础上扩展,以支持大字段的获取和设置。
总的来说,UserExample
和UserWithBLOBs
在MyBatis逆向工程中的作用如下:
UserExample
帮助构建复杂的查询条件,提供了灵活的方法来指定查询规则和约束条件。UserWithBLOBs
是对包含大字段的表生成的实体类,它扩展了原有实体类的功能,使得对大字段的操作更加方便。
UserMapper接口
会比基础的版本多一些方法,相应的UserMapper.xml映射文件也会增多语句
package com.yjg.mybatis.mapper;import com.yjg.mybatis.pojo.User;
import com.yjg.mybatis.pojo.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;public interface UserMapper {long countByExample(UserExample example);int deleteByExample(UserExample example);int deleteByPrimaryKey(Integer id);int insert(User row);int insertSelective(User row);List<User> selectByExample(UserExample example);User selectByPrimaryKey(Integer id);int updateByExampleSelective(@Param("row") User row, @Param("example") UserExample example);int updateByExample(@Param("row") User row, @Param("example") UserExample example);int updateByPrimaryKeySelective(User row);int updateByPrimaryKey(User row);
}
测试方法
@org.junit.Test
public void test01() throws Exception{SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));SqlSession sqlSession = sqlSessionFactory.openSession();//执行查询//查询一个UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.selectByPrimaryKey(1);System.out.println(user);System.out.println("===============================================");//查询所有(selectByExample根据条件查询,如果条件为空,则表示没有条件)List<User> users = userMapper.selectByExample(null);users.forEach(user1 -> System.out.println(user1));System.out.println("===============================================");//按照条件进行查询//多条件查询// QBC ⻛格:Query By Criteria ⼀种查询⽅式,⽐较⾯向对象,看不到sql语句。UserExample userExample = new UserExample();userExample.createCriteria().andPasswordLike("%d%").andIdBetween(3, 5);List<User> userList = userMapper.selectByExample(userExample);userList.forEach(u-> System.out.println(u));
}
测试结果
查询一个成功
查询所有成功
根据条件查询成功