spring-boot 速成(8) 集成druid+mybatis

spring-boot与druid、mybatis集成(包括pageHelper分页插件), 要添加以下几个依赖项:

    compile('mysql:mysql-connector-java:6.0.5')compile('tk.mybatis:mapper-spring-boot-starter:1.1.1')compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0')compile('com.github.pagehelper:pagehelper-spring-boot-starter:1.1.1')compile('com.alibaba:druid:1.0.28')

 

一、集成druid

1.1 编写自定义属性类

package com.cnblogs.yjmyzz.druid;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "druid")
@Data
public class DruidProperties {private String url;private String username;private String password;private String driverClass;private int maxActive;private int minIdle;private int initialSize;private boolean testOnBorrow;
}

注:这里只列出了主要属性,其它属性如果需要,可自行添加

 

1.2 创建自定义配置类

package com.cnblogs.yjmyzz.druid;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;
import java.sql.SQLException;@Configuration
@EnableConfigurationProperties(DruidProperties.class)
@ConditionalOnClass(DruidDataSource.class)
@ConditionalOnProperty(prefix = "druid", name = "url")
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
public class DruidAutoConfiguration {@Autowiredprivate DruidProperties properties;@Beanpublic DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(properties.getUrl());dataSource.setUsername(properties.getUsername());dataSource.setPassword(properties.getPassword());if (properties.getInitialSize() > 0) {dataSource.setInitialSize(properties.getInitialSize());}if (properties.getMinIdle() > 0) {dataSource.setMinIdle(properties.getMinIdle());}if (properties.getMaxActive() > 0) {dataSource.setMaxActive(properties.getMaxActive());}dataSource.setTestOnBorrow(properties.isTestOnBorrow());try {dataSource.init();} catch (SQLException e) {throw new RuntimeException(e);}return dataSource;}
}  

注1:如果多数据源的,参考上面的代码自行修改

注2:上面这二个类,可以抽出来放到公用类库里,方便以后复用。 

 

1.3 添加 META-INF/spring.factories

参考如下内容(告诉spring-boot,如何自动加载配置)

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cnblogs.yjmyzz.druid.DruidAutoConfiguration

 

 

1.4 application.yml中配置

druid:url: jdbc:mysql://localhost:3306/study?useSSL=falsedriver-class: com.mysql.jdbc.Driverusername: rootpassword: ***initial-size: 1min-idle: 1max-active: 20test-on-borrow: true

 

二、集成mybatis

2.1 常规的mapper/xml配置

这个跟常规使用mybatis并没有什么不同,参考上图的结构

 

2.2 抽象一个通用Mapper

package com.cnblogs.yjmyzz.util;import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {}

写这个通用Mapper是为了后面写crud代码更简单,其它具体的XXXMapper都应该继承它,类似:

package com.cnblogs.yjmyzz.dao.mapper;import com.cnblogs.yjmyzz.dao.model.City;
import com.cnblogs.yjmyzz.util.MyMapper;public interface CityMapper extends MyMapper<City> {
}

 

2.3 application.yml配置

mybatis:type-aliases-package: com.cnblogs.yjmyzz.service.daomapper-locations: classpath:mapper/*.xmlmapper:mappers:- com.cnblogs.yjmyzz.util.MyMappernot-empty: falseidentity: MYSQLpagehelper:helperDialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSql

 

还有一个常见问题:如何在调试时输出SQL语句,以及屏蔽掉一些不需要的日志?可参考下面的配置

logging:level:root: DEBUGtk.mybatis: DEBUGcom.alibaba.dubbo: ERRORorg.apache.zookeeper: ERRORfile: "/var/log/application/dubbo-provider.log"

 

最后使用的地方,代码就跟常规代码完全一样了,参考下面:

package com.cnblogs.yjmyzz.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.cnblogs.yjmyzz.dao.mapper.CityMapper;
import com.cnblogs.yjmyzz.dao.model.City;
import com.cnblogs.yjmyzz.service.api.DemoService;
import com.cnblogs.yjmyzz.service.api.vo.CityVO;
import com.github.pagehelper.PageHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;import java.util.ArrayList;
import java.util.List;/*** Created by 菩提树下的杨过(http:/yjmyzz.cnblogs.com) on 2017/5/21.*/
@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);@AutowiredCityMapper cityMapper;@Overridepublic List<CityVO> getCityList(int pageIndex, int pageSize) {PageHelper.startPage(pageIndex, pageSize);//设置分页参数List<City> list = cityMapper.selectAll();com.github.pagehelper.PageInfo page = new com.github.pagehelper.PageInfo<>(list);//取页面信息List<CityVO> result = new ArrayList<>();if (!CollectionUtils.isEmpty(list)) {for (City c : list) {CityVO v = new CityVO();v.setCityName(c.getName());v.setProvinceName(c.getState());result.add(v);}}logger.info("pageInfo=> page:" + page.getPageNum() + "/" + page.getPages());return result;}}

 

文中的示例代码,已经托管在github上,地址:https://github.com/yjmyzz/spring-boot-dubbo-demo

转载于:https://www.cnblogs.com/yjmyzz/p/spring-boot-integrate-with-mybatis-and-druid-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们怎样确保从大数据计算中获得价值

我们怎样确保从大数据计算中获得价值 支持大数据方案并不是在硬件以及软件层次终止&#xff0c;企业要想真正地从大数据中受益&#xff0c;领导者必须改变思考与对待信息的方式。 我们怎样确保从大数据计算中获得价值&#xff1f; 当所有可用数据都可用时&#xff0c;大数据…

青海省多地日降水量突破历史极值

受高原槽和西北冷空气的共同影响&#xff0c;青海省海西州茫崖等多地日降水量突破历史极值。 李万花 摄 受高原槽和西北冷空气的共同影响&#xff0c;青海省海西州茫崖等多地日降水量突破历史极值。 李万花 摄 中新网西宁1月18日电 (孙睿 赵海梅)记者18日从青海省气象局获悉&am…

ORB-SLAM2中四叉树管理特征点

当从图像金字塔中的每一层图像上提取特征点之后&#xff0c;都要先用四叉树技术对这些特征点进行管理 //该类中定义了四叉树创建的函数以及树中结点的属性 //bool bNoMore&#xff1a; 根据该结点中被分配的特征点的数目来决定是否继续对其进行分割 //DivisionNode()&#xff…

SharePoint Search之(七)Search result- 结果源

在使用搜索引擎的时候。非常多情况下&#xff0c;用户希望限定一下搜索范围&#xff0c;以便更加easy找到想要的结果。在SharePoint 2013的search里&#xff0c;也支持类似的功能&#xff0c;SharePoint 默认提供了几种范围&#xff1a; 在SharePoint&#xff0c;这个叫Search …

旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图

1 月 16 日&#xff0c;人工智能独角兽旷视科技发布了机器人战略&#xff0c;以及自 2018 年 4 月收购艾瑞思机器人&#xff0c;进军机器人领域的最新进展——智能协同大脑河图。在会上&#xff0c;旷视还大笔一挥&#xff0c;决定投入 20 亿元&#xff0c;用于打造物流仓储上下…

「JupyterLab」 Jupyter Notebook 新生代IDE模式页面

参考&#xff1a;Overview 安装&#xff1a; $ pip install jupyterlab 启动&#xff08;不是jupyter notebook&#xff09;&#xff1a; $ jupyter lab Jupyterlab中最好用的就是显示csv数据。CSV数据显示效果&#xff1a; 安装插件 jupyterlab是和jupyter notebook隔离的&…

PAT(乙级)1009

1009. 说反话 (20)给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a;测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&…

库存扣减问题

2019独角兽企业重金招聘Python工程师标准>>> 并发减库存 并发扣库存问题总结 库存扣减还有这么多方案&#xff1f; | 架构师之路 转载于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 问题 在企业网络到外部的连接方案中&#xff0c;要求不高的条件下可以是单出口。一旦该出口线路出现问题&#xff0c;整个企业网络就不能连接到外网了。为了使得企业网络到外网连接的高可用性&#xff0c;可以设置两个以上的出口&#xff0c;然而多个出口对…

java 的 CopyOnWriteArrayList类

初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList&#xff0c;是在研究JDBC的时候&#xff0c;每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的&#xff0c;为了证明这一点&#xff0c;贴两段代码&#xff0c;第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趋势!AI将进军了37%的企业

2019独角兽企业重金招聘Python工程师标准>>> 市场研究机构Gartner调查了全球89个国家的逾3,000名信息长&#xff08;CIO&#xff09;&#xff0c;显示有37%的企业已经或打算于近期内部署人工智能&#xff08;AI&#xff09;&#xff0c;在4年内成长270%。Gartner研究…

CMakeLists.txt编写规则

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四个子文件夹。 src文件夹用来存放所有的.cpp文件&#xff0c;include文件夹用来存储所有的.h文件&#xff0c; lib中存放生成的自己编写的共享库&#xff0c; bin中存放所有的可执行文件 用SET来设置.exe可执行文件和共享…

瓜子二手车发12月二手车价格:汉兰达奥德赛CR-V保值率居首

中新网1月22日电 日前&#xff0c;基于海量个人对个人的二手车成交数据&#xff0c;瓜子二手车公布了12月全国及多个核心城市的二手车交易“瓜子价”数据。数据显示&#xff0c;2018年12月全国瓜子二手车严选直卖签约均价为87934元&#xff0c;环比上涨0.16%&#xff0c;同比上…

概率分布之间的距离度量以及python实现(三)

概率分布之间的距离&#xff0c;顾名思义&#xff0c;度量两组样本分布之间的距离 。 1、卡方检验 统计学上的χ2统计量&#xff0c;由于它最初是由英国统计学家Karl Pearson在1900年首次提出的&#xff0c;因此也称之为Pearson χ2&#xff0c;其计算公式为 (i1&#xff0c;2&…

C++求职题

文章大部分内容转载https://www.cnblogs.com/lanxuezaipiao/p/4127904.html 1.冒泡排序法&#xff1a; 如果有N个数字需要排序&#xff0c;那么需要进行(N-1)趟循环&#xff0c;第i趟循环需要对比的次数为(N-i)。所以可以用双重循环&#xff0c;外层循环用于控制循环的趟数&a…

封装一个ViewPager真正的实现图片无限循环滚动带导航点

效果图&#xff1a; 大家在写项目的过程中常常会碰到须要实现Viewpager里面载入几张图片来循环自己主动轮播的效果&#xff0c;假设不封装一下的话代码分散在activity里面会显得非常乱。并且也不利于我们下次复用&#xff0c;所以这里我把viewpager的相关代码抽取出来放在了一个…

毕业论文页眉页脚页码插入

用word这么多年&#xff0c;第一次完整的操作了一遍页眉页脚页码的插入过程&#xff0c;其实三者都要要求奇偶页不同 1.页面布局-》右下角箭头-》版式-》奇偶页不同 因为文章不同的部分需要插入不同的页眉页脚页码&#xff0c;所以要在不同的部分插入分解符断开它们的连接 2、…

巴黎市中心降下2019年第一场雪

当地时间1月22日&#xff0c;法国巴黎市中心降下2019年第一场雪&#xff0c;气温也随之下降&#xff0c;街上的行人和车辆均有所减少。中新社记者 李洋 摄一对情侣在埃菲尔铁塔前合影留念。无家可归者在长椅上睡觉。游客在卢浮宫前拍照。

Echarts实现隐藏x轴,y轴,刻度线,网格

"yAxis": [{//就是一月份这个显示为一个线段&#xff0c;而不是数轴那种一个点点"show" : true,"boundaryGap": true,"type": "category","name": "时间","data": ["1月", "2…