SpringBoot如何集成Mybatis并测试(mybatis,springboot,开发技术)

时间:2024-05-04 03:09:14 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

首先我们先新建一个项目,需要选择以下依赖:

SpringBoot如何集成Mybatis并测试

SpringBoot如何集成Mybatis并测试

1、SpringBoot链接druid连接池

1、在pom文件中加入druid连接池场景启动器,如下所示:

<!--druid场景启动器--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.3</version></dependency>

2、在全局配置类中添加以下配置:

spring:#application:#name:dev-managerdatasource:#配置数据源类型type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/springboot_mybatis?useUnicode=true&characterEncoding=UTF-8username:rootpassword:root#初始化,最小,最大连接数initialSize:3minidle:3maxActive:18#获取数据库连接等待的超时时间maxWait:60000#配置多久进行一次检测,检测需要关闭的空闲连接单位毫秒timeBetweenEvictionRunsMillis:60000validationQuery:SELECT1FROMdual#配置监控统计拦截的filters,去掉后,监控界面的sql无法统计#filters:stat,wall,log4j#初始化时运行sql脚本schema:classpath:sql/schema.sqlinitialization-mode:alwaysdruid:stat-view-servlet:enabled:true

3、这个时候druid的数据链接其实是已经链接上了,下来我们可以配置一些druid的监控,先分析一下,在自动配置类中引入的DruidStatViewServletConfiguration就是监控的,可以生成一个监控界面。

@Configuration@ConditionalOnClass({DruidDataSource.class})@AutoConfigureBefore({DataSourceAutoConfiguration.class})@EnableConfigurationProperties({DruidStatProperties.class,DataSourceProperties.class})//DruidStatViewServletConfiguration是配置监控的类@Import({DruidSpringAopConfiguration.class,DruidStatViewServletConfiguration.class,DruidWebStatFilterConfiguration.class,DruidFilterConfiguration.class})publicclassDruidDataSourceAutoConfigure{}

4、当我们点击进入DruidStatViewServletConfiguration 类的时候,会发现当我们在全局配置文件中没有配置spring.datasource.druid.stat-view-servlet.enabled配置的时候,这个类将不生效,监控界面也就无法起来,代码如下:

@ConditionalOnWebApplication@ConditionalOnProperty(name={"spring.datasource.druid.stat-view-servlet.enabled"},havingValue="true")publicclassDruidStatViewServletConfiguration{}

5、我们先不要在全局配置里面配置上面的属性,进入地址 http://localhost:8080/druid/login.html ,就会打不开,如下所示:

SpringBoot如何集成Mybatis并测试

6、下面我们在全局配置文件中配置了这个配置之后,然后再打开监控的网站页面,如下所示:

spring:datasource: druid:stat-view-servlet:enabled:true

SpringBoot如何集成Mybatis并测试

7、依据于DruidStatViewServletConfiguration类的下面代码,我们就可以类似的加一些其它的配置,就比如登录名密码什么的,代码如下:

application.yml配置

druid:stat-view-servlet:enabled:truelogin-username:rootlogin-password:123

2、SpringBoot集成Mybatis

2.1、引入Mybatis-generator

1、在pom文件中引入mybatis-generator插件,代码如下所示:

<!--Mybatis-Generator插件,自动生成代码--><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><!--必须要引入数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><!--必须要指定相应的版本--><version>8.0.22</version></dependency></dependencies></plugin>

2、加入上面引入的generatorConfig.xml文件,代码示例如下:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTDMyBatisGeneratorConfiguration1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--数据库驱动使用dos命令时,需要配置数据库驱动--><!--<classPathEntrylocation="D:\Java\apache-maven-3.5.4\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/>--><!--context配置上下文,配置生成规则id任意写MyBatis3DynamicSql默认的,会生成带动态sql的CRUDMyBatis3生成通用的查询,可以指定动态where的条件MyBatis3Simple只生成简单的CRUD<contextid="context"targetRuntime="MyBatis3Simple"><!--注释生成器--><!--<commentGenerator><propertyname="suppressDate"value="true"/><propertyname="suppressAllComments"value="true"/></commentGenerator>--><!--数据库链接地址账号密码--><jdbcConnectiondriverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/springboot_mybatis?serverTimezone=UTC"userId="root"password="root"></jdbcConnection><javaTypeResolver><!--<propertyname="forceBigDecimals"value="false"/>--></javaTypeResolver><!--生成Model类存放位置targetPackage生成到哪个包下targetProject生成到当前文件的哪个对应路径下<javaModelGeneratortargetPackage="cool.ale.pojo"targetProject="src/main/java"><!--<propertyname="enableSubPackages"value="true"/><propertyname="trimStrings"value="true"/>--></javaModelGenerator><!--生成映射文件存放位置<sqlMapGeneratortargetPackage="cool.ale.mapper"targetProject="src/main/resources"><!--<propertyname="enableSubPackages"value="true"/>--></sqlMapGenerator><!--生成Dao类存放位置type指定生成的方式1、使用注解的方式生成2、使用接口绑定的方式生成(一定要配置sqlMapGenerator)<javaClientGeneratortype="XMLMAPPER"targetPackage="cool.ale.mapper"targetProject="src/main/java"></javaClientGenerator><!--生成对应表及类名domainObjectName对应的实体类的名字mapperName对应的mapper接口以及mapper.xml文件的名字--><tabletableName="emp"domainObjectName="Emp"></table><tabletableName="dept"domainObjectName="Dept"></table></context></generatorConfiguration>

3、找到maven中这个插件,双击运行

SpringBoot如何集成Mybatis并测试

2.2、集成mybatis并测试

1、在pom文件中引入mybatis和mysql的依赖,代码如下所示:

<!--mybatis连接池,是mybatis自己提供--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>

2、在全局配置文件里面配置mapper-location的路径,指定mapper.xml文件在哪

#设置mybatis的mapper-locationmybatis:mapper-locations:classpath:cool/ale/mapper/*Mapper.xml

3、在SpringBoot启动类的地方指定mapper接口的路径,如下所示:

@MapperScan("cool.ale.mapper")publicclassSpringbootMybatisApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringbootMybatisApplication.class,args);}}

4、写一个controller来测试刚才生成的CRUD代码:

packagecool.ale.controller;importcool.ale.mapper.EmpMapper;importcool.ale.pojo.Emp;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.List;@RestController@RequestMapping("/emp")publicclassEmpController{@AutowiredprivateEmpMapperempMapper;@RequestMapping("/all")publicList<Emp>selectAll(){returnempMapper.selectAll();}}

5、成功截图如下:

SpringBoot如何集成Mybatis并测试

3、其它

3.1、自定义druid链接池

1、在pom文件中加入依赖:

<!--缺少druid连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.3</version></dependency>

2、全局配置里面配置:

spring:#application:#name:dev-managerdatasource:#配置数据源类型type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/springboot_mybatis?useUnicode=true&characterEncoding=UTF-8username:rootpassword:root#初始化,最小,最大连接数initialSize:3minidle:3maxActive:18#获取数据库连接等待的超时时间maxWait:60000#配置多久进行一次检测,检测需要关闭的空闲连接单位毫秒timeBetweenEvictionRunsMillis:60000validationQuery:SELECT1FROMdual#配置监控统计拦截的filters,去掉后,监控界面的sql无法统计#filters:stat,wall,log4j#初始化时运行sql脚本schema:classpath:sql/schema.sqlinitialization-mode:always

3、书写配置类,其实和刚才我们进入jar包写的方法差不多,代码如下:

packagecool.ale.config;importcom.alibaba.druid.pool.DruidDataSource;importcom.alibaba.druid.support.http.StatViewServlet;importcom.alibaba.druid.support.http.WebStatFilter;importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.boot.web.servlet.FilterRegistrationBean;importorg.springframework.boot.web.servlet.ServletRegistrationBean;importorg.springframework.context.annotation.Bean;importjavax.sql.DataSource;@Configuration//当我们的全局配置文件配置了spring.datasource.type属性时,这个类才生效@ConditionalOnProperty("spring.datasource.type")publicclassDruidConfiguration{@Bean//会绑定application.yml所有的spring.datasource开头的配置绑定到DataSource@ConfigurationProperties("spring.datasource")publicDataSourcedataSource(){returnnewDruidDataSource();}/*//第二种办法publicDataSourcedataSource(DataSourcePropertiesproperties){//根据配置动态创建一个DataSourcereturnproperties.initializeDataSourceBuilder().build();}*//***监控台的servlet*/publicServletRegistrationBeanstatViewServlet(){ServletRegistrationBeanservletRegistrationBean=newServletRegistrationBean();servletRegistrationBean.setServlet(newStatViewServlet());//设置了这个属性之后,我们就可以通过druid地址去访问druid的一个监控台//比如:http://localhost:8080/druid/login.htmlservletRegistrationBean.addUrlMappings("/druid/*");//添加IP白名单servletRegistrationBean.addInitParameter("allow","127.0.0.1");//添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高servletRegistrationBean.addInitParameter("deny","127.0.0.1");//添加控制台管理用户servletRegistrationBean.addInitParameter("loginUsername","admin");servletRegistrationBean.addInitParameter("loginPassword","123456");//是否能够重置数据servletRegistrationBean.addInitParameter("resetEnable","false");returnservletRegistrationBean;*配置服务过滤器:监控哪些访问**@return返回过滤器的配置对象publicFilterRegistrationBeanstatFilter(){FilterRegistrationBeanfilterRegistrationBean=newFilterRegistrationBean(newWebStatFilter());//添加过滤器规则,所有的请求都会被拦截filterRegistrationBean.addUrlPatterns("/*");//忽略过滤格式filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,/druid/*");returnfilterRegistrationBean;}

3.2、SpringBoot的Mybatis其它配置

@Bean@ConditionalOnMissingBeanpublicSqlSessionFactorysqlSessionFactory(DataSourcedataSource)throwsException{SqlSessionFactoryBeanfactory=newSqlSessionFactoryBean();factory.setDataSource(dataSource);factory.setVfs(SpringBootVFS.class);//设置Mybatis的全局配置文件if(StringUtils.hasText(this.properties.getConfigLocation())){factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));} //有另一种定制方法的体现 //里面有一些关于mybatis全局配置文件的setting的实现this.applyConfiguration(factory);if(this.properties.getConfigurationProperties()!=null){factory.setConfigurationProperties(this.properties.getConfigurationProperties()); //Mybatis的插件拦截器, //我们只需要实现了一个Interceptor接口的拦截器注入到IOC容器中,就可以起作用if(!ObjectUtils.isEmpty(this.interceptors)){factory.setPlugins(this.interceptors); //设置数据库厂商IDif(this.databaseIdProvider!=null){factory.setDatabaseIdProvider(this.databaseIdProvider); //去application.yml去找typeAliasesPackage属性,设置别名使用if(StringUtils.hasLength(this.properties.getTypeAliasesPackage())){factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage()); //根据父类给子类设置别名 //去application.yml找aliasesSuperType属性if(this.properties.getTypeAliasesSuperType()!=null){factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType()); //通过包设置类型处理器if(StringUtils.hasLength(this.properties.getTypeHandlersPackage())){factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage()); //通过类设置类型处理器if(!ObjectUtils.isEmpty(this.typeHandlers)){factory.setTypeHandlers(this.typeHandlers); //设置mapper-locationif(!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())){factory.setMapperLocations(this.properties.resolveMapperLocations());Set<String>factoryPropertyNames=(Set)Stream.of((newBeanWrapperImpl(SqlSessionFactoryBean.class)).getPropertyDescriptors()).map(FeatureDescriptor::getName).collect(Collectors.toSet());Class<?extendsLanguageDriver>defaultLanguageDriver=this.properties.getDefaultScriptingLanguageDriver();if(factoryPropertyNames.contains("scriptingLanguageDrivers")&&!ObjectUtils.isEmpty(this.languageDrivers)){factory.setScriptingLanguageDrivers(this.languageDrivers);if(defaultLanguageDriver==null&&this.languageDrivers.length==1){defaultLanguageDriver=this.languageDrivers[0].getClass();}if(factoryPropertyNames.contains("defaultScriptingLanguageDriver")){factory.setDefaultScriptingLanguageDriver(defaultLanguageDriver);returnfactory.getObject();}

注意:但是上面的applyConfiguration方法点开之后我们会发现一个问题,要想定制Mybatis的全局配置中的settings,只有下面两种方法。
1、直接在SpringBoot的全局配置文件里面指定Mybatis的全局配置文件
2、在SpringBoot的全局配置文件配置configuration + 实现这个ConfigurationCustomizer类

privatevoidapplyConfiguration(SqlSessionFactoryBeanfactory){org.apache.ibatis.session.Configurationconfiguration=this.properties.getConfiguration();//当没有配置configuration但是指定了mybatis的全局配置文件if(configuration==null&&!StringUtils.hasText(this.properties.getConfigLocation())){configuration=neworg.apache.ibatis.session.Configuration();} //当配置了configuration并且实现了ConfigurationCustomizer类if(configuration!=null&&!CollectionUtils.isEmpty(this.configurationCustomizers)){Iteratorvar3=this.configurationCustomizers.iterator();while(var3.hasNext()){ConfigurationCustomizercustomizer=(ConfigurationCustomizer)var3.next();customizer.customize(configuration);}factory.setConfiguration(configuration);}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:SpringBoot如何集成Mybatis并测试的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java程序图形用户界面的标签组件怎么用下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18