文章目录

  • 概述
  • 整合 MyBatis
  • 整合 通用Mapper2.1.4及 PageHelper1.2.10
    • 添加依赖
    • 通用mapper 编写
    • application.yml增加配置
    • 集成验证测试
  • 整合Druid (纯配置文件)
    • 添加依赖
    • application.yml增加配置
    • 集成验证测试
  • 代码

概述

通用Mapper: https://gitee.com/free/Mapper/wikis/Home

分页插件 pagehelper: https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

整合官方指导:https://github.com/abel533/MyBatis-Spring-Boot

不过版本较低,我们这里升级下Spring Boot等框架的版本,同时整合下阿里巴巴的Druid连接池 。

项目结构如下

整合 MyBatis

参考上篇博文 Spring Boot2.x-07Spring Boot2.1.2整合Mybatis


整合 通用Mapper2.1.4及 PageHelper1.2.10

添加依赖

既然是spring boot项目,肯定是添加xxx-starter了. 非Spring Boot项目可以添加单独的jar包。

<!--通用Mapper插件 文档地址:https://gitee.com/free/Mapper/wikis/Home 同pagehelper 同一个作者刘增辉大神开源 -->
<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.4</version>
</dependency><!-- 分页插件 pagehelper 文档地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.10</version>
</dependency>

通用mapper 编写

package com.artisan.common;import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/*** * @author yangshangwei** @param <T> 通用mapper 创建CommonMapper接口继承Mapper* * * 通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及 Example 相关的单表操作。* 通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作.* PageHelper则提供通用的分页查询功能,使用它们可以很方便的进行开发,可以节省开发人员大量的时间* * 通用Mapper的GIT地址: https://gitee.com/free/Mapper分页插件的GIT地址: https://github.com/pagehelper/Mybatis-PageHelper* */
public interface CommonMapper<T> extends Mapper<T>, MySqlMapper<T> {}

application.yml增加配置

#mappers 多个接口时逗号隔开
mapper: mappers: com.artisan.common.CommonMapper   # 通用dao ,是个类,不是包名not-empty: false   # 设置以后,会去判断 insert 和 update 中字符串类型!=''identity: MYSQL#pagehelper
pagehelper: # 配置使用哪种数据库语言,不配置的话pageHelper也会自动检测,这里使用的mysql。helper-dialect: mysql# 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询reasonable: true # 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页supportMethodsArguments: true# 为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。params: count=countSql

集成验证测试

注意看注释,就不一一说明了。

package com.artisan.mapper;import java.util.List;import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import com.artisan.common.CommonMapper;
import com.artisan.model.Artisan;
/*** * @author yangshangwei*   * 增加@Mapper这个注解之后,Spring 启动时会自动扫描该接口,这样就可以在需要使用时直接注入 Mapper 了* * 使用通用mapper,在Mapper接口层继承刚才的CommonMapper接口,这样单表的增删改查就实现了,无须xml* * 当然了,可以使用内置通用mapper* * 也可以使用xml 或者注解*/@Mapper
public interface ArtisanMapper  extends CommonMapper<Artisan>{//自己来编写xml,不适用内置的方法List<Artisan>  selectAllArtisansByXml();//自己来注解,不适用内置的方法@Select("select id,name,sex from artisan")List<Artisan> selectAllArtisansByAnno();
}

接口中的两个方法是为了演示使用xml或者注解添加的方法,其实接口继承CommonMapper<Artisan>就可以通过CommonMapper内置的方法实现对单表的CRUD了。

接下来我们来验证下继承CommonMapper内置的方法实现对单表的CRUD

service层

package com.artisan.service;import java.util.List;import com.artisan.model.Artisan;public interface ArtisanService {List<Artisan> getAllArtisanList();List<Artisan> getArtisanListByPage(int pageNum , int pageSize);}

实现类

package com.artisan.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.artisan.mapper.ArtisanMapper;
import com.artisan.model.Artisan;
import com.artisan.service.ArtisanService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;import lombok.extern.slf4j.Slf4j;@Service
@Slf4j
public class ArtisanServiceImpl implements ArtisanService {@Autowiredprivate ArtisanMapper artisanMapper;/*** 调用 通用mapper提供的方法*/@Overridepublic List<Artisan> getAllArtisanList() {return artisanMapper.selectAll();}@Overridepublic List<Artisan> getArtisanListByPage(int pageNum, int pageSize) {// 分页插件的使用 第一个参数是当前页 第二个参数是每页显示的条数// 引用分页插件以后,Mybatis分页会变得特别简单,// 需要注意的是,在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,// 紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc");List<Artisan> artisanList = artisanMapper.selectAll();// 需要注意的是查询语句必须紧跟这一句,且只能使用一次,意思就是如果还有一个分页查询需要再定义一次PageHelper.startPage(pageNum, pageSize)// 用PageInfo对结果进行包装,返回// PageInfo page = new PageInfo(artisanList);// PageInfo<Artisan> pageInfo = new PageInfo<Artisan>(artisanList);final PageInfo<Artisan> pageInfo = PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc").doSelectPageInfo(() -> this.artisanMapper.selectAll());log.info("[lambda写法] - [分页信息] - [{}]", pageInfo.toString());PageHelper.startPage(pageNum, pageSize).setOrderBy("id desc");final PageInfo<Artisan> artisanPageInfo = new PageInfo<>(this.artisanMapper.selectAll());log.info("[普通写法] - [{}]", artisanPageInfo);return artisanList;}}

控制层

package com.artisan.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import com.artisan.model.Artisan;
import com.artisan.result.CodeMsg;
import com.artisan.result.Result;
import com.artisan.service.ArtisanService;@RestController
public class ArtisanController {@Autowiredprivate ArtisanService artisanService;// 正常情况@GetMapping("/artisans")public Result<List<Artisan>> selectAllArtisan() {return Result.success(artisanService.getAllArtisanList());}// 模拟异常情况@GetMapping("/artisansError")public Result<List<Artisan>> selectAllArtisanError() {return Result.error(CodeMsg.SERVER_ERROR);}// 分页 http://localhost:8089/artisansPage?pageNum=2&pageSize=3@GetMapping("/artisansPage")public Result<List<Artisan>> selectPageArtisan(int pageNum, int pageSize) {return Result.success(artisanService.getArtisanListByPage(pageNum, pageSize));}}

启动spring boot ,访问 http://localhost:8089/artisans (port在配置文件中指定为8089)

http://localhost:8089/artisansPage?pageNum=2&pageSize=3

当然了,也可以继续使用xml或者注解来使用mybatis ,

mapper映射文件(xml方式时使用,注解就用不到了)


整合Druid (纯配置文件)

添加依赖

<!--阿里巴巴数据源 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version>
</dependency>

application.yml增加配置

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver # JDBC连接Mysql6以上com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/artisan?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: roottype: com.alibaba.druid.pool.DruidDataSourcedruid:   # 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大initial-size: 5min-idle: 5max-active: 20max-wait: 60000 # 配置获取连接等待超时的时间time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒min-evictable-idle-time-millis: 300000   # 配置一个连接在池中最小生存的时间,单位是毫秒validation-query: SELECT 1 FROM DUALtest-while-idle: true # 当连接空闲时,是否执行连接测试test-on-borrow: false # 当从连接池借用连接时,是否测试该连接test-on-return: false # 在连接归还到连接池时是否测试该连接# 打开PSCache,并且指定每个连接上PSCache的大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20#  配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 ,不能用log4j,不然报错:Failed to bind properties under 'spring.datasource.druid' to javax.sql.DataSource:filters:  stat,wall,slf4juse-global-data-source-stat: true# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connect-properties:  druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# 配置监控服务器stat-view-servlet:login-username: artisanlogin-password: artisanreset-enable: falseurl-pattern: /druid/*# 添加IP白名单#allow:# 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高#deny:web-stat-filter:# 添加过滤规则url-pattern: /*# 忽略过滤格式exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"

集成验证测试

项目启动的时候也可以看到初始化信息

监测页面:http://ip:port/druid/index.html

因为这里配置了用户名和密码,先访问 http://localhost:8089/druid/login.html

访问几次数据,然后就可以看到了


代码

见github: https://github.com/yangshangwei/springbootMybatisCommonMapperAndPageheper

Spring Boot2.x-08Spring Boot2.1.2 整合 Mybatis1.3.2 + 通用Mapper2.1.4 + PageHelper1.2.10 + Druid 1.1.10相关推荐

  1. spring Boot 2 基础篇 。内含 整合一个spring boot 的 小案例

    目录 springBoot2基础篇 前言与开发环境 一.快速创建Boot项目 1.使用spring提供的快速构建 2.基于maven的手动构建 3.在Idea中隐藏指定文件/文件夹 二.SpringB ...

  2. springmvc+spring+mybatis基于soa架构进行框架整合思路分析

    springmvc也可以初始化一个容器,因此不必须在表现层整合spring. service打的是war包,其他关联的工程如interface,pojo,dao等最终的形式会被打为一个jar包,会放到 ...

  3. java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...

    一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...

  4. Spring Cloud 2.x系列之Feign整合断路器监控Hystrix Dashboard

    SVN多版本库环境的搭建 OAuth 2.0是什么?看这篇文章就够了. 前端 Java Python等资源合集大放送 Ribbon可以整合整合断路器监控Hystrix Dashboard,Feign也 ...

  5. Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

    关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...

  6. druid 多数据源_Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

    关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...

  7. Spring Cloud【Finchley】-11Feign项目整合Hystrix监控

    文章目录 概述 整合步骤 Step1.添加 spring-cloud-starter-netflix-hystrix Step2. 启动类增加@EnableCircuitBreaker或者@Enabl ...

  8. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...

  9. Spring.NET教程(二十)——整合Quartz.NET(应用篇)

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中.它提供了巨大的灵活性而不牺牲 ...

最新文章

  1. 深圳杯---深圳市生活垃圾处理社会总成本分析
  2. 美国人的网站推广方式千奇百怪
  3. MS SQLServer2000中在还原备份文件时出现的奇怪问题.
  4. excel批量转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法
  5. 【数据结构与算法】之连通网络的操作次数的算法
  6. 数据结构之平衡树:红黑树的介绍与Python代码实现——17
  7. UI设计干货素材|如何正确使用直观打折数字使画面更饱满更具促销感!
  8. matplotlib 横坐标只显示整数_面试题系列 (168) matplotlib条形图绘制
  9. 4000元性价比主机
  10. python入门基础系列八_03python—9个基础常识-python小白入门系列
  11. 信念很简单,把书念下去,然后走出去,不枉活一世 —转自动化所一篇博士论文致谢...
  12. VJC案例-走五角星
  13. 格力手机2刷机 格力手机二代刷机 GREE G0215D刷机教程
  14. 天地图和谷歌地图静态图像素坐标和经纬度坐标互转
  15. php元素周期表,元素周期表 - 理视天下 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
  16. win7右键反应特别慢的问题
  17. POJ 2856 Y2K Accounting Bug【简单暴力】
  18. Halcon生成标定描述文件
  19. k线图 TradingVeiw --简介篇
  20. 04-0006 MATLAB 弹幕壁纸

热门文章

  1. EventBus3.0 List事件遇到的坑
  2. java servletconfig_ServletConfig中的方法
  3. anaconda 运行路径
  4. 12. Leetcode 350. 两个数组的交集 II (数组-分离双指针)
  5. 机器学习笔记 (聚类) 层次聚类 Agglomerative Clutsering(Single-linkage、Complete-linkage,Group average)
  6. 深度学习核心技术精讲100篇(四十七)-做推荐系统之余,我们该思考什么?
  7. mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...
  8. TensorFlow2简单入门-三维张量
  9. 【图像处理opencv】_简单绘图
  10. 【android4.3】记一次完整的android源码截屏事件的捕获(不同于网上的老版本)