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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM