MyBatis-Plus+Druid配置及应用详解
Mybatis-Plus的配置
1.Maven插件
velocity-engine-core是mybatis-plus自动生成代码所依赖的模板(不用自动生成代码功能可不用)
com.baomidou mybatis-plus-boot-starter 3.0.6 org.apache.velocity velocity-engine-core 2.2
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") publicclassDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApplication.class,args); } }
4.创建数据库表
略
5.创建JavaBean(推荐使用Lombok插件方式)-Model层
@Data @TableName("area") @ToString(callSuper=true,includeFieldNames=true) @AllArgsConstructor @NoArgsConstructor publicclassAreaimplementsSerializable{ privatestaticfinallongserialVersionUID=1L; privateStringid; privateStringname; privateintsort; }
6.创建Mapper-DAO层
只有自定义SQL时,mapper中才有内容,使用mybatis-plus自带CRUD语句或者构造器拼接语句时,mapper通常为空
publicinterfaceAreaMapperextendsBaseMapper{ //通过mybatis-plus提供的注解,直接自定义SQL @Select("selectnamefromareawheresort>${sort}") ListgetBySort2(@Param("sort")intsort); }
8.创建逻辑接口-Service层
publicinterfaceIAreaService{ publicAreagetById(Stringid); publicListselectAll(); publicintupdateByPrimaryKeySelective(Arearecord); publicintdeleteByPrimaryKey(Stringid); publicintinsertSelective(Arearecord); publicListgetBySort(); publicListgetBySort2(intsort); }
9.创建逻辑类-Service层
Mybatis-Plus使用SQL的3种常见方法:
a.使用mybatis-plus自带CRUD方法:直接用mapper的自带方法
b.使用mybatis-plus提供的条件构造器,拼接where条件
c.使用@Select,@Update等注解,自己写SQL+参数
@Service publicclassAreaServiceImplimplementsIAreaService{ @Autowired publicAreaMapperareaMapper; //使用mybatis-plus自带CRUD方法 @Override publicAreagetById(Stringid){ returnareaMapper.selectById(id); } @Override publicListselectAll(){ returnareaMapper.selectList(null); } @Override @Transactional publicintupdateByPrimaryKeySelective(Arearecord){ returnareaMapper.updateById(record); } @Override publicintdeleteByPrimaryKey(Stringid){ returnareaMapper.deleteById(id); } @Override publicintinsertSelective(Arearecord){ returnareaMapper.insert(record); } //使用mybatis-plus提供的条件构造器,拼接条件 @Override publicListgetBySort(){ QueryWrapperqueryWrapper=newQueryWrapper<>(); queryWrapper.lambda().gt(Area::getSort,40) .lt(Area::getSort,80); returnareaMapper.selectList(queryWrapper); } //通过mybatis-plus提供的注解,直接自定义SQL(定义在mapper中) @Override publicListgetBySort2(intsort){ returnareaMapper.getBySort2(sort); } }
10.创建接口-Controller层
@RestController @RequestMapping("/area") publicclassAreaController{ @Autowired privateIAreaServiceareaService; @Autowired privateDbpropertiesServicedbproService; @Autowired privateAreaarea; @Resource protectedHttpServletRequestrequest; @RequestMapping(value="/getAreaInfo",method=RequestMethod.GET) publicAreagetAreaInfo(@RequestParam(value="id")Stringid){ area=areaService.getById(id); returnarea; } @RequestMapping(value="/getAreaAllInfo",method=RequestMethod.GET) publicListgetAreaInfo(){ Listarlist=areaService.selectAll(); returnarlist; } @RequestMapping(value="/updateAreaName",method=RequestMethod.PUT) publicintupdateAreaInfo(@RequestParam(value="id")Stringid,@RequestParam(value="name",required=false)Stringname,@RequestParam(value="sort",required=false)Integersort){ area.setId(id); area.setName(name); area.setSort(sort); intar=areaService.updateByPrimaryKeySelective(area); returnar; } @RequestMapping(value="/deleteAreaName",method=RequestMethod.DELETE) publicintdeleteAreaInfo(@RequestParam(value="id")Stringid){ intar=areaService.deleteByPrimaryKey(id); returnar; } //@RequestMapping(value="/insertAreaName",method=RequestMethod.POST) //publicintinsertAreaInfo(@RequestParam(value="id")Stringid,@RequestParam(value="name",required=false)Stringname,@RequestParam(value="sort",required=false)Integersort){ //area.setId(id); //area.setName(name); //area.setSort(sort); //intar=areaService.insertSelective(area); //returnar; //} @RequestMapping(value="/insertAreaName",method=RequestMethod.POST) publicintinsertAreaInfo(@RequestBodyAreaarea){ intar=areaService.insertSelective(area); returnar; } @RequestMapping(value="/selectBySort",method=RequestMethod.GET) publicListselectAreaSort(){ ListarList=areaService.getBySort(); returnarList; } @RequestMapping(value="/selectBySort2",method=RequestMethod.GET) publicListselectAreaSort2(@RequestParam(value="sort")intsort){ List arList=areaService.getBySort2(sort); returnarList; } }
参考文档:
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配置
com.alibaba druid 1.1.3
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") publicclassDruidConfiguration{ privateStringurl; privateStringusername; privateStringpassword; privateStringdriverClassName; privateintinitialSize=5; privateintminIdle=5; privateintmaxActive=10; privateintmaxWait=2; privateinttimeBetweenEvictionRunsMillis=1000*60; privateintminEvictableIdleTimeMillis=1000*60*30; privateStringvalidationQuery; privatebooleantestWhileIdle=false; privatebooleantestOnBorrow=true; privatebooleantestOnReturn=false; privatebooleanpoolPreparedStatements=false; privateintmaxPoolPreparedStatementPerConnectionSize=-1; privateStringfilters; privatebooleanuseGlobalDataSourceStat=false; privateStringconnectionProperties;
3.定义数据源
@Configuration @ConfigurationProperties(prefix="spring.datasource") publicclassDataSource2Config{ privateStringurl; privateStringusername; privateStringpassword; @Bean publicDataSourcegetDataSource(){ DruidDataSourcedataSource=newDruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username);//用户名 dataSource.setPassword(password);//密码 returndataSource; } publicStringgetUrl(){ returnurl; } publicvoidsetUrl(Stringurl){ this.url=url; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } }
4.配置Druid的监控器和为事务管理器指定Druid数据源,最终Configuration文件如下:
Druid监控配置:
ServletRegistrationBean
FilterRegistrationBean
事务管理器配置:
PlatformTransactionManager
packagecom.example.demo.dao.druid; importjava.sql.SQLException; importjava.util.HashMap; importjava.util.Map; importjavax.sql.DataSource; importorg.springframework.beans.factory.annotation.Qualifier; importorg.springframework.boot.context.properties.ConfigurationProperties; importorg.springframework.boot.web.servlet.FilterRegistrationBean; importorg.springframework.boot.web.servlet.ServletRegistrationBean; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.context.annotation.Primary; importorg.springframework.jdbc.datasource.DataSourceTransactionManager; importorg.springframework.stereotype.Component; importorg.springframework.transaction.PlatformTransactionManager; importcom.alibaba.druid.pool.DruidDataSource; importcom.alibaba.druid.support.http.StatViewServlet; importcom.alibaba.druid.support.http.WebStatFilter; @Configuration publicclassDruidConfiguration{ @Bean publicServletRegistrationBeandruidServlet(){ //logger.info("initDruidServletConfiguration"); ServletRegistrationBeanservletRegistrationBean=newServletRegistrationBean(); servletRegistrationBean.setServlet(newStatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); MapinitParameters=newHashMap (); initParameters.put("loginUsername","admin"); initParameters.put("loginPassword","admin"); initParameters.put("resetEnable","false"); initParameters.put("allow",""); initParameters.put("deny",""); servletRegistrationBean.setInitParameters(initParameters); returnservletRegistrationBean; } @Bean publicFilterRegistrationBeanfilterRegistrationBean(){ FilterRegistrationBeanfilterRegistrationBean=newFilterRegistrationBean(); filterRegistrationBean.setFilter(newWebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); returnfilterRegistrationBean; } @Bean @Primary publicPlatformTransactionManagertransactionManager(@Qualifier("dataSource")DataSourcedataSource){ DataSourceTransactionManagerdataSourceTransactionManager=newDataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(dataSource); returndataSourceTransactionManager; } } //Druid配置Bean @Component @ConfigurationProperties(prefix="spring.datasource") classDruidDataSourceProperties{ privateStringurl; privateStringusername; privateStringpassword; privateStringdriverClassName; privateintinitialSize=5; privateintminIdle=5; privateintmaxActive=10; privateintmaxWait=2; privateinttimeBetweenEvictionRunsMillis=1000*60; privateintminEvictableIdleTimeMillis=1000*60*30; privateStringvalidationQuery; privatebooleantestWhileIdle=false; privatebooleantestOnBorrow=true; privatebooleantestOnReturn=false; privatebooleanpoolPreparedStatements=false; privateintmaxPoolPreparedStatementPerConnectionSize=-1; privateStringfilters="stat"; privatebooleanuseGlobalDataSourceStat=false; privateStringconnectionProperties; @Bean//声明其为Bean实例,将数据源设置为druid @Primary//在同样的DataSource中,首先使用被标注的DataSource publicDataSourcedataSource(){ DruidDataSourcedatasource=newDruidDataSource(); 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(SQLExceptione){ System.err.println("druidconfigurationinitializationfilter:"+e); } datasource.setConnectionProperties(connectionProperties); returndatasource; } publicStringgetUrl(){ returnurl; } publicvoidsetUrl(Stringurl){ this.url=url; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetDriverClassName(){ returndriverClassName; } publicvoidsetDriverClassName(StringdriverClassName){ this.driverClassName=driverClassName; } publicintgetInitialSize(){ returninitialSize; } publicvoidsetInitialSize(intinitialSize){ this.initialSize=initialSize; } publicintgetMinIdle(){ returnminIdle; } publicvoidsetMinIdle(intminIdle){ this.minIdle=minIdle; } publicintgetMaxActive(){ returnmaxActive; } publicvoidsetMaxActive(intmaxActive){ this.maxActive=maxActive; } publicintgetMaxWait(){ returnmaxWait; } publicvoidsetMaxWait(intmaxWait){ this.maxWait=maxWait; } publicintgetTimeBetweenEvictionRunsMillis(){ returntimeBetweenEvictionRunsMillis; } publicvoidsetTimeBetweenEvictionRunsMillis(inttimeBetweenEvictionRunsMillis){ this.timeBetweenEvictionRunsMillis=timeBetweenEvictionRunsMillis; } publicintgetMinEvictableIdleTimeMillis(){ returnminEvictableIdleTimeMillis; } publicvoidsetMinEvictableIdleTimeMillis(intminEvictableIdleTimeMillis){ this.minEvictableIdleTimeMillis=minEvictableIdleTimeMillis; } publicStringgetValidationQuery(){ returnvalidationQuery; } publicvoidsetValidationQuery(StringvalidationQuery){ this.validationQuery=validationQuery; } publicbooleanisTestWhileIdle(){ returntestWhileIdle; } publicvoidsetTestWhileIdle(booleantestWhileIdle){ this.testWhileIdle=testWhileIdle; } publicbooleanisTestOnBorrow(){ returntestOnBorrow; } publicvoidsetTestOnBorrow(booleantestOnBorrow){ this.testOnBorrow=testOnBorrow; } publicbooleanisTestOnReturn(){ returntestOnReturn; } publicvoidsetTestOnReturn(booleantestOnReturn){ this.testOnReturn=testOnReturn; } publicbooleanisPoolPreparedStatements(){ returnpoolPreparedStatements; } publicvoidsetPoolPreparedStatements(booleanpoolPreparedStatements){ this.poolPreparedStatements=poolPreparedStatements; } publicintgetMaxPoolPreparedStatementPerConnectionSize(){ returnmaxPoolPreparedStatementPerConnectionSize; } publicvoidsetMaxPoolPreparedStatementPerConnectionSize(intmaxPoolPreparedStatementPerConnectionSize){ this.maxPoolPreparedStatementPerConnectionSize=maxPoolPreparedStatementPerConnectionSize; } publicStringgetFilters(){ returnfilters; } publicvoidsetFilters(Stringfilters){ this.filters=filters; } publicbooleanisUseGlobalDataSourceStat(){ returnuseGlobalDataSourceStat; } publicvoidsetUseGlobalDataSourceStat(booleanuseGlobalDataSourceStat){ this.useGlobalDataSourceStat=useGlobalDataSourceStat; } publicStringgetConnectionProperties(){ returnconnectionProperties; } publicvoidsetConnectionProperties(StringconnectionProperties){ this.connectionProperties=connectionProperties; } }
5.Druid性能监控台
http://localhost:8092/druid/index.html
到此这篇关于MyBatis-Plus+Druid配置及应用详解的文章就介绍到这了,更多相关MyBatis-PlusDruid配置内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。