Spring Boot2.x-08Spring Boot2.1.2 整合 Mybatis1.3.2 + 通用Mapper2.1.4 + PageHelper1.2.10 + Druid 1.1.10
文章目录
- 概述
- 整合 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相关推荐
- spring Boot 2 基础篇 。内含 整合一个spring boot 的 小案例
目录 springBoot2基础篇 前言与开发环境 一.快速创建Boot项目 1.使用spring提供的快速构建 2.基于maven的手动构建 3.在Idea中隐藏指定文件/文件夹 二.SpringB ...
- springmvc+spring+mybatis基于soa架构进行框架整合思路分析
springmvc也可以初始化一个容器,因此不必须在表现层整合spring. service打的是war包,其他关联的工程如interface,pojo,dao等最终的形式会被打为一个jar包,会放到 ...
- java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...
一.缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象.所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从 ...
- Spring Cloud 2.x系列之Feign整合断路器监控Hystrix Dashboard
SVN多版本库环境的搭建 OAuth 2.0是什么?看这篇文章就够了. 前端 Java Python等资源合集大放送 Ribbon可以整合整合断路器监控Hystrix Dashboard,Feign也 ...
- Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...
- druid 多数据源_Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置. 其实关于多数据源,我的态度还是和之前一样,复杂的就直接上 ...
- Spring Cloud【Finchley】-11Feign项目整合Hystrix监控
文章目录 概述 整合步骤 Step1.添加 spring-cloud-starter-netflix-hystrix Step2. 启动类增加@EnableCircuitBreaker或者@Enabl ...
- spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?
Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...
- Spring.NET教程(二十)——整合Quartz.NET(应用篇)
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中.它提供了巨大的灵活性而不牺牲 ...
最新文章
- 深圳杯---深圳市生活垃圾处理社会总成本分析
- 美国人的网站推广方式千奇百怪
- MS SQLServer2000中在还原备份文件时出现的奇怪问题.
- excel批量转换日期格式,将yyyymmdd类型日期转换成yyyy-mm-dd等日期类型方法
- 【数据结构与算法】之连通网络的操作次数的算法
- 数据结构之平衡树:红黑树的介绍与Python代码实现——17
- UI设计干货素材|如何正确使用直观打折数字使画面更饱满更具促销感!
- matplotlib 横坐标只显示整数_面试题系列 (168) matplotlib条形图绘制
- 4000元性价比主机
- python入门基础系列八_03python—9个基础常识-python小白入门系列
- 信念很简单,把书念下去,然后走出去,不枉活一世 —转自动化所一篇博士论文致谢...
- VJC案例-走五角星
- 格力手机2刷机 格力手机二代刷机 GREE G0215D刷机教程
- 天地图和谷歌地图静态图像素坐标和经纬度坐标互转
- php元素周期表,元素周期表 - 理视天下 - 简单学习网论坛_中高考学习交流论坛_中学生学习论坛 - Powered by phpwind...
- win7右键反应特别慢的问题
- POJ 2856 Y2K Accounting Bug【简单暴力】
- Halcon生成标定描述文件
- k线图 TradingVeiw --简介篇
- 04-0006 MATLAB 弹幕壁纸
热门文章
- EventBus3.0 List事件遇到的坑
- java servletconfig_ServletConfig中的方法
- anaconda 运行路径
- 12. Leetcode 350. 两个数组的交集 II (数组-分离双指针)
- 机器学习笔记 (聚类) 层次聚类 Agglomerative Clutsering(Single-linkage、Complete-linkage,Group average)
- 深度学习核心技术精讲100篇(四十七)-做推荐系统之余,我们该思考什么?
- mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...
- TensorFlow2简单入门-三维张量
- 【图像处理opencv】_简单绘图
- 【android4.3】记一次完整的android源码截屏事件的捕获(不同于网上的老版本)