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;
}
Mybatis Generator插件和PageHelper使用的更多相关文章
- Myeclipse2014添加mybatis generator插件
Myeclipse2014把mybatis generator插件直接放在dropins文件夹下,重启后不能成功安装mybatis插件. 既然离线安装不成功,可以选择在线安装 1.选择 Help-&g ...
- mybatis generator 插件安装及使用
现在Mybatis特别火,但是在开发中却要经常写实体类和配置文件,会不会特别烦人,所以可以利用Mybatis的代码生成插件来生成这部分代码: 1,打开eclipse,点击Help>Softwar ...
- Eclipse 使用mybatis generator插件自动生成代码
Eclipse 使用mybatis generator插件自动生成代码 标签: mybatis 2016-12-07 15:10 5247人阅读 评论(0) 收藏 举报 .embody{ paddin ...
- Eclipse MyBatis Generator插件安装
目录 Eclipse MyBatis Generator插件安装 Eclipse MyBatis Generator插件安装 1.进入Eclipse Marketplace [Help] -> ...
- Mybatis-Generator_学习_02_使用Mapper专用的MyBatis Generator插件
源码见:https://github.com/shirayner/tk-mybatis-generator 一.要点 二.具体实现 1.项目结构 2.配置 pm.xml <?xml versio ...
- Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)
众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页. ...
- 使用Mapper专用的MyBatis Generator插件
使用Maven执行MBG 这里有一个完整的例子,Mybatis-Spring,下面讲解的内容出自这个例子. 使用Maven插件的一个好处是可以将Maven中的属性使用${property}形式在gen ...
- 使用Mybatis Generator插件自动生成映射文件(cmd无法进入文件,dns服务器对区域没有权威等问题)遇到问题
使用Mybatis Genertor插件自动生MyBatis所需要的DAO接口,实体模型类,Mapping映射文件,将生成的代码赋值到项目工程中即可. 有命令行,Eclipse插 ...
- 使用mybatis generator插件,自动生成dao、dto、mapper等文件
mybatis generator 介绍 mybatis generator中文文档http://mbg.cndocs.tk/ MyBatis Generator (MBG) 是一个Mybatis的代 ...
随机推荐
- Python9-网络编程-day30
# 由于不同机器上的程序要通信,才产生了网络# server# client# 端口 找到的程序# 在计算机上,每一个需要网络通信的程序,都会开一个端口# 在同一时间只会有一个程序占用一个端口# 不可 ...
- apicloud入门学习笔记1:简单介绍
官网地址:https://www.apicloud.com/ 新手开发指南:https://docs.apicloud.com/APICloud/junior-develop-guide 开发语言:H ...
- MySQL配置允许远程登录
MySQL默认只允许用户本地登录,需要远程连接可进行如下操作: 允许root用户在任何地方进行远程登录,并具有所有库任何操作权限: 使用root用户登录mysql: mysql -u root -p& ...
- WIN 备份 重装
title: WIN 备份 重装 date: 2018-09-01 22:35:31 updated: tags: [windows,记录,折腾] description: keywords: com ...
- POJ - 1321 深度优先搜索入门
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> us ...
- K-means算法的优缺点
K-means算法的优缺点 优点:原理简单,实现容易 缺点: 收敛较慢 算法时间复杂度比较高 \(O(nkt)\) 不能发现非凸形状的簇 需要事先确定超参数K 对噪声和离群点敏感 结果不一定是全局最优 ...
- 【Luogu】P3211XOR和路径(高斯消元)
题目链接 唉我个ZZ…… 首先考虑到异或是可以每一位分开算的 好的以后再碰见位运算题我一定先往按位开车上想 然后设f[i]为从i点出发到终点是1的概率 高斯消元解方程组即可. #include< ...
- 【Luogu】P4231三步必杀(差分,差分)
题目链接 郑重宣布我以后真的再也不会信样例了,三种写法都能过 另:谁评的蓝题难度qwq 蓝题有这么恐怖吗 两次差分,第一次差分,前缀和求出增量数组,第二次求出原数组顺便更新答案 看题解之后……第二次差 ...
- 【Luogu】P2219修筑绿化带(单调队列)
题目链接 这题各种边界判断恶心死人 就是单调队列在每行求出最小的.能装进A*B方块里的花坛 然后再在刚刚求出的那个东西里面跑一遍竖着的单调队列 然后……边界调了一小时 做完这题我深刻地感觉到我又强了 ...
- gcd-模板+最小公倍数
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int G ...