溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MyBatis-Plus如何配置和使用Druid

發(fā)布時(shí)間:2020-11-16 14:35:15 來源:億速云 閱讀:1231 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)MyBatis-Plus如何配置和使用Druid,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Mybatis-Plus的配置

1.Maven插件

velocity-engine-core是mybatis-plus自動(dòng)生成代碼所依賴的模板(不用自動(dòng)生成代碼功能可不用)

  <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&#63;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相關(guān)注解

@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.創(chuàng)建數(shù)據(jù)庫表


5.創(chuàng)建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.創(chuàng)建Mapper - DAO層

只有自定義SQL時(shí),mapper中才有內(nèi)容, 使用mybatis-plus自帶CRUD語句或者構(gòu)造器拼接語句時(shí), 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.創(chuàng)建邏輯接口 - 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.創(chuàng)建邏輯類 - Service層

Mybatis-Plus使用SQL的3種常見方法:
a. 使用mybatis-plus自帶CRUD方法: 直接用mapper的自帶方法
b. 使用mybatis-plus提供的條件構(gòu)造器,拼接where條件
c. 使用@Select,@Update等注解, 自己寫SQL+參數(shù)

@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提供的條件構(gòu)造器,拼接條件
 @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.創(chuàng)建接口 - 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/

數(shù)據(jù)源datasource

數(shù)據(jù)源是數(shù)據(jù)庫連接的規(guī)范接口

Springboot默認(rèn)支持4種數(shù)據(jù)源類型,定義在 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

在不指定數(shù)據(jù)源類型時(shí), SpringBoot默認(rèn)使用tomcat.jdbc

如果需要使用第三方數(shù)據(jù)源, 比如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&#63;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.定義數(shù)據(jù)源

@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的監(jiān)控器和為事務(wù)管理器指定Druid數(shù)據(jù)源, 最終Configuration文件如下:

Druid監(jiān)控配置:

ServletRegistrationBean
FilterRegistrationBean

事務(wù)管理器配置:
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實(shí)例,將數(shù)據(jù)源設(shè)置為druid
 @Primary //在同樣的DataSource中,首先使用被標(biāo)注的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;
 }
}

以上就是MyBatis-Plus如何配置和使用Druid,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI