当前位置:   article > 正文

springboot+mybatis配置多数据源(MySQL+SQLServer)_mybatis同时tomcat注入sqlserver和mysql数据源xml

mybatis同时tomcat注入sqlserver和mysql数据源xml

1.应用场景

       什么时候才用的到配置多数据源??当我们用不同数据库存放不同数据的时候。这个时候我们整个工程并不是只用一个数据库,所以,要配置多个,在具体的场景应用具体的数据源。

2.文件结构

3.主要思路

假设现在有两类人,需要登录,在不同的登录页面下,检测不同的数据库。一种人的信息存放在mysql,另一种存放在sqlserver,我们现在设置两个映射文件,分别存放不同的SQL语句,这很好理解吧,然后在application.properties里存放两个数据库的配置信息,准备实体类entity,准备一个controller,准备两个mapper接口,以及他们的service实现文件。现在重点来了,我们需要什么把他们串起来。你现在在login页面输入了信息,经过ajax传送到后台,后台调用service里的函数,这些函数,分别调用接口的函数来实现登录校验,将校验结果返回页面ajax,根据结果,跳转或者怎样。这就是我们的主要思路。但是我们想一下,谁来决定你在不同的login页面输入不同类人的信息所调用的不同数据库分别是哪个呢??我们将在DataConfig里配置他。

4.pom依赖

除了默认的,再加下面几个:

  1. <dependency>
  2. <groupId>com.microsoft.sqlserver</groupId>
  3. <artifactId>sqljdbc4</artifactId>
  4. <version>4.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>net.sf.json-lib</groupId>
  8. <artifactId>json-lib</artifactId>
  9. <version>2.4</version>
  10. <classifier>jdk15</classifier>
  11. </dependency>
  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>5.1.22</version>
  16. </dependency>

这里注意,由于个人的mysql版本问题,驱动版本的选择要十分谨慎,不然会出现很多错误,经过尝试,对于我的mysql而言,5.1.22的驱动可以较好的兼容。

5.application.properties

  1. spring.datasource.test1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  2. spring.datasource.test1.jdbc-url=jdbc:sqlserver://localhost:1433;DatabaseName=ajax
  3. spring.datasource.test1.username=sherry
  4. spring.datasource.test1.password=xiaoai
  5. spring.mvc.view.prefix=/views/
  6. spring.mvc.view.suffix=.jsp
  7. spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
  8. spring.datasource.test2.jdbc-url=jdbc:mysql://127.0.0.1:3306/test
  9. spring.datasource.test2.username=root
  10. spring.datasource.test2.password=123456

由于两个数据源很多地方写法都是一样的,比如mapper,service,等,所以我这里只写一个数据源的。

6.mapper:

7.Service

8.Controller

  1. package com.example.ajaxloginand.Controller1;
  2. import com.example.ajaxloginand.Service.ServiceImpl.UserServiceImpl;
  3. import com.example.ajaxloginand.Service2.ServiceImpl2.UserServiceImpl2;
  4. import com.example.ajaxloginand.entity.user;
  5. import net.sf.json.JSONObject;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. @Controller
  12. public class loginController {
  13. @Autowired
  14. private UserServiceImpl userService;
  15. @RequestMapping("/login")
  16. @ResponseBody
  17. public Object login(@RequestParam String ObjectUser){
  18. //user 转换成 json 对象,再转成 java 对象
  19. JSONObject userObject = JSONObject.fromObject(ObjectUser);
  20. user userObj= (user)userObject.toBean(userObject, user.class);
  21. if(userService.ifhaveuser(userObj.getUsername(),userObj.getPassword()))
  22. return "success";
  23. else return "fail";
  24. }
  25. @RequestMapping("/test")
  26. public String test(){
  27. return "login";
  28. }
  29. //配置第二个数据源
  30. @Autowired
  31. private UserServiceImpl2 userService2;
  32. @RequestMapping("/login2")
  33. @ResponseBody
  34. public Object login2(@RequestParam String ObjectUser){
  35. //user 转换成 json 对象,再转成 java 对象
  36. JSONObject userObject = JSONObject.fromObject(ObjectUser);
  37. user userObj= (user)userObject.toBean(userObject, user.class);
  38. if(userService2.ifhaveuser(userObj.getUsername(),userObj.getPassword()))
  39. return "success";
  40. else return "fail";
  41. }
  42. @RequestMapping("/test2")
  43. public String test2(){
  44. return "login2";
  45. }
  46. }

9.Xml映射文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.ajaxloginand.Service.Mapper1.UserMapper1">
  6. <select id="check" resultType="com.example.ajaxloginand.entity.user">
  7. select * from Users where username=#{UserName} and password=#{PassWord}
  8. </select>
  9. </mapper>

10重点!!DataConfig:

  1. package com.example.ajaxloginand.DataConfig;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.boot.jdbc.DataSourceBuilder;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  12. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  13. import javax.sql.DataSource;
  14. @Configuration
  15. @MapperScan(basePackages = {"com.example.ajaxloginand.Service2"},sqlSessionFactoryRef = "test2SqlSessionFactory")
  16. //这里一定要注意,这个basePackages是你的mapper接口及service所在的包名,而下面的红线所标注的classpath是mapper.xml所在的位置,这个xml是配置文件,处在resources里,他的路径也要格外区分开。
  17. public class DataByMySQL {
  18. @Bean(name="test2DataSource")
  19. //下面的注解作用就是从application.properties中读取以这个字符串开头的那些配置,设置为数据源的配置
  20. @ConfigurationProperties(prefix ="spring.datasource.test2")
  21. public DataSource testDataSource(){
  22. return DataSourceBuilder.create().build();
  23. }
  24. @Bean(name="test2SqlSessionFactory")
  25. public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)throws Exception{
  26. SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
  27. bean.setDataSource(dataSource);
  28. bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/test2/*.xml"));
  29. return bean.getObject();
  30. }
  31. @Bean(name = "test2TransactionManager")
  32. public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource")DataSource dataSource){
  33. return new DataSourceTransactionManager(dataSource);
  34. }
  35. @Bean(name="test2SqlSessionTemplate")
  36. public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory")SqlSessionFactory sqlSessionFactory){
  37. return new SqlSessionTemplate(sqlSessionFactory);
  38. }
  39. }

到这里就完成了,配置这个东西其实网上有很多但是,有很多细节都一笔带过,对于初学者来说可能有些难度,在这里我总结一下,配置这个比较坑的地方可能就是mysql驱动的版本的选择以及mapper文件和xml文件存放的位置上,祝大家好运吧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/520988
推荐阅读
相关标签
  

闽ICP备14008679号