mybatis---分页插件&逆向工程

1、分页插件

1.1、分页插件介绍

Mybatis通过提供插件机制,让我们可以根据自己的需要去增强Mybatis的功能,但是,如果没有完全理解Mybatis的运行原理和插件的工作方式,最好不要使用插件,因为会改变mybatis的底层工作原理,给系统带来很大的影响。

1.2、Mybatis的插件典型适用场景

1、分页插件:简单来说就是将查询语句拦截下来,去改变成相应的分页语句即可。
2、公共字段统一赋值:一般的业务都会有创建者,创建时间,修改者,修改时间,mybatis的插件可以在dao层统一拦截进行更新值。
3、性能监控:对与Sql语句的性能监控,拦截sql语句,用日志记录其运行时间。
4、其它:可以在sql执行的各个阶段去拦截并做相应的处理。

1.3、如何适用mybatis分页插件

在github上面搜索mybatis-PageHelper,如下图所示,即可:

在这里插入图片描述
插件使用方式地址

1、引入以下jar包

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.1</version>
</dependency>

2、在mybatis的配置文件引入此插件

<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
    </plugin>
</plugins>

3、在测试类中引用即可
注意:mapper.xml文件不用写limit参数

package cool.ale.tests;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import cool.ale.mapper.EmpMapper;
import cool.ale.pojo.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

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

public class MybatisTest {

    private SqlSession session = null;

    @Before
    public void before() throws IOException {
        // 从 xml中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // true是设置自动提交
        session = sqlSessionFactory.openSession(true);

    }

    @Test
    public void select01() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        // 实现分页功能
        PageHelper.startPage(1,10);
        Emp emp = new Emp();
        //emp.setId(101);
        List<Emp> empList = mapper.selectEmp(emp);
        // 查询完之后封装成 PageInfo ,这里会有很多参数
        PageInfo pageInfo =  new PageInfo(empList);
        System.out.println(pageInfo);
    }
}

2、逆向工程

1、导入相应的jar包

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.4.0</version>
</dependency>

2、写配置文件,需要生成那些表,那些文件等

<?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>
    <!--数据库驱动
        使用dos命令时,需要配置数据库驱动
        -->
    <!--<classPathEntry location="D:\Java\apache-maven-3.5.4\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/>-->
    <!-- context配置上下文,配置生成规则
        id 任意写
        MyBatis3DynamicSql  默认的,会生成带动态sql的CRUD
        MyBatis3            生成通用的查询,可以指定动态where的条件
        MyBatis3Simple      只生成简单的CRUD
        -->
    <context id="context" targetRuntime="MyBatis3">
        <!-- 注释生成器 -->
        <!--<commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>-->
        <!--数据库链接地址账号密码-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <!--<property name="forceBigDecimals" value="false"/>-->
        </javaTypeResolver>
        <!--生成Model类存放位置
            targetPackage   生成到哪个包下
            targetProject   生成到当前文件的哪个对应路径下
        -->
        <javaModelGenerator targetPackage="cool.ale.pojo" targetProject="src/main/java">
            <!--<property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>-->
        </javaModelGenerator>
        <!--生成映射文件存放位置
            targetPackage   生成到哪个包下
            targetProject   生成到当前文件的哪个对应路径下
        -->
        <sqlMapGenerator targetPackage="cool.ale.mapper" targetProject="src/main/resources">
            <!--<property name="enableSubPackages" value="true"/>-->
        </sqlMapGenerator>
        <!--生成Dao类存放位置
            type  指定生成的方式
                1、使用注解的方式生成
                2、使用接口绑定的方式生成(一定要配置sqlMapGenerator)
            targetPackage   生成到哪个包下
            targetProject   生成到当前文件的哪个对应路径下
        -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cool.ale.mapper" targetProject="src/main/java">
            <!--<property name="enableSubPackages" value="true"/>-->
        </javaClientGenerator>
        <!--生成对应表及类名
            domainObjectName  对应的实体类的名字
            mapperName  对应的mapper接口以及mapper.xml文件的名字-->
        <table tableName="emp" domainObjectName="Emp" mapperName="EmpMapper"></table>
        <table tableName="dept" domainObjectName="Dept" mapperName="DeptMapper"></table>
    </context>
</generatorConfiguration>

3、写测试类

package cool.ale.test;

import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MyGeneratorTest {

    @Test
    public  void test01() throws Exception {
        //MBG执行过程中的警告信息
        List<String> warnings = new ArrayList<String>();
        //生成代码重复时,是否覆盖源代码
        boolean override = false;
        InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(in);

        DefaultShellCallback callback = new DefaultShellCallback(override);
        //创建MBG
        MyBatisGenerator mbg = new MyBatisGenerator(config, callback, warnings);
        mbg.generate(null);
        //输出警告信息
        for (String warn : warnings) {
            System.out.println(warn);
        }
    }
}

如果我们使用了mybatis3的方式生成,我们可以使用它给我们生成的动态条件的sql,示例如下:

package cool.ale.test;

import cool.ale.mapper.EmpMapper;
import cool.ale.pojo.Emp;
import cool.ale.pojo.EmpExample;
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.Before;
import org.junit.Test;

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

public class MyMybatisTest {

    private SqlSession session = null;

    @Before
    public void before() throws IOException {
        // 从 xml中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // true是设置自动提交
        session = sqlSessionFactory.openSession(true);

    }

    @Test
    public void select01() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);

        // 使用mybatis3生成的 EmpExample 实现动态条件语句
        EmpExample empExample = new EmpExample();
        EmpExample.Criteria criteria = empExample.createCriteria();
        criteria.andUserNameLike("%测%")
                .andIdEqualTo(2);
        List<Emp> empList = mapper.selectByExample(empExample);
        System.out.println(empList);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值