zoukankan      html  css  js  c++  java
  • Mybatis Generator插件和PageHelper使用

    最近,开始接触web项目开发,项目使用springboot和mybatis,以前一直以为开发过程中实体类,mybatis的xml文件都需要自己手动的去创建。

    同事推荐说Mybatis Generator插件可以自动生成,于是试了试。

    首先,在项目的pom文件中,增加mybatis generator插件的配置:

    <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>

    然后,在resource目录下,创建配置文件generatorConfig.xml。

    <!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="/Users/lee/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar" />
    <!--实例-->
    <context id="mysqlgenerator" targetRuntime="MyBatis3" defaultModelType="flat">
    <!--去掉生成注释-->
    <commentGenerator>
    <property name="suppressDate" value="true"/>
    <property name="suppressAllComments" value="true" />
    </commentGenerator>
    <!--数据库连接-->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://***.***.**.**:3306/database?characterEncoding=UTF-8"
    userId="root"
    password="test2017"/>
    <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
    <!--
    true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型
    false:默认,
    scale>0;length>18:使用BigDecimal;
    scale=0;length[10,18]:使用Long;
    scale=0;length[5,9]:使用Integer;
    scale=0;length<5:使用Short;
    -->
    <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>
    <!--生成POJO类-->
    <javaModelGenerator targetPackage="com.iflytek.ocp.entity" targetProject="src/main/java">
    <!-- 是否对model添加 构造函数 -->
    <property name="constructorBased" value="false"/>
    <!-- 是否允许子包 -->
    <property name="enableSubPackages" value="false"/>
    <!-- 建立的Model对象是否不可改变,即生成的Model对象不会有setter方法只有构造方法 -->
    <property name="immutable" value="false"/>
    <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
    <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    <!--Mapper映射文件的生成配置,指定包位置和实际位置-->
    <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
    <!--Mapper接口生成的配置,指定包位置和实际位置-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.iflytek.ocp.mapper" targetProject="src/main/java" />
    <!--不生成帮助类(Exmaples) -->
    <!-- enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
    enableSelectByExample="false" selectByExampleQueryId="false" -->
    <!--生成的表-->
    <table tableName="providerfunction" modelType="flat" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false"
    enableSelectByExample="false" selectByExampleQueryId="false">
    <property name="constructorBased" value="false"/>
    </table>

    </context>
    </generatorConfiguration>

    最后,在IDEA中,添加一个“Run运行”选项,在Edit Configuration中选择Maven,运行mybatis-generator-maven-plugin插件 :

    点击apply后,在run选项中会出现generator, 点击运行后,会在设定的目录下下生成实体类,xml文件和dao层接口。

    另外,在项目中,还接触到了mybatis的分页插件PageHelper,其避免了在sql语句中操作分页,简单好用。

    首先在,在pom文件中,引入依赖:

    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.1.1</version>
    </dependency>

    然后,在springboot的application.properties配置文件中,增加pageHelper的相关配置信息,其他配置参数及其含义见github上的详细资料:

    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md。

    #pagehelper分页插件配置
    pagehelper.helperDialect=mysql
    #pageheler参数合理化,默认为false。
    #启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页;
    #禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据。
    pagehelper.reasonable=false
    pagehelper.supportMethodsArguments=true
    pagehelper.params=count=countSql

    然后,根据自己项目的需要,建立一个PageInfo实体类来保存,分页后的相关结果:

    /**
    * 对Page<E>结果进行包装
    * Created by lee on 17/7/21.
    */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    //当前页
    private int pageindex;
    //每页的数量
    private int pagesize;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;
    //是否为第一页
    private boolean isfirstpage = false;
    //是否为最后一页
    private boolean islastpage = false;


    public PageInfo() {
    }

    /**
    * 包装Page对象
    *
    * @param list
    */
    public PageInfo(List<T> list) {
    if (list instanceof Page) {
    Page page = (Page) list;
    this.pageindex = page.getPageNum();
    this.pagesize = page.getPageSize();

    this.pages = page.getPages();
    this.list = page;
    this.total = page.getTotal();
    } else if (list instanceof Collection) {
    this.pageindex = 1;
    this.pagesize = list.size();

    this.pages = 1;
    this.list = list;
    this.total = list.size();
    }
    if (list instanceof Collection) {
    //判断页面边界
    judgePageBoudary();
    }
    }

    /**
    * 判定页面边界
    */
    private void judgePageBoudary() {
    isfirstpage = pageindex == 1;
    islastpage = pageindex == pages;
    }

    public static long getSerialVersionUID() {
    return serialVersionUID;
    }

    public int getPageindex() {
    return pageindex;
    }

    public void setPageindex(int pageindex) {
    this.pageindex = pageindex;
    }

    public int getPagesize() {
    return pagesize;
    }

    public void setPagesize(int pagesize) {
    this.pagesize = pagesize;
    }

    public long getTotal() {
    return total;
    }

    public void setTotal(long total) {
    this.total = total;
    }

    public int getPages() {
    return pages;
    }

    public void setPages(int pages) {
    this.pages = pages;
    }

    public List<T> getList() {
    return list;
    }

    public void setList(List<T> list) {
    this.list = list;
    }

    public boolean isIsfirstpage() {
    return isfirstpage;
    }

    public void setIsfirstpage(boolean isfirstpage) {
    this.isfirstpage = isfirstpage;
    }

    public boolean isIslastpage() {
    return islastpage;
    }

    public void setIslastpage(boolean islastpage) {
    this.islastpage = islastpage;
    }

    @Override
    public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageindex=").append(pageindex);
    sb.append(", pagesize=").append(pagesize);
    sb.append(", total=").append(total);
    sb.append(", pages=").append(pages);
    sb.append(", list=").append(list);
    sb.append(", isfirstpage=").append(isfirstpage);
    sb.append(", islastpage=").append(islastpage);
    sb.append(", navigatepageNums=");
    sb.append('}');
    return sb.toString();
    }
    }

    最后,只需要在Service层中,传入pageNo和pageSize两个参数,即可得到分页查询的结果。

    @Autowired
    private ProviderfunctionMapper providerfunctionMapper;//DAO层接口

    @Override
    public PageInfo<ProviderfunctionInfo> findByPage(ProviderfunctionForm providerfunctionForm, int pageNo, int pageSize) {
    //你需要在进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
    PageHelper.startPage(pageNo, pageSize);
    Page<ProviderfunctionInfo> providerfunctionInfos = providerfunctionMapper.findByPage(providerfunctionForm);
    //使用PageInfo对查询结果结果进行封装
    PageInfo<ProviderfunctionInfo> pageInfo = new PageInfo<>(providerfunctionInfos);
    return pageInfo;
    }
    
    
  • 相关阅读:
    TCP/IP||ARP/RARP
    TCP/IP||IP
    TCP/IP||链路层
    Struts||IQ
    SpringMVC||IQ
    TCP/IP Basic
    Spring||Mails
    Spring||Quartz
    jQuery Ajax 方法应用。
    html5的离线储存应用.
  • 原文地址:https://www.cnblogs.com/junjiang3/p/7247561.html
Copyright © 2011-2022 走看看