原生的mybatis需要手写sql语句,项目数据库表多了之后,可以让你写sql语句写到手软,于是mybatis官方提供了mybatis-generator:mybatis逆向工程代码生成工具,用于简化mybatis单表操作。
在PageHelper3.几的版本的时候,使用它对逆向工程生成的查询方法进行分页时出现失效的情况,而PageHelper4开始,亲测能够与mybatis逆向工程生成的方法完美兼容,今天就和大家分享spring+mybatis+PageHelper的一个整合小案例
第一步:创建maven工程,编写pom.xml
- <!-- 集中定义依赖版本号 -->
- <!-- 已经依据maven仓库给出的版本兼容信息,调节好合适的spring、mybatis-spring、mybatis、pagehelper版本号 -->
- <properties>
- <junit.version>4.12</junit.version>
- <spring.version>4.3.10.RELEASE</spring.version>
- <mybatis.version>3.4.1</mybatis.version>
- <mybatis.spring.version>1.3.0</mybatis.spring.version>
- <mysql.version>5.1.32</mysql.version>
- <slf4j.version>1.6.4</slf4j.version>
- <jackson.version>2.8.8</jackson.version>
- <druid.version>1.0.9</druid.version>
- <httpclient.version>4.3.5</httpclient.version>
- <jstl.version>1.2</jstl.version>
- <servlet-api.version>2.5</servlet-api.version>
- <jsp-api.version>2.0</jsp-api.version>
- <joda-time.version>2.5</joda-time.version>
- <commons-lang3.version>3.3.2</commons-lang3.version>
- <commons-io.version>1.3.2</commons-io.version>
- <commons-net.version>3.3</commons-net.version>
- <!-- 4.1.6 -->
- <pagehelper.version>4.1.0</pagehelper.version>
- <jsqlparser.version>0.9.1</jsqlparser.version>
- <commons-fileupload.version>1.3.1</commons-fileupload.version>
- <jedis.version>2.7.2</jedis.version>
- <solrj.version>4.10.3</solrj.version>
- <dubbo.version>2.5.3</dubbo.version>
- <zookeeper.version>3.4.7</zookeeper.version>
- <zkclient.version>0.1</zkclient.version>
- <activemq.version>5.11.2</activemq.version>
- <freemarker.version>2.3.23</freemarker.version>
- <quartz.version>2.2.2</quartz.version>
- </properties>
- <dependencies>
- <!-- 时间操作组件 -->
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- <version>${joda-time.version}</version>
- </dependency>
- <!-- Apache工具组件 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>${commons-lang3.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-io</artifactId>
- <version>${commons-io.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <version>${commons-net.version}</version>
- </dependency>
- <!-- Jackson Json处理工具包 -->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <!-- httpclient -->
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>${httpclient.version}</version>
- </dependency>
- <!-- quartz任务调度框架 -->
- <dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- <version>${quartz.version}</version>
- </dependency>
- <!-- 单元测试 -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
- </dependency>
- <!-- Mybatis -->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>${mybatis.version}</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>${mybatis.spring.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- <artifactId>pagehelper</artifactId>
- <version>${pagehelper.version}</version>
- </dependency>
- <!-- MySql -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.version}</version>
- </dependency>
- <!-- 连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <!-- Spring -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aspects</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jms</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!-- 整合测试包 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${spring.version}</version>
- <scope>provided</scope>
- </dependency>
- <!-- log4j2 -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>2.7</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.7</version>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-web</artifactId>
- <version>2.7</version>
- </dependency>
- <!-- JSP相关 -->
- <dependency>
- <groupId>jstl</groupId>
- <artifactId>jstl</artifactId>
- <version>${jstl.version}</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>${servlet-api.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>${jsp-api.version}</version>
- <scope>provided</scope>
- </dependency>
- <!-- 文件上传组件 -->
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>${commons-fileupload.version}</version>
- </dependency>
- <!-- Redis客户端 -->
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>${jedis.version}</version>
- </dependency>
- <!-- solr客户端 -->
- <dependency>
- <groupId>org.apache.solr</groupId>
- <artifactId>solr-solrj</artifactId>
- <version>${solrj.version}</version>
- </dependency>
- <!-- dubbo相关 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>dubbo</artifactId>
- <version>${dubbo.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.zookeeper</groupId>
- <artifactId>zookeeper</artifactId>
- <version>${zookeeper.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.sgroschupf</groupId>
- <artifactId>zkclient</artifactId>
- <version>${zkclient.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-all</artifactId>
- <version>${activemq.version}</version>
- </dependency>
- <dependency>
- <groupId>org.freemarker</groupId>
- <artifactId>freemarker</artifactId>
- <version>${freemarker.version}</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <!-- 资源文件拷贝插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>2.7</version>
- <configuration>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <!-- java编译插件 -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.2</version>
- <configuration>
- <source>1.7</source>
- <target>1.7</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <!-- 配置Tomcat插件 -->
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <configuration>
- <port>8080</port>
- <path>/</path>
- </configuration>
- </plugin>
- </plugins>
- </build>
第二步:使用mybatis逆向工程工具生成代码:
mybatis-generator 下载地址:
逆向工程工具
该工具并不是我分享的,我也没用过,如果是不能用的,希望能够在评论区告诉我
第三步:将mybatis逆向工程生成的代码复制到我们的项目下
第四步:配置文件相关:
4.1 配置log4j2.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <Configuration status="OFF" monitorInterval="1800">
- <properties>
- <property name="LOG_HOME">D:/log4j2/mybatis/genertor/logs/</property>
- <property name="ERROR_LOG_FILE_NAME">error</property>
- </properties>
- <Appenders>
- <!-- 控制台打印日志 -->
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />
- </Console>
- <!-- 日志信息输出到文件配置 -->
- <RollingRandomAccessFile name="ErrorLog"
- fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
- filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
- <PatternLayout
- pattern="%d %-5p (%F:%L) - %m%n"/>
- <Policies>
- <!-- TimeBasedTriggeringPolicy指定的size是1,结合起来就是1天生成一个新文件。如果filePattern改成%d{yyyy-MM-dd HH}.gz,此时最小粒度为小时,则每一个小时生成一个文件。 -->
- <TimeBasedTriggeringPolicy/>
- <!-- 指定当文件体积大于size指定的值时,触发Rolling -->
- <SizeBasedTriggeringPolicy size="100 MB"/>
- </Policies>
- <!-- 指定最多保存的文件个数 -->
- <DefaultRolloverStrategy max="20"/>
- </RollingRandomAccessFile>
- <param name="Encoding" value="UTF-8" />
- </Appenders>
- <Loggers>
- <!-- 3rdparty Loggers -->
- <logger name="org.springframework.core" level="info">
- </logger>
- <logger name="org.springframework.beans" level="info">
- </logger>
- <logger name="org.springframework.context" level="info">
- </logger>
- <logger name="org.springframework.web" level="info">
- </logger>
- <logger name="org.springframework.test.context.junit4.SpringJUnit4ClassRunner" level="info">
- </logger>
- <logger name="com.lmsq.shaxuntech" level="debug" includeLocation="true" additivity="false">
- <appender-ref ref="ErrorLog"/>
- <appender-ref ref="Console"/>
- </logger>
- <root level="info" includeLocation="true">
- <appender-ref ref="ErrorLog"/>
- <appender-ref ref="Console"/>
- </root>
- </Loggers>
- <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
- </Configuration>
4.2配置spring相关配置文件
applicationContext-dao.xml
- <!-- 加载配置文件 -->
- <context:property-placeholder location="classpath:conf/db.properties" file-encoding="utf-8" />
- <!-- 数据库连接池 -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
- destroy-method="close">
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- <property name="driverClassName" value="${jdbc.driver}" />
- <property name="maxActive" value="10" />
- <property name="minIdle" value="5" />
- </bean>
- <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <!-- 数据库连接池 -->
- <property name="dataSource" ref="dataSource" />
- <!-- 加载mybatis的全局配置文件 -->
- <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
- <!-- 配置Mapper配置文件所在路径 -->
- <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/>
- </bean>
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.stu.dao" />
- </bean>
application-service.xml
- <!-- 配置包扫描器 -->
- <context:component-scan base-package="com.stu.service"/>
springmvc.xml
- <!-- 加载配置文件 -->
- <context:property-placeholder location="classpath:conf/*.properties" file-encoding="utf-8" />
- <context:component-scan base-package="com.stu.api.controller" />
- <mvc:annotation-driven />
- <!-- 配置资源映射 -->
- <mvc:resources location="/css/" mapping="/css/**"/>
- <mvc:resources location="/js/" mapping="/js/**"/>
- <!-- 配置多媒体解析器 -->
- <!-- 定义文件上传解析器 -->
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <!-- 设定默认编码 -->
- <property name="defaultEncoding" value="UTF-8"></property>
- <!-- 设定文件上传的最大值5MB,5*1024*1024 -->
- <property name="maxUploadSize" value="5242880"></property>
- </bean>
- <!-- 添加跨域请求支持 -->
- <!--
- <mvc:cors>
- <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,POST,PUT,DELETE,PATCH,OPTIONS"/>
- </mvc:cors>
- -->
4.3mybatis相关配置
SqlMapConfig.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <typeAliases>
- <package name="com.stu.pojo" />
- </typeAliases>
- <plugins>
- <plugin interceptor="com.github.pagehelper.PageHelper">
- <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
- <property name="dialect" value="mysql"/>
- </plugin>
- </plugins>
- </configuration>
4.4 数据库链接的properties文件
db.properties
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/stu?characterEncoding=utf-8
- jdbc.username=root
- jdbc.password=root
4.5web.xml的配置
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
- <display-name>Mybatis-generator</display-name>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- <!-- 解决post乱码 -->
- <filter>
- <filter-name>characterEncoding</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>characterEncoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- log4j2-begin -->
- <listener>
- <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
- </listener>
- <filter>
- <filter-name>log4jServletFilter</filter-name>
- <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>log4jServletFilter</filter-name>
- <url-pattern>/*</url-pattern>
- <dispatcher>REQUEST</dispatcher>
- <dispatcher>FORWARD</dispatcher>
- <dispatcher>INCLUDE</dispatcher>
- <dispatcher>ERROR</dispatcher>
- </filter-mapping>
- <!-- log4j2-end -->
- <!-- 支持GET、POST、PATCH、PUT与DELETE请求 -->
- <filter>
- <filter-name>httpPutFormFilter</filter-name>
- <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>httpPutFormFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--
- <filter>
- <filter-name>hiddenHttpMethodFilter</filter-name>
- <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>hiddenHttpMethodFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- -->
- <!-- 加载spring配置文件 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring/applicationContext*.xml</param-value>
- </context-param>
- <!-- 加载springmvc配置文件 -->
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring/springmvc.xml</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <!-- 指定拦截路径 -->
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
第五步:创建service层引用Mapper接口
接口:
- package com.stu.service;
- import java.util.List;
- import com.stu.pojo.TUser;
- public interface UserService {
- public List<TUser> getUserInfo( String keywords, Integer page, Integer size);
- }
实现类:
- package com.stu.service.impl;
- import java.util.List;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.stu.dao.TUserMapper;
- import com.stu.pojo.TUser;
- import com.stu.pojo.TUserExample;
- import com.stu.service.UserService;
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- private TUserMapper userMapper;
- @Override
- public List<TUser> getUserInfo(String keywords, Integer page, Integer size) {
- PageHelper.startPage(page, size);
- TUserExample example = new TUserExample();
- if (!StringUtils.isBlank(keywords)) {
- example.createCriteria().andUsernameLike(keywords + "%");
- }
- List<TUser> list = userMapper.selectByExample(example);
- PageInfo<TUser> info = new PageInfo<TUser>(list);
- System.out.println("页码: " + info.getPageNum());
- System.out.println("每页大小: " + info.getSize());
- System.out.println("总页数: " + info.getPages());
- System.out.println("总记录数: " + info.getTotal());
- return list;
- }
- }
第六步:创建Controller
- package com.stu.api.controller;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import com.stu.pojo.TUser;
- import com.stu.service.UserService;
- @RestController
- @RequestMapping("/api/v2/users")
- public class UserController {
- @Resource
- private UserService userService;
- @GetMapping("/")
- public List<TUser> getUserInfo( String keywords ,Integer page, Integer size){
- System.out.println("page : " + page);
- System.out.println("size : " + size);
- if(keywords != null){
- try {
- keywords=new String(keywords.getBytes("ISO-8859-1"),"UTF-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
- List<TUser> user = userService.getUserInfo(keywords , page, size);
- return user;
- }
- }
第七步:运行项目 ,测试
1、使用tomcat7:run运行项目
2、在浏览器中输入:http://localhost:8080/api/v2/users/?keyword=张三&page=1&size=2
数据返回成功:
- {"data":[{"id":1,"username":"王五","password":null,"state":0,"isdel":false,"addTime":1487644664000,"money":null,"leftMoney":22.1,"remark":null},{"id":2,"username":"张三","password":null,"state":0,"isdel":false,"addTime":1487644811000,"money":null,"leftMoney":22.1,"remark":null}],"meta":{"respCode":0,"respMsg":null,"detail":"OK","url":null},"pagination":{"page":1,"size":2,"totalPage":58,"totalCode":116}}