您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(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?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?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è)資訊頻道。
免責(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)容。