SpringBoot实践 (六)-Mybatis逆向工程+使用PageHelper实现分页查询demo

ⅰ亾dé卋堺 提交于 2020-02-09 17:31:23

一:逆向工程

 Mybaits 需要程序员自己编写 SQL 语句,但是 Mybatis 官方提供逆向工程可以针对单表自动生成 Mybaits 执行所需要的代码,包括 POJO、Mapper.java、Mapper.xml。

承接上一个记录Mybatis的博客,项目已有了,开始动手。只要一个整合Mybatis的项目就可以了。

1:添加 Mybatis Generator的依赖。

<!-- mybatis逆向工程jar包 -->
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.4</version>
		</dependency>

添加插件:注意 <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>

设置配置文件的位置。

<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<overwrite>true</overwrite>
					<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
				</configuration>
			</plugin>

再相应的位置添加配置文件。

 这里面我设置的内容如下:

<?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>
    <classPathEntry location="D:\mavenproject\repository\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar"/>
  <context id="DB2Tables" targetRuntime="MyBatis3">

        <!-- JavaBean 实现 序列化 接口 -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
        <!-- 生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
        <!-- optional,旨在创建class时,对注释进行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- <property name="suppressAllComments" value="true"/>-->
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/db_1?serverTimezone=UTC"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <!-- 类型转换 -->
        <javaTypeResolver >
            <!-- 是否使用bigDecimal,
                false: 把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer(默认)
                true:  把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal
            -->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.mystore.generator" targetProject="src/main/java">
            <!-- 默认false 是否允许子包 -->
            <property name="enableSubPackages" value="true" />
            <!-- 默认false 是否对model添加 构造函数 -->
            <property name="constructorBased" value="false"/>
            <!-- 默认false 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
            <!-- 默认false 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="generator/mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mystore.generator" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <!-- <table tableName="risk_model_order" domainObjectName="DSRiskModelOrder" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
         <table tableName="tel_bill_record" domainObjectName="DSTelBillRecord" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>-->
        <table tableName="t_user"></table>
        <table tableName="t_account"></table>

  </context>
</generatorConfiguration>

配置内容见注释,可以设置自己需要,如果想见此配置文件中可以设置的内容,由于内容过多我把里面的内容添加到附件里,可以从里面看其他相关配置。

然后找到 Maven Project 双击: generator

控制台输出:表示成功。

生成的内容:

二:使用PageHelper插件实现分页查询

使用其实很简单,也可以参考官方文档详细描述:分页插件中文文档

1:引入pom

<!-- 分页插件pagehelper -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.0.0</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
			<version>1.2.3</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- 分页插件pagehelper -->

2:我直接查询所有产品信息进行分页:

mapper内容:

   <select id="getAllProduct" resultType="product">
         <include refid="defaultSql"></include>
    </select>

3:service中直接调用  下面写的只是其中一种使用方式,大家可以参考文档选择自己的喜欢的调用方式,然后进行自己封装结果返回。

  @Override
    public PageInfo getAllProduct(int pageNum,int pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List<ProductPo> allProduct = productMappers.getAllProduct();
        PageInfo<ProductPo> pageinfo=  new PageInfo<ProductPo>(allProduct);
        for ( ProductPo po: allProduct) {
            System.out.println(po);
        }
        System.out.println(allProduct.toString());
      
        return pageinfo;
    }

4:看下打印结果,很有意思

看到了吗?我遍历集合取出的数据和直接toString集合的数据是不一样的。 debug的时候我们也可以看到,使用分页的之后,我们用mapper调用查询得到的集合结果已经不是普通的集合了而是一个Page对象。

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!