在idea里建立一个spring-boot工程 选依赖的时候把web里的web勾上,sql里的mysql和mybatis也勾上 ,这样就会自动帮咱们生成依赖 在其中咱们须要给mysql的依赖加上版本,否则它会自动去用最新版的(目前mysql最新版已经到了八以上了),咱们如今用五点几的就好,有错误也能在网上找到解决方法,采用最新版的若是出现错误,那么解决起来也麻烦java
而后在加上druid依赖, 若是是要用到多数据源,就得用 druid-spring-boot-startermysql
而后在build里设置下配置文件的扫描路径,pom.xml具体依赖以下web
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.liy</groupId> <artifactId>mybatisProject</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatisProject</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.30</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>`
而后在application.properties配置文件中配置数据源信息(我这里打算用两个数据源)spring
spring.datasource.one.username=root spring.datasource.one.password=root spring.datasource.one.url=jdbc:mysql:///again spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver spring.datasource.two.username=root spring.datasource.two.password=root spring.datasource.two.url=jdbc:mysql:///demo spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
若是只是一个数据源 前缀是spring.datasource.username
这也是默认的扫描前缀sql
由于咱们这里采用两个数据源,因此为了区别两个数据源咱们分别给他们加上了 spring.datasource.**one.**username=root
数据库
spring.datasource.**two.**username=root
springboot
可是咱们把前缀改了,那么spring-boot也就找不到默认的前缀,那么这两个数据源的配置信息也就不会去扫描mybatis
因此咱们得本身去写个配置类,来获取和区别这两个数据源 DatasourceConfig.javaapp
@Configuration public class DataSourceConfig { @Bean @ConfigurationProperties("spring.datasource.one") DataSource dsOne(){ return DruidDataSourceBuilder.create().build(); } @Bean @ConfigurationProperties("spring.datasource.two") DataSource dsTwo(){ return DruidDataSourceBuilder.create().build(); } }
而后得把数据源分别弄给咱们的mybatis配置类去 写两个mybatis配置类,内容基本同样,可是用于区分两个数据源 MybatisConfig1maven
@Configuration @MapperScan(basePackages = "com.liy.mapper",sqlSessionFactoryRef = "sqlSessionFactoryBean1", sqlSessionTemplateRef = "sqlSessionTemplate1") public class MyBatisConfig1 { @Resource(name = "dsOne") DataSource dsOne; @Bean SqlSessionFactory sqlSessionFactoryBean1(){ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dsOne); SqlSessionFactory factory = null; try { factory = factoryBean.getObject(); } catch (Exception e) { e.printStackTrace(); } return factory; } @Bean SqlSessionTemplate sqlSessionTemplate1(){ return new SqlSessionTemplate(sqlSessionFactoryBean1()); } }
MybatisConfig1
@Configuration @MapperScan(basePackages = "com.liy.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryBean2", sqlSessionTemplateRef = "sqlSessionTemplate2") public class MyBatisConfig2 { @Resource(name = "dsTwo") DataSource dsTwo; @Bean SqlSessionFactory sqlSessionFactoryBean2(){ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dsTwo); SqlSessionFactory factory = null; try { factory = factoryBean.getObject(); } catch (Exception e) { e.printStackTrace(); } return factory; } @Bean SqlSessionTemplate sqlSessionTemplate2(){ return new SqlSessionTemplate(sqlSessionFactoryBean2()); } }
而后分别写两个mapper包里对应的接口和映射文件
咱们就只测试一下,那就分别查询下
UserMapper 普通的sql语句也能够直接用注解来,不过不推荐
public interface UserMapper { //@Select("select * from user") public List<User> selectAll(); }
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.liy.mapper.UserMapper"> <select id="selectAll" resultType="com.liy.bean.User"> select * from user </select> </mapper>
另外一个mapper2的代码也就不发了,也是基本和mapper里的同样
只是些路径和数据库查询的表名不太同样
记得写个bean类接收 , 我找了两个类似的表来查询,全部就只用写一个bean类来接收就行
setter和getter方法就省略了
public class User { private int id; private String name; private int age; private String address;
基本都准备好了,那么就开始测试吧
直接在spring-boot工程自带的测试类里测试便可
@RunWith(SpringRunner.class) @SpringBootTest public class MybatisApplicationTests { @Autowired UserMapper um; @Autowired UserMapper2 um2; @Test public void contextLoads() { List<User> user = um.selectAll(); System.out.println(user); List<User> users = um2.selectAll(); System.out.println(users); } }
um 和 um2上应该都有红色波浪线,只是springboot未找到仍是啥的,可是仍是注入进来了
两个表的数据也都查询出来了