亲宝软件园·资讯

展开

MyBatis-Plus Druid配置 MyBatis-Plus+Druid配置及应用详解

whatkevin1984 人气:15
想了解MyBatis-Plus+Druid配置及应用详解的相关内容吗,whatkevin1984在本文为您仔细讲解MyBatis-Plus Druid配置的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:MyBatis-Plus,Druid配置,MyBatis-Plus,Druid,下面大家一起来学习吧。

Mybatis-Plus的配置

1.Maven插件

velocity-engine-core是mybatis-plus自动生成代码所依赖的模板(不用自动生成代码功能可不用)

  <dependency>
  <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.0.6</version>
 </dependency>
 <dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.2</version>
 </dependency>

2.application.properties配置

和普通mysql配置相同,没有额外配置

#mysql 连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

3.Mapper相关注解

@MapperScan中直接mapper文件所在的package

@SpringBootApplication
@EnableTransactionManagement
@EnableEurekaClient
@MapperScan("com.example.demo.dao")
public class DemoApplication {

 public static void main(String[] args) {
 SpringApplication.run(DemoApplication.class, args);
 }
}

4.创建数据库表


5.创建JavaBean(推荐使用Lombok插件方式) - Model层

@Data
@TableName("area")
@ToString(callSuper=true, includeFieldNames=true)
@AllArgsConstructor
@NoArgsConstructor
public class Area implements Serializable{
 
 private static final long serialVersionUID = 1L;
 private String id;
 private String name;
 private int sort; 
}

6.创建Mapper - DAO层

只有自定义SQL时,mapper中才有内容, 使用mybatis-plus自带CRUD语句或者构造器拼接语句时, mapper通常为空

public interface AreaMapper extends BaseMapper<Area> {
 
 //通过mybatis-plus提供的注解,直接自定义SQL
 @Select("select name from area where sort > ${sort}")
 List<String> getBySort2(@Param("sort")int sort);
}

8.创建逻辑接口 - Service层

public interface IAreaService {
 
 public Area getById(String id);
 
 public List<Area> selectAll();
 
 public int updateByPrimaryKeySelective(Area record);
 
 public int deleteByPrimaryKey(String id);
 
 public int insertSelective(Area record);
 
 public List<Area> getBySort();
 
 public List<String> getBySort2(int sort);

}

9.创建逻辑类 - Service层

Mybatis-Plus使用SQL的3种常见方法:
a. 使用mybatis-plus自带CRUD方法: 直接用mapper的自带方法
b. 使用mybatis-plus提供的条件构造器,拼接where条件
c. 使用@Select,@Update等注解, 自己写SQL+参数

@Service
public class AreaServiceImpl implements IAreaService {

 @Autowired
 public AreaMapper areaMapper;

 //使用mybatis-plus自带CRUD方法
 @Override
 public Area getById(String id) {
 return areaMapper.selectById(id);
 } 
 
 @Override
 public List<Area> selectAll() {
 return areaMapper.selectList(null);
 }
 
 @Override
 @Transactional
 public int updateByPrimaryKeySelective(Area record) {
 return areaMapper.updateById(record);
 }
 
 @Override
 public int deleteByPrimaryKey(String id) {
 return areaMapper.deleteById(id);
 }
 
 @Override
 public int insertSelective(Area record) {
 return areaMapper.insert(record);
 }
 
 //使用mybatis-plus提供的条件构造器,拼接条件
 @Override
 public List<Area> getBySort(){
 QueryWrapper<Area> queryWrapper = new QueryWrapper<>();
 queryWrapper.lambda().gt(Area::getSort, 40)
  .lt(Area::getSort, 80);
 return areaMapper.selectList(queryWrapper);
 }
 
 //通过mybatis-plus提供的注解,直接自定义SQL(定义在mapper中)
 @Override
 public List<String> getBySort2(int sort){
 return areaMapper.getBySort2(sort);
 
 }

}

10.创建接口 - Controller层

@RestController
@RequestMapping("/area")
public class AreaController {

 @Autowired
 private IAreaService areaService;
 
 @Autowired
 private DbpropertiesService dbproService;
 
 @Autowired
 private Area area;
 
 @Resource
 protected HttpServletRequest request;

 @RequestMapping(value = "/getAreaInfo",method=RequestMethod.GET)
 public Area getAreaInfo(@RequestParam(value="id") String id) {
 area = areaService.getById(id);
 return area;
 }
 
 @RequestMapping(value = "/getAreaAllInfo",method=RequestMethod.GET)
 public List<Area> getAreaInfo() {
 List<Area> arlist = areaService.selectAll();
 return arlist;
 }
 
 @RequestMapping(value ="/updateAreaName",method=RequestMethod.PUT)
 public int updateAreaInfo(@RequestParam(value="id") String id,@RequestParam(value="name",required=false) String name,@RequestParam(value="sort",required=false) Integer sort) {
 area.setId(id);
 area.setName(name); 
 area.setSort(sort);
 int ar = areaService.updateByPrimaryKeySelective(area);
 return ar;
 }
 
 @RequestMapping(value ="/deleteAreaName",method=RequestMethod.DELETE)
 public int deleteAreaInfo(@RequestParam(value="id") String id) {
 int ar = areaService.deleteByPrimaryKey(id);
 return ar;
 }
 
// @RequestMapping(value ="/insertAreaName",method=RequestMethod.POST)
// public int insertAreaInfo(@RequestParam(value="id") String id,@RequestParam(value="name",required=false) String name,@RequestParam(value="sort",required=false) Integer sort) {
// area.setId(id);
// area.setName(name); 
// area.setSort(sort);
// int ar = areaService.insertSelective(area);
// return ar;
// } 
 
 @RequestMapping(value ="/insertAreaName",method=RequestMethod.POST)
 public int insertAreaInfo(@RequestBody Area area) {
 int ar = areaService.insertSelective(area);
 return ar;
 }
 
 @RequestMapping(value ="/selectBySort",method=RequestMethod.GET)
 public List<Area> selectAreaSort() {
 List<Area> arList = areaService.getBySort();
 return arList;
 }
 
 @RequestMapping(value ="/selectBySort2",method=RequestMethod.GET)
 public List<String> selectAreaSort2(@RequestParam(value="sort") int sort) {
 List<String> arList = areaService.getBySort2(sort);
 return arList;
 }
}

参考文档:
https://mp.baomidou.com/

数据源datasource

数据源是数据库连接的规范接口

Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:

org.apache.tomcat.jdbc.pool.DataSource
 com.zaxxer.hikari.HikariDataSource
 org.apache.commons.dbcp.BasicDataSource
 org.apache.commons.dbcp2.BasicDataSource

在不指定数据源类型时, SpringBoot默认使用tomcat.jdbc

如果需要使用第三方数据源, 比如Druid, 步骤如下:

Druid的配置

1.Maven配置

 <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.3</version>
  </dependency>

2.application.properties配置

spring.datasource.type需要指定为Druid
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

其他的Druid自有属性,可以写在properties中也可以写在Druid的配置类中

@ConfigurationProperties(prefix = "spring.datasource")
public class DruidConfiguration {
 
 private String url;
 private String username;
 private String password;
 private String driverClassName;
 private int initialSize = 5;
 private int minIdle = 5;
 private int maxActive = 10;
 private int maxWait = 2;
 private int timeBetweenEvictionRunsMillis = 1000 * 60;
 private int minEvictableIdleTimeMillis = 1000 * 60 * 30;
 private String validationQuery;
 private boolean testWhileIdle = false;
 private boolean testOnBorrow = true;
 private boolean testOnReturn = false;
 private boolean poolPreparedStatements = false;
 private int maxPoolPreparedStatementPerConnectionSize = -1;
 private String filters;
 private boolean useGlobalDataSourceStat = false;
 private String connectionProperties;

3.定义数据源

@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSource2Config {
 
 private String url;
 private String username;
 private String password;
 
 @Bean
 public DataSource getDataSource() {
 DruidDataSource dataSource = new DruidDataSource();
 dataSource.setUrl(url);
 dataSource.setUsername(username);// 用户名
 dataSource.setPassword(password);// 密码
 return dataSource;
 }
 
 public String getUrl() {
 return url;
 }
 
 public void setUrl(String url) {
 this.url = url;
 }
 
 public String getUsername() {
 return username;
 }
 
 public void setUsername(String username) {
 this.username = username;
 }
 
 public String getPassword() {
 return password;
 }
 
 public void setPassword(String password) {
 this.password = password;
 }
}

4.配置Druid的监控器和为事务管理器指定Druid数据源, 最终Configuration文件如下:

Druid监控配置:

ServletRegistrationBean
FilterRegistrationBean

事务管理器配置:
PlatformTransactionManager

package com.example.demo.dao.druid;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;


@Configuration
public class DruidConfiguration {
 
 @Bean
 public ServletRegistrationBean druidServlet() {
  //logger.info("init Druid Servlet Configuration ");
  ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
  servletRegistrationBean.setServlet(new StatViewServlet());
  servletRegistrationBean.addUrlMappings("/druid/*");
  Map<String, String> initParameters = new HashMap<String, String>();
  initParameters.put("loginUsername", "admin");
  initParameters.put("loginPassword", "admin");
  initParameters.put("resetEnable", "false");
  initParameters.put("allow", ""); 
  initParameters.put("deny", "");
  servletRegistrationBean.setInitParameters(initParameters);
  return servletRegistrationBean;
 }

 @Bean
 public FilterRegistrationBean filterRegistrationBean() {
  FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
  filterRegistrationBean.setFilter(new WebStatFilter());
  filterRegistrationBean.addUrlPatterns("/*");
  filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
  return filterRegistrationBean;
 }
 
 @Bean
 @Primary
 public PlatformTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
  DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
  dataSourceTransactionManager.setDataSource(dataSource);
  return dataSourceTransactionManager;
 }
 
 
}

//Druid配置Bean
@Component
@ConfigurationProperties(prefix = "spring.datasource")
class DruidDataSourceProperties {
 
 private String url;
 private String username;
 private String password;
 private String driverClassName;
 private int initialSize = 5;
 private int minIdle = 5;
 private int maxActive = 10;
 private int maxWait = 2;
 private int timeBetweenEvictionRunsMillis = 1000 * 60;
 private int minEvictableIdleTimeMillis = 1000 * 60 * 30;
 private String validationQuery;
 private boolean testWhileIdle = false;
 private boolean testOnBorrow = true;
 private boolean testOnReturn = false;
 private boolean poolPreparedStatements = false;
 private int maxPoolPreparedStatementPerConnectionSize = -1;
 private String filters = "stat";
 private boolean useGlobalDataSourceStat = false;
 private String connectionProperties;
 
 @Bean  //声明其为Bean实例,将数据源设置为druid
 @Primary //在同样的DataSource中,首先使用被标注的DataSource
 public DataSource dataSource() {
  DruidDataSource datasource = new DruidDataSource();
  datasource.setUrl(url);
  datasource.setUsername(username);
  datasource.setPassword(password);
  datasource.setDriverClassName(driverClassName);

  //configuration
  datasource.setInitialSize(initialSize);
  datasource.setMinIdle(minIdle);
  datasource.setMaxActive(maxActive);
  datasource.setMaxWait(maxWait);
  datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  datasource.setValidationQuery(validationQuery);
  datasource.setTestWhileIdle(testWhileIdle);
  datasource.setTestOnBorrow(testOnBorrow);
  datasource.setTestOnReturn(testOnReturn);
  datasource.setPoolPreparedStatements(poolPreparedStatements);
  datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
  try {
   datasource.setFilters(filters);
  } catch (SQLException e) {
   System.err.println("druid configuration initialization filter: " + e);
  }
  datasource.setConnectionProperties(connectionProperties);
  return datasource;
 }
 
 public String getUrl() {
  return url;
 }

 public void setUrl(String url) {
  this.url = url;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getDriverClassName() {
  return driverClassName;
 }

 public void setDriverClassName(String driverClassName) {
  this.driverClassName = driverClassName;
 }

 public int getInitialSize() {
  return initialSize;
 }

 public void setInitialSize(int initialSize) {
  this.initialSize = initialSize;
 }

 public int getMinIdle() {
  return minIdle;
 }

 public void setMinIdle(int minIdle) {
  this.minIdle = minIdle;
 }

 public int getMaxActive() {
  return maxActive;
 }

 public void setMaxActive(int maxActive) {
  this.maxActive = maxActive;
 }

 public int getMaxWait() {
  return maxWait;
 }

 public void setMaxWait(int maxWait) {
  this.maxWait = maxWait;
 }

 public int getTimeBetweenEvictionRunsMillis() {
  return timeBetweenEvictionRunsMillis;
 }

 public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
  this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
 }

 public int getMinEvictableIdleTimeMillis() {
  return minEvictableIdleTimeMillis;
 }

 public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
  this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
 }

 public String getValidationQuery() {
  return validationQuery;
 }

 public void setValidationQuery(String validationQuery) {
  this.validationQuery = validationQuery;
 }

 public boolean isTestWhileIdle() {
  return testWhileIdle;
 }

 public void setTestWhileIdle(boolean testWhileIdle) {
  this.testWhileIdle = testWhileIdle;
 }

 public boolean isTestOnBorrow() {
  return testOnBorrow;
 }

 public void setTestOnBorrow(boolean testOnBorrow) {
  this.testOnBorrow = testOnBorrow;
 }

 public boolean isTestOnReturn() {
  return testOnReturn;
 }

 public void setTestOnReturn(boolean testOnReturn) {
  this.testOnReturn = testOnReturn;
 }

 public boolean isPoolPreparedStatements() {
  return poolPreparedStatements;
 }

 public void setPoolPreparedStatements(boolean poolPreparedStatements) {
  this.poolPreparedStatements = poolPreparedStatements;
 }

 public int getMaxPoolPreparedStatementPerConnectionSize() {
  return maxPoolPreparedStatementPerConnectionSize;
 }

 public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
  this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
 }

 public String getFilters() {
  return filters;
 }

 public void setFilters(String filters) {
  this.filters = filters;
 }


 public boolean isUseGlobalDataSourceStat() {
  return useGlobalDataSourceStat;
 }

 public void setUseGlobalDataSourceStat(boolean useGlobalDataSourceStat) {
  this.useGlobalDataSourceStat = useGlobalDataSourceStat;
 }

 public String getConnectionProperties() {
  return connectionProperties;
 }

 public void setConnectionProperties(String connectionProperties) {
  this.connectionProperties = connectionProperties;
 }
}

5.Druid性能监控台
http://localhost:8092/druid/index.html

加载全部内容

相关教程
猜你喜欢
用户评论