Spring boot怎么整合Mybatis
程序员文章站
2023-12-10 10:03:04
最近刚接触spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybati...
最近刚接触spring boot,正是因为他的及简配置方便开发,促使我下定决心要用它把之前写的项目重构,那么问题来了,spring boot怎么整合mybatis呢,下面几个配置类来搞定。
在我的代码当中是实现了数据库读写分离的,所以代码仅做参考,如有需要可以加我微信:benyzhous
【后续更新】
1、文件结构
databaseconfiguration.java用来获取数据库连接配置信息,配置从application.properties中读取
mybatisconfiguration.java也就是mybatis配置核心入口,构建连接创建sqlsessionfactory
2、下面直接贴代码,有问题的话可以留言或者加我的微信公众号:cha-baba,或者个人微信号:benyzhous
application.yml 相关配置
# server settings server: port:8080 address:localhost # datasource jdbc: driverclass: com.mysql.jdbc.driver url: jdbc:mysql://127.0.0.1:3306/local-kaishustory?useunicode=true&characterencoding=utf-8 username: root password: root # spring profiles spring: # http encoding http: encoding.charset: utf-8 encoding.enable: true encoding.force: true # weixin configuration weixin: mp: appid: xx secret: ee token: weixin aeskey: # mybatis mybatis: typealiasespackage: com.modou.**.domain mapperlocations: classpath:/com/modou/**/mapper/*.xml configlocation: classpath:/mybatis-config.xml # logging logging: level: com.ibatis:debug
databaseconfiguration.java
package com.modou.conf.mybatis; import java.util.arraylist; import java.util.list; import javax.sql.datasource; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.boot.bind.relaxedpropertyresolver; import org.springframework.context.environmentaware; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import org.springframework.core.env.environment; import org.springframework.transaction.annotation.enabletransactionmanagement; import com.alibaba.druid.pool.druiddatasource; @configuration @enabletransactionmanagement public class databaseconfiguration implements environmentaware { private relaxedpropertyresolver propertyresolver; private static logger log = loggerfactory.getlogger(databaseconfiguration.class); @override public void setenvironment(environment env) { this.propertyresolver = new relaxedpropertyresolver(env, "jdbc."); } @bean(name="writedatasource", destroymethod = "close", initmethod="init") @primary public datasource writedatasource() { log.debug("configruing write datasource"); druiddatasource datasource = new druiddatasource(); datasource.seturl(propertyresolver.getproperty("url")); datasource.setdriverclassname(propertyresolver.getproperty("driverclassname")); datasource.setusername(propertyresolver.getproperty("username")); datasource.setpassword(propertyresolver.getproperty("password")); return datasource; } @bean(name="readonedatasource", destroymethod = "close", initmethod="init") public datasource readonedatasource() { log.debug("configruing read one datasource"); druiddatasource datasource = new druiddatasource(); datasource.seturl(propertyresolver.getproperty("url")); datasource.setdriverclassname(propertyresolver.getproperty("driverclassname")); datasource.setusername(propertyresolver.getproperty("username")); datasource.setpassword(propertyresolver.getproperty("password")); return datasource; } @bean(name="readtowdatasource", destroymethod = "close", initmethod="init") public datasource readtowdatasource() { log.debug("configruing read two datasource"); druiddatasource datasource = new druiddatasource(); datasource.seturl(propertyresolver.getproperty("url")); datasource.setdriverclassname(propertyresolver.getproperty("driverclassname")); datasource.setusername(propertyresolver.getproperty("username")); datasource.setpassword(propertyresolver.getproperty("password")); return datasource; } @bean(name="readdatasources") public list<datasource> readdatasources(){ list<datasource> datasources = new arraylist<datasource>(); datasources.add(readonedatasource()); datasources.add(readtowdatasource()); return datasources; } }
mybatisconfiguration.java
package com.modou.conf.mybatis; import java.util.list; import javax.annotation.resource; import javax.persistence.entitymanager; import javax.sql.datasource; import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; import org.apache.ibatis.session.sqlsessionfactory; import org.mybatis.spring.sqlsessionfactorybean; import org.mybatis.spring.annotation.mapperscan; import org.mybatis.spring.plugin.rw.roundrobinrwroutingdatasourceproxy; import org.springframework.boot.autoconfigure.autoconfigureafter; import org.springframework.boot.autoconfigure.condition.conditionalonclass; import org.springframework.boot.autoconfigure.condition.conditionalonmissingbean; import org.springframework.boot.bind.relaxedpropertyresolver; import org.springframework.context.environmentaware; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.core.env.environment; import org.springframework.core.io.defaultresourceloader; import org.springframework.core.io.support.pathmatchingresourcepatternresolver; import org.springframework.jdbc.datasource.datasourcetransactionmanager; import org.springframework.transaction.annotation.enabletransactionmanagement; /** * * 获取第二个数据库的连接信息,在application.yml中配置,并指定特定的前缀 * */ @configuration @conditionalonclass({ enabletransactionmanagement.class, entitymanager.class }) @autoconfigureafter({ databaseconfiguration.class }) @mapperscan(basepackages={"com.modou.**.mapper","com.github.abel533.entity.mapper"}) public class mybatisconfiguration implements environmentaware{ private static log logger = logfactory.getlog(mybatisconfiguration.class); private relaxedpropertyresolver propertyresolver; @resource(name="writedatasource") private datasource writedatasource; @resource(name="readdatasources") private list<object> readdatasources; @override public void setenvironment(environment environment) { this.propertyresolver = new relaxedpropertyresolver(environment,"mybatis."); } @bean @conditionalonmissingbean public sqlsessionfactory sqlsessionfactory() { try { sqlsessionfactorybean sessionfactory = new sqlsessionfactorybean(); sessionfactory.setdatasource(roundrobindatasouceproxy()); sessionfactory.settypealiasespackage(propertyresolver .getproperty("typealiasespackage")); sessionfactory .setmapperlocations(new pathmatchingresourcepatternresolver() .getresources(propertyresolver .getproperty("mapperlocations"))); sessionfactory .setconfiglocation(new defaultresourceloader() .getresource(propertyresolver .getproperty("configlocation"))); return sessionfactory.getobject(); } catch (exception e) { logger.warn("could not confiure mybatis session factory"); return null; } } @bean public roundrobinrwroutingdatasourceproxy roundrobindatasouceproxy(){ roundrobinrwroutingdatasourceproxy proxy = new roundrobinrwroutingdatasourceproxy(); proxy.setwritedatasource(writedatasource); proxy.setreaddatasoures(readdatasources); proxy.setreadkey("read"); proxy.setwritekey("write"); return proxy; } @bean @conditionalonmissingbean public datasourcetransactionmanager transactionmanager() { return new datasourcetransactionmanager(writedatasource); } }
application.java
package com.modou.weixin; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.commandlinerunner; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.enableautoconfiguration; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import com.modou.weixin.service.helloworldservice; /** * created by chababa on 15/8/22. */ @configuration @componentscan(basepackages={"com.modou.conf","com.modou.weixin"}) @enableautoconfiguration public class application implements commandlinerunner{ @autowired helloworldservice helloworldservice; public static void main(string[] args) { springapplication.run(application.class, args); } @override public void run(string... args) throws exception { system.out.println(this.helloworldservice.print()); } }
3、maven pom.xml 相关依赖[我是基于我的多模块依赖,这里只是一个示意],其中配置了jrebel热部署插件,需要搭配jrebel6.2.1,具体配置和下载请转向
<?xml version="1.0"?> <project xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.modou.weixin</groupid> <artifactid>weixin-boot-parent</artifactid> <version>0.0.1-snapshot</version> <relativepath>../weixin-boot-parent</relativepath> </parent> <artifactid>weixin-boot-services</artifactid> <name>weixin-boot-services</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <springloaded.version>1.2.4.release</springloaded.version> </properties> <dependencies> <dependency> <groupid>com.modou.weixin</groupid> <artifactid>weixin-boot-sdk</artifactid> <version>${project.version}</version> </dependency> <dependency> <groupid>com.modou.weixin</groupid> <artifactid>mybatis-plugin-rw</artifactid> <version>${project.version}</version> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-thymeleaf</artifactid> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> </dependency> <dependency> <groupid>javax.persistence</groupid> <artifactid>persistence-api</artifactid> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> </dependency> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> </dependency> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> </dependency> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> </dependency> <dependency> <groupid>com.github.pagehelper</groupid> <artifactid>pagehelper</artifactid> </dependency> <dependency> <groupid>tk.mybatis</groupid> <artifactid>mapper</artifactid> </dependency> <dependency> <groupid>org.mybatis.generator</groupid> <artifactid>mybatis-generator-core</artifactid> </dependency> </dependencies> </project>
以上所述是小编给大家介绍的spring boot整合mybatis的方法,希望对大家有所帮助
推荐阅读
-
Spring boot怎么整合Mybatis
-
MyBatis 与 Spring 的完美整合方法
-
Spring Boot与Kotlin 整合全文搜索引擎Elasticsearch的示例代码
-
spring 整合 mybatis 中数据源的几种配置方式(总结篇)
-
Spring Boot + Mybatis多数据源和动态数据源配置方法
-
spring boot整合mybatis+mybatis-plus的示例代码
-
spring-boot整合ehcache实现缓存机制的方法
-
Spring Boot整合Spring Security的示例代码
-
Spring Boot整合Redis的完整步骤
-
spring boot整合spring-kafka实现发送接收消息实例代码