mybatis逆向工程(超级详细)

一、使用org.mybatis.generator生成代码

1.在项目的pom.xml文件中引入逆向工程插件和需要的依赖:


```css

```bash
<?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>live.longmarch</groupId>
    <artifactId>mybatis_re</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <!--数据库连接插件-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--逆向工程依赖的坐标-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!--逆向工程插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.在项目的resources根目录下,创建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>
    <!-- mysql jar 在本地磁盘的位置文件位置 -->
    <classPathEntry
            location="D:/apache-maven-3.6.0/repository/mysql/mysql-connector-java/5.1.32/mysql-connector-java-5.1.32.jar"/>
    <context id="store" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
            <!-- 是否去除所有自动生成的文件的时间戳,默认为false -->
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/test"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <!-- targetPackage:包名称(自定义)  targetProject:项目路径(自定义)   -->
        <!--定义生成的实体类放置的位置-->
        <javaModelGenerator targetPackage="live.longmarch.domain" targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 从数据库返回的值被清理前后的空格  -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- 配置生成的映射配置文件XxxMapper.xml放置的位置-->
        <!-- targetPackage:包名称(自定义)  targetProject:项目路径(自定义)   -->
        <sqlMapGenerator targetPackage="live.longmarch.mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 配置生成相应XxxMapper接口放置的位置 -->
        <!-- targetPackage:包名称(自定义)  targetProject:项目路径(自定义)   -->
        <javaClientGenerator targetPackage="live.longmarch.mapper" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 通讯录人员表 -->
        <table tableName="user" />
        <table tableName="orders" />

    </context>
</generatorConfiguration>

3.在当前项目的maven工具栏中,找到逆向工程的插件,双击“mybatis-generator:generate”即可生成:

在这里插入图片描述

二、Example实例解析

使用mybatis逆向工程,自动会为每张表生成一个实体类,以及实体类对象的XxxExample类,每个XxxExample类会有一个内部类Criteria。生成的Example类是为了方便做条件筛选,也就是通过XxxExample可以很方便的编写where子句。
下面是对XxxExample类及其内部类Criteria类的一些方法的介绍:
example.setOrderByClause(“字段名 ASC”); 添加升序排列条件,DESC为降序
example.setDistinct(false) 去除重复,boolean型,true为选择不重复的记录。
criteria.andXxxIsNull 添加字段xxx为null的条件
criteria.andXxxIsNotNull 添加字段xxx不为null的条件
criteria.andXxxEqualTo(value) 添加xxx字段等于value条件
criteria.andXxxNotEqualTo(value) 添加xxx字段不等于value条件
criteria.andXxxGreaterThan(value) 添加xxx字段大于value条件
criteria.andXxxGreaterThanOrEqualTo(value) 添加xxx字段大于等于value条件
criteria.andXxxLessThan(value) 添加xxx字段小于value条件
criteria.andXxxLessThanOrEqualTo(value) 添加xxx字段小于等于value条件
criteria.andXxxIn(List<>) 添加xxx字段值在List<>条件
criteria.andXxxNotIn(List<>) 添加xxx字段值不在List<>条件
criteria.andXxxLike(%+value+%) 添加xxx字段值为value的模糊查询条件
criteria.andXxxNotLike(%+value+%) 添加xxx字段值不为value的模糊查询条件
criteria.andXxxBetween(value1,value2) 添加xxx字段值在value1和value2之间条件
criteria.andXxxNotBetween(value1,value2) 添加xxx字段值不在value1和value2之间条件

三、Mapper接口解析

mybatis逆向工程,自动生成的Mapper接口中,会包含很多与Example相关的方法,下面是方法的介绍:
int countByExample(UserExample example) thorws SQLException 按条件计数
int deleteByPrimaryKey(Integer id) thorws SQLException 按主键删除
int deleteByExample(UserExample example) thorws SQLException 按条件删除
String/Integer insert(User record) thorws SQLException 插入数据(返回值为ID)
User selectByPrimaryKey(Integer id) thorws SQLException 按主键查询
List selectByExample(UserExample example) thorws SQLException 按条件查询
List selectByExampleWithBLOGs(UserExample example) thorws SQLException 按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生。
int updateByPrimaryKey(User record) thorws SQLException 按主键更新
int updateByPrimaryKeySelective(User record) thorws SQLException 按主键更新值不为null的字段
int updateByExample(User record, UserExample example) thorws SQLException 按条件更新
int updateByExampleSelective(User record, UserExample example) thorws SQLException 按条件更新值不为null的字段
​

四、应用举例

jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

sqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置properties的加载文件-->
    <properties resource="jdbc.properties"/>

    <!--配置起别名 起别名后,该类下所有的类都会有俩个别名。-->
    <typeAliases>
        <package name="live.longmarch.domain"></package>
    </typeAliases>

    <!--配置数据源环境。 可以有多个环境-->
    <environments default="development">
        <environment id="development">
            <!--配置管理实务的-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源的取值-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--读取映射关系-->
    <mappers>
       <package name="live.longmarch.mapper"/>
    </mappers>
</configuration>

测试代码:

package test;

import live.longmarch.domain.User;
import live.longmarch.domain.UserExample;
import live.longmarch.mapper.UserMapper;
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.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @PackageName: test
 * @ClassName: Mybatis_reTest
 * @Author: gaoning
 * @Date: 2019/12/21 21:15
 * @Description:
 */
public class Mybatis_reTest {

    private SqlSession sqlSession;
    // 加载配置文件
    @Before
    public void init() throws IOException {
        // 读取mybatis核心配置文件
        InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
        // 创建工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        // 创建SQLSession对象
        sqlSession = sqlSessionFactory.openSession();
    }

    /**
     * 测试selectByprimaryKey
     * 根据主键查询一个用户的所有信息
     */
    @Test
    public void test1() {
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // mybatis逆向工程自动生成的方法
        // 根据id主键返回user用户的信息
        User user = mapper.selectByPrimaryKey(1);
        System.out.println(user);
    }

    /**
     * 测试selectByExample
     * 根据指定的条件查询出 符合条件的数据集合
     */
    @Test
    public void test2() {
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // mybatis逆向工程给我们为每张表生成一个实体类,以及实体类对象的XxxExample类,
        // 每个XxxExample类会有一个内部类Criteria。
        // 生成的Example类是为了方便做条件筛选,也就是通过XxxExample可以很方便的编写where子句。
        // 创建UserExample对象
        UserExample userExample = new UserExample();
        // 通过UserExample实例对象的方法创建一个他的内部类criteria类/kraɪ'tɪərɪə/(条件类)
        // 里面包含了很多操作数据的方法
        UserExample.Criteria criteria = userExample.createCriteria();
        //使用criteria的andUsernameEqualTo 方法,用来设置指定字段的值
        criteria.andUsernameEqualTo("zhangsan");
        criteria.andPasswordEqualTo("123");
        // 按照指定的条件查询,将条件封装到实例中
        // 调用mapper中的selectByExample 方法查询出符合条件的 user类
        List<User> users = mapper.selectByExample(userExample);
        System.out.println(users);
    }

    /**
     * 测试insert
     * 添加一条数据
     */
    @Test
    public void test03(){
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 构建一个user对象
        User user = new User();
        user.setUsername("小明");
        user.setPassword("123");
        // 使用mybatis逆向工程提供的方法进行添加一条数据
        mapper.insert(user);
        // 增删改数据 需要提交事务
        sqlSession.commit();
    }

    /**
     * 测试updateByPrimaryKey
     * // 根据主键对数据进行修改
     */
    @Test
    public void test04(){
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 构建user对象
        User user = new User();
        user.setId(10);
        // 设置修改的内容
        user.setUsername("大明");
        // 根据user对象中的注解对数据进行修改
        mapper.updateByPrimaryKey(user);
        sqlSession.commit();
    }

    /**
     * 测试updateByPrimaryKeySelective
     * 按主键更新值不为null的字段
     */
    @Test
    public void test05(){
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 构建user对象
        User user = new User();
        user.setId(10);
        // 设置需要修改的内容
        user.setUsername("大明");
        // 按照注解更新不为null的字段
        mapper.updateByPrimaryKeySelective(user);
        sqlSession.commit();
    }

    /**
     * 测试updateByExample
     * 测试根据条件 进行修改数据
     */
    @Test
    public void test06(){
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 构建userExample实例对象
        UserExample example = new UserExample();
        // 创建 实例对象内部类criteria对象,
        UserExample.Criteria criteria = example.createCriteria();
        // 添加条件,条件为密码是== 1111
        criteria.andPasswordEqualTo("1111");
        // 构建user 对象,整个user对象都是需要设置的值
        User user = new User();
        user.setId(7);
        user.setUsername("老大");
        // 根据指定的条件,将user中的所有的值进行替换
        mapper.updateByExample(user, example);
        sqlSession.commit();
    }

    /**
     * 测试updateByExampleSelective
     * 按条件更新值不为null的字段
     */
    @Test
    public void test07(){
        // 使用SQLSession生成UserMapper的动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 构建实例对象,以及内部的条件对象
        UserExample example = new UserExample();
        UserExample.Criteria criteria = example.createCriteria();
        // 设置指定的条件
        criteria.andPasswordEqualTo("1111");

        // 构建user对象,整个user对象都是需要设置的值
        User user = new User();
        user.setUsername("老大");
        // 根据指定的条件,将user中的所有的值进行替换 ,当字段的值为null 不进行设置
        mapper.updateByExampleSelective(user, example);
        sqlSession.commit();
    }

    /**
     * 测试deleteByPrimaryKey
     * 根据主键删除一条数据
     */
    @Test
    public void test08(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteByPrimaryKey(10);
        sqlSession.commit();
    }
    /**
     * 测试deleteByExample
     * 根据条件删除一些数据
     */
    @Test
    public void test09(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        UserExample example = new UserExample();
        // 构建实例对象,以及条件对象
        UserExample.Criteria criteria = example.createCriteria();
        // 使用list集合装载条件
        ArrayList<String> list = new ArrayList<String>();
        list.add("老大");
        list.add("tom");
        // 将list条件装入 条件对象中
        criteria.andUsernameIn(list);
        // 根据条件进行删除
        mapper.deleteByExample(example);
        sqlSession.commit();
    }

    /**
     * 测试countByExample
     * // 按照条件计数
     */
    @Test
    public void test010(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 条件为空时,计算总条数
        long l = mapper.countByExample(new UserExample());
        System.out.println(l);
        sqlSession.commit();
    }


    @After
    public void destroy(){
        sqlSession.close();
    }
}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值