mybatis-generator与pagehelper

mybatis-generator

在公司项目中,架构提供了一些基本的mybatis,然后自己查看了一下,貌似构架集成了generator。所以自己就研究了一下。(我们这里使用的spring boot)
接下来介绍如何使用
1.下载插件 在help -eclipse marketplace中搜索Mybatis Generator,然后安装。如果安装失败可以换个工作空间重启一波试试。

mybatis-generator与pagehelper

2.在pom文件中加入依赖。版本可以去官网瞅瞅。

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

<!--添加配置文件的位置 需要手动添加-->
<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!-- mybatis用于生成代码的配置文件 -->
					<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>

3.建立一个mvc项目或者是boot项目。然后建立好各个层的包,下面是我的包结构。
mybatis-generator与pagehelper
4.在数据库中新建表(随便建立。。。不用我多说),然后在entity中建立好关于这个表的pojo。这时候准备工作就做完啦.
5.这时我们新建generator的配置文件generatorConfig.xml文件(我放在了resourses中,我理解是随便放置,但是配置文件一般都放在这里面)然后编写配置文件。

<?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>
	<context id="context1">
		<!-- 链接数据库 -->
		<jdbcConnection connectionURL="jdbc:mysql://localhost:3306/mysql"
			driverClass="com.mysql.jdbc.Driver" password="root" userId="root" />
		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
			和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>
		<!-- 查找po的所在位置,targetPackage是com后的路径,而 targetProject是com前的路径,按照这个格式配置就可以 -->
		<javaModelGenerator targetPackage="com.example.demo.entity"
			targetProject="generator/src/main/java" />
		<!-- 配置生成mapper的所在位置 -->
		<sqlMapGenerator targetPackage="mapper"
			targetProject="generator/src/main/resources" />
		<!-- 配置生成dao的所在位置 -->
		<javaClientGenerator targetPackage="com.example.demo.dao"
			targetProject="generator/src/main/java" type="XMLMAPPER" />
		<table tableName="city">
		</table>
	</context>
</generatorConfiguration>

以上就是简单的入门配置,一看就懂。
6.按照配置文件生成。右键generatorConfig.xml,点击run as -run mybatis-generator(就是那个小企鹅。。。)之后就会生成了。这可比自己写一套方便多了。如果生成的不满足需求,可以在生成的文件中修改和添加。
mybatis-generator与pagehelper

pagehelper

既然生成了一波,那么不跑着玩一玩就对不起费的力气了。那么问题又来了,怎么分页呢。咱们可以在sql里面拼接limit,但是这样是不是有点low,所以我又访问了一下伟大的百度,又知道了一个插件pagehelper,那么下面介绍一下pagehelper。
1.首先在pom文件中加入依赖。同理版本方面可以访问官网。https://pagehelper.github.io/ 同时里面还有官方文档,想仔细研究的大佬可以去瞧瞧。

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

2.编写controller层和service层
service如下,很简单的查询,使用了刚才generator生成的selectbyid方法,我们只需要传入两个参数currentPage和pageSize,用过分页的应该都知道,分别是当前页和每页的条数,然后在PageHelper.startPage(currentPage, pageSize);就ok了

package com.example.demo.service;

@Service
public class CityService {
	@Autowired
	CityMapper cityMapper;

	public List<City> findItemByPage(int currentPage, int pageSize, int id) {
		PageHelper.startPage(currentPage, pageSize);
		List<City> list = cityMapper.selectById(id);
		return list;
	}
}

3.编写controller层,很简单,没啥说的,直接掉service就完事了。

@RestController
@RequestMapping("/selectcity")
public class CityController {

	@Autowired
	CityService cityService;
	
	@RequestMapping("/select2")
	@ResponseBody
	public List<City> selectById(@Param("currentPage") int currentPage,@Param("pageSize") int pageSize,@Param("id") int id) {

		return cityService.findItemByPage(currentPage, pageSize, id);
	}
}

4.配置xxGeneratorApplication.java,添加下面代码,下面参数在官方文档中都有大家可以自己去看(中文文档很简单),地址 https://pagehelper.github.io/docs/howtouse/

// 配置mybatis的分页插件pageHelper
	@Bean
	public PageHelper pageHelper() {
		PageHelper pageHelper = new PageHelper();
		Properties properties = new Properties();
		properties.setProperty("offsetAsPageNum", "true");
		properties.setProperty("rowBoundsWithCount", "true");
		properties.setProperty("reasonable", "true");
		properties.setProperty("dialect", "mysql"); // 配置mysql数据库的方言
		pageHelper.setProperties(properties);
		return pageHelper;
	}

然后我们直接调用接口就ok了,顺便说一下pagehelper是一种物理分页方式(拼接liimit到sql).所以效率是比较好的。

参考:
https://www.cnblogs.com/onetwo/p/7371778.html
https://blog.csdn.net/haoui123/article/details/70209038