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,一经查实,立即删除!

相关文章

ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子

//这个是类ORBextractor的带参构造函数&#xff0c;并且使用初始化列表对该类中的这5个变量赋值 ORBextractor::ORBextractor(int _nfeatures, float _scaleFactor, int _nlevels,int _iniThFAST, int _minThFAST):nfeatures(_nfeatures), scaleFactor(_scaleFactor), nlevels(…

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

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

jsoncpp-src-0.5.0.tar.gz 源码错误!!!!

近期在做毕设&#xff0c;使用到了JsonCpp0.5.0版本号的源码&#xff01;依照网上的安装配置教程&#xff0c;搭建好环境后就能够使用了&#xff01; 在这里就不浪费空间去将怎样搭建开发环境了&#xff01;请大家去google一下就好了&#xff01;在解析一个Json文件时。程序总是…

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

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

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

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

Python多线程3:queue

queue模块实现了多生产者。多消费者队列。在多线程环境下&#xff0c;该队列能实现多个线程间安全的信息交换。 queue模块介绍 模块实现了3种类型的队列&#xff0c;差别在于队列中条目检索的顺序不同。在FIFO队列中。依照先进先出的顺序检索条目。在LIFO队列中&#xff0c;最后…

微信小程序教程02:App(Object)和Page(Object) 构造器介绍

在/app.js中&#xff0c;有方法App&#xff0c;它的作用是注册整个小程序的应用&#xff0c;其中可以传入一些配置&#xff0c;或者存储全局状态。 App(Object) 构造器生命周期 属性类型描述onLaunchFunction在小程序初始化时触发&#xff0c;全局仅触发一次onShowFunction小程…

阿里云.log

申请证书审核失败的原因及处理方法;( 新添加站点 免费版 SSL 网页内不能有 HTTPS的连接&#xff1b;更多点击连接) 转载于:https://www.cnblogs.com/q1104460935/p/8287377.html

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;用于打造物流仓储上下…

ORB-SLAM2-金字塔求解-特征点的提取-描述子的计算

//这个成员函数重载了函数括号运算符&#xff0c;让他具有函数的特点 //但是还不知道在其他程序块是如何应用这块代码的。 //InputArray和OutputArray是opencv中的两个函数接口 void ORBextractor::operator()( InputArray _image, InputArray _mask, vector<KeyPoint>&a…

am335x uboot, kernel 编译

一、设置环境变量// 写在家目录下面的 .bashrc 里面export KERNEL_PATH~/aplex/kernel3.2.0 // kernel 路径export UBOOT_PATH~/aplex/uboot2011.09 // u-boot 路劲export ROOTFS_PATH~/aplex/filesystemexport TOOLFS_PATH~/aplex/toolsexport ARCHarm …

php+ajax简单实现跨域(http+https)请求调用

当一个网站 a站 需要调用另一个网站 b站 列表文章时 比如&#xff1a;www.a123.com 调用 www.b456.com 文章 在 a站 建立php文件获取 b站 资源文章到本地后&#xff0c;再传递a站前端 在网站 b456 下的文件为 <ul class"ls_wz"> <li><a href"#&q…

ORB-SLAM2中MapPoints的描述子的计算

//我们在从金字塔的图像中获取特征点时为每一个特征点计算了描述子 //现在看看如何计算一个空间的地图点的描述子 void MapPoint::ComputeDistinctiveDescriptors() {// Retrieve all observed descriptorsvector<cv::Mat> vDescriptors;//获取到某一个地图点可以被哪些关…

HDU:4185-Oil Skimming

Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There are large slicks of crude oil floa…

域控制器情况分析

域控制器情况分析 1、Windows Server 的 Foundation、Standard、Enterprise 以及 Datacenter 版本号既可作为源server&#xff0c;也可作为目标server。仅支持将 Foundation Server 版本号作为受限方案中的目标server。在使用 Foundation Server 作为目标server之前&#xff0c…

Linux基础命令---su

su临时切换身份到另外一个用户&#xff0c;使用su切换用户之后&#xff0c;不会改变当前的工作目录&#xff0c;但是会改变一些环境变量。此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。1、语法su [选项] [参数]2、选项列表--help显示…

在Ubuntu 16.04 上安装和卸载matlab 2018b(Install and uninstall matlab 2018b on ubuntu)

1.安装2018b可以参考下面两篇文章 https://www.ph0en1x.space/2018/04/23/ubuntu_matlab/ https://blog.csdn.net/qq_32892383/article/details/79670871 2.卸载2018b 我的默认安装在 /usr/local/MATLAB $ sudo rm -r /usr/local/MATLAB $ cd ~ $ ll (这个时候可以看到隐…

04.openssl编程——哈希表

4.1 哈希表在一般的数据结构如线性表和树中&#xff0c;记录在结构中的相对位置与记录的关键字之间不存在确定的关系&#xff0c;在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上&#xff0c;查找的效率与比较次数密切相关。理想的情况是能…