目标:

  使用 Spring  boot+MyBatis+mysql 集成 Mapper 和 PageHelper,实现基本的增删改查

先建一个基本的 Spring Boot 项目开启 Spring Boot  参考

使用的 spring boot 版本为 2.1.6.RELEASE

1.集成MyBatis

  引入mybatis-spring-boot-starter和数据库连接驱动

  修改pom.xml

  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>2.0.1</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <scope>runtime</scope>
  11. </dependency>

2.Druid数据源

Druid是一个关系型数据库连接池

阿里巴巴数据库事业部出品,为监控而生的数据库连接池。https://github.com/alibaba/druid

  (1)引入依赖

    修改pom.xml

  1. <!-- druid数据源驱动 -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>druid-spring-boot-starter</artifactId>
  5. <version>1.1.16</version>
  6. </dependency>

  (2)配置

  在 src/main/resources/application.properties 里添加

  1. # 数据库访问配置, 使用druid数据源
  2. spring.datasource.druid.db-type=mysql
  3. spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
  4. spring.datasource.druid.url = jdbc:mysql://127.0.0.1:3306/bms?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
  5. spring.datasource.druid.username=root
  6. spring.datasource.druid.password=root
  7. # 连接池配置
  8. spring.datasource.druid.initial-size=5
  9. spring.datasource.druid.min-idle=5
  10. spring.datasource.druid.max-active=20
  11. # 配置获取连接等待超时的时间
  12. spring.datasource.druid.max-wait=30000
  13. # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  14. spring.datasource.druid.time-between-eviction-runs-millis=60000
  15. # 配置一个连接在池中最小生存的时间,单位是毫秒
  16. spring.datasource.druid.min-evictable-idle-time-millis=300000
  17. spring.datasource.druid.validation-query= select '1' from dual
  18. spring.datasource.druid.test-while-idle=true
  19. spring.datasource.druid.test-on-borrow=false
  20. spring.datasource.druid.test-on-return=false
  21. # 打开PSCache,并且指定每个连接上PSCache的大小
  22. spring.datasource.druid.pool-prepared-statements=true
  23. spring.datasource.druid.max-open-prepared-statements=20
  24. spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
  25. # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
  26. spring.datasource.druid.filters=stat,wall
  27.  
  28. # WebStatFilter配置
  29. spring.datasource.druid.web-stat-filter.enabled=true
  30. spring.datasource.druid.web-stat-filter.url-pattern=/*
  31. spring.datasource.druid.web-stat-filter.exclusions='*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
  32.  
  33. #是否启用StatFilter默认值true
  34. spring.datasource.druid.stat-view-servlet.enabled=true
  35. # 访问路径为/druid时,跳转到StatViewServlet
  36. spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
  37.  
  38. #druid监控管理界面登录帐号
  39. spring.datasource.druid.stat-view-servlet.login-username=admin
  40. #druid监控管理界面登录密码
  41. spring.datasource.druid.stat-view-servlet.login-password=123456
  42. spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
  43. #是否开启重置功能
  44. druid.monitor.resetEnable=false
  45.  
  46. # 配置StatFilter
  47. spring.datasource.druid.filter.stat.log-slow-sql=true

  配置了Druid作为连接池,并开启了Druid的监控功能

  (3)运行项目

  浏览器打开http://localhost:8080/druid/login.html

  输入配置的用户名admin和密码123456登录后

3.集成通用Mapper和PageHelper分页插件

可以简化工作:

  通用Mapper可以简化对单表的CRUD操作

  PageHelper分页插件可以自动拼接分页SQL

  可以使用MyBatis Geneator来自动生成实体类,Mapper接口和Mapper xml代码

  (1)引入依赖

    修改pom.xml

    <1>通用Mapper和PageHelper

  1. <!-- 通用mapper -->
  2. <dependency>
  3. <groupId>tk.mybatis</groupId>
  4. <artifactId>mapper-spring-boot-starter</artifactId>
  5. <version>2.1.5</version>
  6. </dependency>
  7. <!-- pagehelper 分页插件 -->
  8. <dependency>
  9. <groupId>com.github.pagehelper</groupId>
  10. <artifactId>pagehelper-spring-boot-starter</artifactId>
  11. <version>1.2.10</version>
  12. </dependency>

    <2>MyBatis Geneator

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. <plugin>
  8. <groupId>org.mybatis.generator</groupId>
  9. <artifactId>mybatis-generator-maven-plugin</artifactId>
  10. <version>1.3.7</version>
  11. <dependencies>
  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>${mysql.version}</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>tk.mybatis</groupId>
  19. <artifactId>mapper</artifactId>
  20. <version>4.1.5</version>
  21. </dependency>
  22. </dependencies>
  23. <executions>
  24. <execution>
  25. <id>Generate MyBatis Artifacts</id>
  26. <phase>package</phase>
  27. <goals>
  28. <goal>generate</goal>
  29. </goals>
  30. </execution>
  31. </executions>
  32. <configuration>
  33. <!--允许移动生成的文件 -->
  34. <verbose>true</verbose>
  35. <!-- 是否覆盖 -->
  36. <overwrite>true</overwrite>
  37. <!-- 自动生成的配置 -->
  38. <configurationFile>src/main/resources/mybatis-generator.xml</configurationFile>
  39. </configuration>
  40. </plugin>
  41. </plugins>
  42. </build>

  (2)配置

    <1>配置MyBatis

    修改src/main/resources/application.properties

  1. # type-aliases扫描路径
  2. mybatis.type-aliases-package=com.sfn.bms.system.model
  3. # mapper xml实现扫描路径
  4. mybatis.mapper-locations=classpath:mapper/*xml

    <2>配置通用Mapper

    修改src/main/resources/application.properties

  1. mapper.mappers=com.sfn.bms.common.config.MyMapper
  2. mapper.not-empty=false
  3. mapper.identity=MYSQL

    定义MyMapper接口 

  1. package com.sfn.bms.common.config;
  2.  
  3. import tk.mybatis.mapper.common.Mapper;
  4. import tk.mybatis.mapper.common.MySqlMapper;
  5.  
  6. public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
  7.  
  8. }

  注:

    该接口不能被扫描到,自己定义的Mapper都需要继承这个接口

    <3>配置PageHelper

    修改src/main/resources/application.properties

  1. pagehelper.helper-dialect=mysql
  2. pagehelper.reasonable=true
  3. pagehelper.support-methods-arguments=true
  4. pagehelper.params=count=countsql

    <4>配置Geneator

     在src/main/resources 下新建 mybatis-generator.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <context id="testTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
  7.  
  8. <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
  9. <!-- 该配置会使生产的Mapper自动继承MyMapper -->
  10. <property name="mappers" value="com.sfn.bms.common.config.MyMapper" />
  11. <!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
  12. <property name="caseSensitive" value="false"/>
  13. </plugin>
  14.  
  15. <!-- 阻止生成自动注释 -->
  16. <commentGenerator>
  17. <property name="javaFileEncoding" value="UTF-8"/>
  18. <property name="suppressDate" value="true"/>
  19. <property name="suppressAllComments" value="true"/>
  20. </commentGenerator>
  21.  
  22. <!-- 数据库链接地址账号密码 -->
  23. <jdbcConnection
  24. driverClass="com.mysql.cj.jdbc.Driver"
  25. connectionURL="jdbc:mysql://localhost:3306/bms?serverTimezone=Asia/Shanghai&amp;nullCatalogMeansCurrent=true"
  26. userId="root"
  27. password="root">
  28. </jdbcConnection>
  29.  
  30. <javaTypeResolver>
  31. <property name="forceBigDecimals" value="false"/>
  32. </javaTypeResolver>
  33.  
  34. <!-- 生成Model类存放位置 -->
  35. <javaModelGenerator targetPackage="com.sfn.bms.system.model" targetProject="src/main/java">
  36. <property name="enableSubPackages" value="true"/>
  37. <property name="trimStrings" value="true"/>
  38. </javaModelGenerator>
  39.  
  40. <!-- 生成映射文件存放位置 -->
  41. <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
  42. <property name="enableSubPackages" value="true"/>
  43. </sqlMapGenerator>
  44.  
  45. <!-- 生成Dao类存放位置 -->
  46. <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件的代码
  47. type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
  48. type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
  49. <javaClientGenerator type="XMLMAPPER" targetPackage="com.sfn.bms.system.mapper" targetProject="src/main/java">
  50. <property name="enableSubPackages" value="true"/>
  51. </javaClientGenerator>
  52.  
  53. <!-- 配置需要生成的表 -->
  54. <table tableName="T_USER" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
  55. <generatedKey column="id" sqlStatement="mysql" identity="true"/>
  56. </table>
  57. </context>
  58. </generatorConfiguration>

  (3)代码生成

    run—》edit configurations

    command  line:mybatis-generator:generate -e

    执行后输出

  1. "C:\Program Files\Java\jdk1.8.0_151\bin\java" -Dmaven.multiModuleProjectDirectory=E:\java\project\newbms "-Dmaven.home=D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.5\plugins\maven\lib\maven3" "-Dclassworlds.conf=D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.5\plugins\maven\lib\maven3\bin\m2.conf" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.5\lib\idea_rt.jar=8709:D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.5\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2017.3.5\plugins\maven\lib\maven3\boot\plexus-classworlds-2.5.2.jar" org.codehaus.classworlds.Launcher -Didea.version=2017.3.5 mybatis-generator:generate -e
  2. [INFO] Error stacktraces are turned on.
  3. [INFO] Scanning for projects...
  4. [INFO]
  5. [INFO] ------------------------------------------------------------------------
  6. [INFO] Building bms 0.0.1-SNAPSHOT
  7. [INFO] ------------------------------------------------------------------------
  8. [INFO]
  9. [INFO] --- mybatis-generator-maven-plugin:1.3.7:generate (default-cli) @ bms ---
  10. [INFO] Connecting to the Database
  11. [INFO] Introspecting table USER
  12. [INFO] Generating Record class for table user
  13. [INFO] Generating Mapper Interface for table user
  14. [INFO] Generating SQL Map for table user
  15. [INFO] Saving file UserMapper.xml
  16. [INFO] Saving file User.java
  17. [INFO] Saving file UserMapper.java
  18. [WARNING] Existing file E:\java\project\newbms\src\main\java\com\sfn\bms\system\model\User.java was overwritten
  19. [WARNING] Existing file E:\java\project\newbms\src\main\java\com\sfn\bms\system\mapper\UserMapper.java was overwritten
  20. [INFO] ------------------------------------------------------------------------
  21. [INFO] BUILD SUCCESS
  22. [INFO] ------------------------------------------------------------------------
  23. [INFO] Total time: 1.720 s
  24. [INFO] Finished at: 2019-06-21T12:43:01+08:00
  25. [INFO] Final Memory: 27M/398M
  26. [INFO] ------------------------------------------------------------------------

    自动生成以下代码

  

  UserMapper

  1. package com.sfn.bms.system.mapper;
  2.  
  3. import com.sfn.bms.common.config.MyMapper;
  4. import com.sfn.bms.system.model.User;
  5.  
  6. public interface UserMapper extends MyMapper<User> {
  7. }

  User 

  1. package com.sfn.bms.system.model;
  2.  
  3. import javax.persistence.*;
  4.  
  5. public class User {
  6. @Id
  7. @GeneratedValue(strategy = GenerationType.IDENTITY)
  8. private Short id;
  9.  
  10. /**
  11. * 账号
  12. */
  13. private String account;
  14.  
  15. /**
  16. * 密码
  17. */
  18. private String password;
  19.  
  20. /**
  21. * 邮箱
  22. */
  23. private String email;
  24.  
  25. /**
  26. * 状态 1-正常,0-禁用,-1-删除
  27. */
  28. private Boolean status;
  29.  
  30. /**
  31. * 添加时间
  32. */
  33. @Column(name = "create_time")
  34. private Integer createTime;
  35.  
  36. /**
  37. * 上次登陆时间
  38. */
  39. @Column(name = "last_login_time")
  40. private Integer lastLoginTime;
  41.  
  42. /**
  43. * 上次登录IP
  44. */
  45. @Column(name = "last_login_ip")
  46. private String lastLoginIp;
  47.  
  48. /**
  49. * 登陆次数
  50. */
  51. @Column(name = "login_count")
  52. private Integer loginCount;
  53.  
  54. /**
  55. * @return id
  56. */
  57. public Short getId() {
  58. return id;
  59. }
  60.  
  61. /**
  62. * @param id
  63. */
  64. public void setId(Short id) {
  65. this.id = id;
  66. }
  67.  
  68. /**
  69. * 获取账号
  70. *
  71. * @return account - 账号
  72. */
  73. public String getAccount() {
  74. return account;
  75. }
  76.  
  77. /**
  78. * 设置账号
  79. *
  80. * @param account 账号
  81. */
  82. public void setAccount(String account) {
  83. this.account = account == null ? null : account.trim();
  84. }
  85.  
  86. /**
  87. * 获取密码
  88. *
  89. * @return password - 密码
  90. */
  91. public String getPassword() {
  92. return password;
  93. }
  94.  
  95. /**
  96. * 设置密码
  97. *
  98. * @param password 密码
  99. */
  100. public void setPassword(String password) {
  101. this.password = password == null ? null : password.trim();
  102. }
  103.  
  104. /**
  105. * 获取邮箱
  106. *
  107. * @return email - 邮箱
  108. */
  109. public String getEmail() {
  110. return email;
  111. }
  112.  
  113. /**
  114. * 设置邮箱
  115. *
  116. * @param email 邮箱
  117. */
  118. public void setEmail(String email) {
  119. this.email = email == null ? null : email.trim();
  120. }
  121.  
  122. /**
  123. * 获取状态 1-正常,0-禁用,-1-删除
  124. *
  125. * @return status - 状态 1-正常,0-禁用,-1-删除
  126. */
  127. public Boolean getStatus() {
  128. return status;
  129. }
  130.  
  131. /**
  132. * 设置状态 1-正常,0-禁用,-1-删除
  133. *
  134. * @param status 状态 1-正常,0-禁用,-1-删除
  135. */
  136. public void setStatus(Boolean status) {
  137. this.status = status;
  138. }
  139.  
  140. /**
  141. * 获取添加时间
  142. *
  143. * @return create_time - 添加时间
  144. */
  145. public Integer getCreateTime() {
  146. return createTime;
  147. }
  148.  
  149. /**
  150. * 设置添加时间
  151. *
  152. * @param createTime 添加时间
  153. */
  154. public void setCreateTime(Integer createTime) {
  155. this.createTime = createTime;
  156. }
  157.  
  158. /**
  159. * 获取上次登陆时间
  160. *
  161. * @return last_login_time - 上次登陆时间
  162. */
  163. public Integer getLastLoginTime() {
  164. return lastLoginTime;
  165. }
  166.  
  167. /**
  168. * 设置上次登陆时间
  169. *
  170. * @param lastLoginTime 上次登陆时间
  171. */
  172. public void setLastLoginTime(Integer lastLoginTime) {
  173. this.lastLoginTime = lastLoginTime;
  174. }
  175.  
  176. /**
  177. * 获取上次登录IP
  178. *
  179. * @return last_login_ip - 上次登录IP
  180. */
  181. public String getLastLoginIp() {
  182. return lastLoginIp;
  183. }
  184.  
  185. /**
  186. * 设置上次登录IP
  187. *
  188. * @param lastLoginIp 上次登录IP
  189. */
  190. public void setLastLoginIp(String lastLoginIp) {
  191. this.lastLoginIp = lastLoginIp == null ? null : lastLoginIp.trim();
  192. }
  193.  
  194. /**
  195. * 获取登陆次数
  196. *
  197. * @return login_count - 登陆次数
  198. */
  199. public Integer getLoginCount() {
  200. return loginCount;
  201. }
  202.  
  203. /**
  204. * 设置登陆次数
  205. *
  206. * @param loginCount 登陆次数
  207. */
  208. public void setLoginCount(Integer loginCount) {
  209. this.loginCount = loginCount;
  210. }
  211. }

  UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.sfn.bms.system.mapper.UserMapper">
  4. <resultMap id="BaseResultMap" type="com.sfn.bms.system.model.User">
  5. <!--
  6. WARNING - @mbg.generated
  7. -->
  8. <id column="id" jdbcType="SMALLINT" property="id" />
  9. <result column="account" jdbcType="VARCHAR" property="account" />
  10. <result column="password" jdbcType="CHAR" property="password" />
  11. <result column="email" jdbcType="VARCHAR" property="email" />
  12. <result column="status" jdbcType="BIT" property="status" />
  13. <result column="create_time" jdbcType="INTEGER" property="createTime" />
  14. <result column="last_login_time" jdbcType="INTEGER" property="lastLoginTime" />
  15. <result column="last_login_ip" jdbcType="VARCHAR" property="lastLoginIp" />
  16. <result column="login_count" jdbcType="INTEGER" property="loginCount" />
  17. </resultMap>
  18. </mapper>

    (4)通用Service

    通用的Service,IService定义一些通用的方法

  1. package com.sfn.bms.common.service;
  2.  
  3. import org.springframework.stereotype.Service;
  4.  
  5. import java.util.List;
  6.  
  7. @Service
  8. public interface IService<T> {
  9.  
  10. List<T> selectAll();
  11.  
  12. T selectByKey(Object key);
  13.  
  14. int save(T entity);
  15.  
  16. int delete(Object key);
  17.  
  18. int batchDelete(List<String> list, String property, Class<T> clazz);
  19.  
  20. int updateAll(T entity);
  21.  
  22. int updateNotNull(T entity);
  23.  
  24. List<T> selectByExample(Object example);
  25. }

    其实现类BaseService

  1. package com.sfn.bms.common.service.impl;
  2.  
  3. import com.sfn.bms.common.service.IService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.transaction.annotation.Propagation;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import tk.mybatis.mapper.common.Mapper;
  8. import tk.mybatis.mapper.entity.Example;
  9.  
  10. import java.util.List;
  11.  
  12. @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
  13. public abstract class BaseService<T> implements IService<T> {
  14.  
  15. @Autowired
  16. protected Mapper<T> mapper;
  17.  
  18. public Mapper<T> getMapper() {
  19. return mapper;
  20. }
  21.  
  22. @Override
  23. public List<T> selectAll() {
  24. return mapper.selectAll();
  25. }
  26.  
  27. @Override
  28. public T selectByKey(Object key) {
  29. return mapper.selectByPrimaryKey(key);
  30. }
  31.  
  32. @Override
  33. @Transactional
  34. public int save(T entity) {
  35. return mapper.insert(entity);
  36. }
  37.  
  38. @Override
  39. @Transactional
  40. public int delete(Object key) {
  41. return mapper.deleteByPrimaryKey(key);
  42. }
  43.  
  44. @Override
  45. @Transactional
  46. public int batchDelete(List<String> list, String property, Class<T> clazz) {
  47. Example example = new Example(clazz);
  48. example.createCriteria().andIn(property, list);
  49. return this.mapper.deleteByExample(example);
  50. }
  51.  
  52. @Override
  53. @Transactional
  54. public int updateAll(T entity) {
  55. return mapper.updateByPrimaryKey(entity);
  56. }
  57.  
  58. @Override
  59. @Transactional
  60. public int updateNotNull(T entity) {
  61. return mapper.updateByPrimaryKeySelective(entity);
  62. }
  63.  
  64. @Override
  65. public List<T> selectByExample(Object example) {
  66. return mapper.selectByExample(example);
  67. }
  68. }

    (5)在UserService中使用BaseService中的通用方法

    让UserService接口继承IService接口

  1. package com.sfn.bms.system.service;
  2.  
  3. import com.sfn.bms.common.service.IService;
  4. import com.sfn.bms.system.model.User;
  5.  
  6. public interface UserService extends IService<User> {
  7.  
  8. }

    实现类UserServiceImpl

  1. package com.sfn.bms.system.service.impl;
  2.  
  3. import com.sfn.bms.common.service.impl.BaseService;
  4. import com.sfn.bms.system.model.User;
  5. import com.sfn.bms.system.service.UserService;
  6. import org.springframework.stereotype.Repository;
  7.  
  8. @Repository("userService")
  9. public class UserServiceImpl extends BaseService<User> implements UserService {
  10.  
  11. }

4.实现获取User信息的api接口

  (1)让Spring Boot扫描到Mapper接口

    在Spring Boot入口类中加入注解 @MapperScan("com.sfn.bms.system.mapper")

  1. package com.sfn.bms;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import tk.mybatis.spring.annotation.MapperScan;
  6.  
  7. @SpringBootApplication
  8. @MapperScan("com.sfn.bms.system.mapper")
  9. public class BmsApplication {
  10.  
  11. public static void main(String[] args) {
  12. SpringApplication.run(BmsApplication.class, args);
  13. }
  14.  
  15. }

  (2)新建UserController

  1. package com.sfn.bms.system.controller;
  2.  
  3. import com.github.pagehelper.PageHelper;
  4. import com.github.pagehelper.PageInfo;
  5. import com.sfn.bms.system.model.User;
  6. import com.sfn.bms.system.service.UserService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import java.util.List;
  12.  
  13. @Controller
  14. public class UserController {
  15. @Autowired
  16. UserService userService;
  17.  
  18. @GetMapping("/query")
  19. @ResponseBody
  20. public List<User> getUserList(){
  21. PageHelper.startPage(1,5);
  22. List<User> list = userService.selectAll();
  23. PageInfo<User> pageInfo = new PageInfo<User>(list);
  24. List<User> rs = pageInfo.getList();
  25. return rs;
  26. }
  27. }

  运行项目

  访问 http://localhost:8080/query

  Druid监控

 

相关代码 地址

Spring boot后台搭建一使用MyBatis集成Mapper和PageHelper的更多相关文章

  1. Spring boot后台搭建二集成Shiro实现用户验证

    上一篇文章中介绍了Shiro 查看 将Shiro集成到spring boot的步骤: (1)定义一个ShiroConfig,配置SecurityManager Bean,SecurityManager ...

  2. Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题

    按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...

  3. Spring Boot系列教程八: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...

  4. Spring Boot系列教程十一: Mybatis使用分页插件PageHelper

    一.前言 上篇博客中介绍了spring boot集成mybatis的方法,基于上篇文章这里主要介绍如何使用分页插件PageHelper.在MyBatis中提供了拦截器接口,我们可以使用PageHelp ...

  5. Spring boot后台搭建二集成Shiro权限控制

    上一篇文章,实现了用户验证 查看,接下来实现下权限控制 权限控制,是管理资源访问的过程,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等 Apache Shir ...

  6. Spring boot后台搭建二集成Shiro添加Remember Me

    上一片文章实现了用户验证  查看 当用户成功登录后,关闭浏览器,重新打开浏览器访问http://localhost:8080,页面会跳转到登录页,因为浏览器的关闭后之前的登录已失效 Shiro提供了R ...

  7. Spring boot后台搭建二为Shiro权限控制添加缓存

    在添加权限控制后,添加方法 查看 当用户访问”获取用户信息”.”新增用户”和”删除用户”的时,后台输出打印如下信息 , Druid数据源SQL监控 为了避免频繁访问数据库获取权限信息,在Shiro中加 ...

  8. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper

    首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...

  9. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

随机推荐

  1. robot framework 笔记(三),RF安装

    背景: 本来robot framework的安装应该放在一开始写的,因写博客的时候已经装过了,恰巧重装系统又重装了一遍RF RF推荐使用python2, 使用3的话会遇到一些页面非友好的问题 需要的安 ...

  2. computed配合watch监听对象数据

  3. (转)接口测试工具Postman使用实践

    一.接口定义 软件不同部分之间的交互接口.通常就是所谓的API――应用程序编程接口,其表现的形式是源代码. —— [ 百度百科 ]我们常说的接口一般指两种:(1)API:应用程序编程接口.程序间的接口 ...

  4. node 日志 log4js 错误日志记录

    SET DEBUG=mylog:* & npm start 原文出处:http://blog.fens.me/nodejs-log4js/ 1. 默认的控制台输出 我们使用express框架时 ...

  5. php+tcpdf如何把生成的pdf文件保存在服务端

    tcpdf组件目前应用得非常广泛,但是对于如何把生成的pdf文件自动保存在服务端却很少有人提及.让我们先来看看标准输出代码:   //服务器存档模式 $pdf->Output('output.p ...

  6. 用于未处理异常错误的.NET框架清理工具

    当你启动某些程序时,会收到与此错误类似的未处理异常错误:Unhandled e0434f4dh exception at 7c81eb33h.此问题是由于.NET框架未正确安装或.NET框架系统中的另 ...

  7. dbt 0.14.0 发布

    以下内容来自官方博客,新的功能还是很不错的,后边尝试使用下. 参考资料:https://blog.fishtownanalytics.com/dbt-v0-14-0-better-serving-ou ...

  8. 2-STM32+W5500+GPRS(2G)基础篇-(W5500-学习说明)

    https://www.cnblogs.com/yangfengwu/p/11220042.html 定版: 这一节先直接说明怎么把官方的源码应用在我做的这块开发板上 https://www.w550 ...

  9. 虚拟机,安装tools时出现“安装程序无法继续解决

    报错:虚拟机安装了win10,安装tools时出现“安装程序无法继续.Microsoft Runtime DLL安装程序未能安装” 解决步骤: 双击安装程序,在它报以上错时不要点确定 这个时候按下窗口 ...

  10. Centos 7配置nginx反向代理负载均衡集群

    一,实验介绍 利用三台centos7虚拟机搭建简单的nginx反向代理负载集群, 三台虚拟机地址及功能介绍 192.168.2.76    nginx负载均衡器 192.168.2.82    web ...