SpringBoot的dao层、JdbcTemplate多数据源访问实例


声明:本文转载自https://my.oschina.net/u/2245781/blog/1559046,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

一、项目目录结构

二、新建MVN项目

创建过程需要填写groupId和artifactId,这里都是springboottest。

三、pom.xml把依赖的库都填进去。内容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 	<modelVersion>4.0.0</modelVersion> 	<groupId>springboottest</groupId> 	<artifactId>springboottest</artifactId> 	<version>0.0.1-SNAPSHOT</version> 	<packaging>jar</packaging>  	<name>springboot-mybatis</name> 	<description>Demo project for Spring Boot</description>   	<parent> 		<groupId>org.springframework.boot</groupId> 		<artifactId>spring-boot-starter-parent</artifactId> 		<version>1.5.8.RELEASE</version> 		<relativePath /> <!-- lookup parent from repository --> 	</parent>  	<properties> 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 		<java.version>1.8</java.version> 	</properties>  	<dependencies> 		<dependency> 			<groupId>org.mybatis.spring.boot</groupId> 			<artifactId>mybatis-spring-boot-starter</artifactId> 			<version>1.3.0</version> 		</dependency> 		<dependency> 			<groupId>org.springframework.boot</groupId> 			<artifactId>spring-boot-starter-web</artifactId> 		</dependency>  		<dependency> 			<groupId>mysql</groupId> 			<artifactId>mysql-connector-java</artifactId> 			<scope>runtime</scope> 		</dependency> 		<dependency> 			<groupId>org.springframework.boot</groupId> 			<artifactId>spring-boot-starter-test</artifactId> 			<scope>test</scope> 		</dependency> 	</dependencies>  	<build> 		<plugins> 			<plugin> 				<groupId>org.springframework.boot</groupId> 				<artifactId>spring-boot-maven-plugin</artifactId> 			</plugin> 		</plugins> 	</build> </project>

 

四、创建数据库表user及配置:

Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解。为了演示多数据源,分别在yiibai和test2中建user表,插入的数据内容不一样(随便写、只要两个不也一样就行)。

-- Database: `yiibai` INSERT INTO `user` (`id`, `name`, `dept`, `website`, `phone`, `birthday`) VALUES (1, 'yiibai1', 'Tech', 'http://www.yiibai.com', '13800009911', '1973-11-05'), (2, '依依2', 'Tech', 'http://www.zjptcc.com', '13800009922', '1973-11-05'), (3, 'yiibai3', 'Tech', 'http://www.zjptcc.com', '13800009900', '1973-11-05'), (4, 'yiibai4', 'Tech', 'http://www.zjuni.com', '13800009900', '1973-11-05'); 
 -- -- Database: `test2` -- INSERT INTO `user` (`id`, `name`, `dept`, `website`, `phone`, `birthday`) VALUES (1, 'yiibai1', 'Tech', 'http://www.yiibai.com', '13800009911', '1973-11-05'), (2, '依蓓2', 'Tech', 'http://www.zjptcc.com', '13800009900', '1973-11-05'), (3, '依蓓3', 'Tech', 'http://www.zjptcc.com', '13800009900', '1973-11-05'), (4, '依依4', 'Tech', 'http://www.zjuni.com', '13800009900', '1973-11-05'); 

数据源的配置在MVN项目的application.yml中

spring:     datasource:       url : jdbc:mysql://localhost:3306/yiibai?useSSL=false       username : your-user       password : your-passwd       driver-class-name : com.mysql.jdbc.Driver   test2ds:       url : jdbc:mysql://localhost:3306/test2?useSSL=false       username :  your-user      password : your-passwd       driver-class-name : com.mysql.jdbc.Driver 

修改username和password以适应你的数据库环境

五、DAO层接口和实体类

Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解中的例子类似。其中IUser加@Mapper
注释并去掉public User oneByID(int id);方法。修改后内容如下:

package com.yiibai.mybatis.dao;  import java.util.List;  import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.yiibai.mybatis.models.User;  @Mapper public interface IUser {     @Select("select * from user where id= #{id}")     public User getUserByID(int id);          @Insert("insert into user(id,name, dept,phone,website,birthday) values(#{id},#{name}, #{dept},#{phone}, #{website}, #{birthday})")     public int insertUser(User user);          @Delete("delete from user where id=#{id}")     public int deleteUserById(int id);          @Update("update user set name=#{name},dept=#{dept},phone=#{phone},website=#{website},birthday=#{birthday} where id=#{id}")     public int updateUser(User user);          @Select("select * from user")     public List<User> getAllUser();  }

User类内容不变。加一个UserRowMapper类JdbcTemplate函数中使用,具体作用见Spring 的持久化实例中的三第2点中有详细说明。内容如下:

package com.yiibai.mybatis.models;  import java.sql.ResultSet; import java.sql.SQLException;  import org.springframework.jdbc.core.RowMapper;  public class UserRowMapper implements RowMapper<User> {  	public User mapRow(ResultSet rs, int arg1) throws SQLException { 		// TODO 自动生成的方法存根 		return new User(rs.getInt("id"),rs.getString("name"),rs.getString("dept") 				,rs.getString("phone"),rs.getString("website"),rs.getDate("birthday")); 	} } 

六、Server类

package com.yiibai.mybatis.service;  import java.util.List;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;  import com.yiibai.mybatis.dao.IUser; import com.yiibai.mybatis.models.User;  @Service(value="userService") public class UserService { 	@Autowired     private IUser iUser; 	public List<User> getAllUser() { 		// TODO 自动生成的方法存根 		return iUser.getAllUser(); 	} 	 	public User getUserByID(int id) { 		// TODO 自动生成的方法存根 		return iUser.getUserByID(id); 	} 	 	public int deleteUserById(int id) { 		// TODO 自动生成的方法存根 		return iUser.deleteUserById(id); 	}  	public int updateUser(User user) { 		// TODO 自动生成的方法存根 		return iUser.updateUser(user); 	} } 

七、多数据源配置

package com.yiibai.mybatis.datasource;  import javax.sql.DataSource;  import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate;  @Configuration public class DataSourceConfig { 	@Bean(name = "primaryDataSource")     @Qualifier("primaryDataSource")     @ConfigurationProperties(prefix="spring.datasource")     public DataSource primaryDataSource() {         return DataSourceBuilder.create().build();     }      @Bean(name = "secondaryDataSource")     @Qualifier("secondaryDataSource")     @Primary     @ConfigurationProperties(prefix="spring.test2ds")     public DataSource secondaryDataSource() {         return DataSourceBuilder.create().build();     }     @Bean(name = "primaryJdbcTemplate")     public JdbcTemplate primaryJdbcTemplate(             @Qualifier("primaryDataSource") DataSource dataSource) {         return new JdbcTemplate(dataSource);     }      @Bean(name = "secondaryJdbcTemplate")     public JdbcTemplate secondaryJdbcTemplate(             @Qualifier("secondaryDataSource") DataSource dataSource) {         return new JdbcTemplate(dataSource);     }  } 

七、web控制类

这里实现了两个controller类,UserController注入了Service类实例、Ucontroller注入了JdbcTemplate类实例。代码如下:

package com.yiibai.mybatis.web;  import java.util.List;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;  import com.yiibai.mybatis.models.User; import com.yiibai.mybatis.service.UserService;  @RestController @RequestMapping("/user") public class UserController {     @Autowired     @Qualifier("userService")  // @Resource(name = "userService") 	private UserService userService;          @RequestMapping(value = "/list", method = RequestMethod.GET)     public List<User> getUsers() {         return userService.getAllUser();     }          @RequestMapping(value = "/{id}", method = RequestMethod.GET)     public User getUserByID(@PathVariable("id") int id) {         return userService.getUserByID(id);     } }

其中 userService会使用默认数据源,也就是在DataSourceConfig中有@Primary注释的那个DataSource

也就是在application.yml中spring.test2ds(数据库test2)那个。

package com.yiibai.mybatis.web;  import java.util.List;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;  import com.yiibai.mybatis.models.User; import com.yiibai.mybatis.models.UserRowMapper;  @RestController @RequestMapping("/u") public class Ucontroller { 	@Autowired 	@Qualifier("primaryJdbcTemplate") 	protected JdbcTemplate primaryJdbcTemplate;  	@Autowired 	@Qualifier("secondaryJdbcTemplate") 	protected JdbcTemplate secondaryJdbcTemplate;  	@RequestMapping(value = "/list", method = RequestMethod.GET) 	public List<User> getUsers() { 		String sql = "SELECT * FROM user"; 		return primaryJdbcTemplate.query(sql, new UserRowMapper()); 	}  	@RequestMapping(value = "/{id}", method = RequestMethod.GET) 	public User getUserByID(@PathVariable("id") int id) { 		String sql= "SELECT * FROM user WHERE id =  '"+id+"' "; 		return secondaryJdbcTemplate.queryForObject(sql,new UserRowMapper()); 	} }

八、主类:

 package com.yiibai.mybatis;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.web.bind.annotation.RestController;   @SpringBootApplication @RestController public class SpringbootMutiDsApp  implements EmbeddedServletContainerCustomizer{  	public static void main(String[] args) { 		SpringApplication.run(SpringbootMutiDsApp.class, args); 	}  	public void customize(ConfigurableEmbeddedServletContainer container) { 		// TODO 自动生成的方法存根 		container.setPort(8080); 	} } 

九、运行:

   .   ____          _            __ _ _  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )   '  |____| .__|_| |_|_| |_\__, | / / / /  =========|_|==============|___/=/_/_/_/  :: Spring Boot ::        (v1.5.8.RELEASE)  2017-11-01 09:02:22.233  INFO 5972 --- [           main] com.yiibai.mybatis.SpringbootMutiDsApp   : Starting SpringbootMutiDsApp on mymotif-Vostro-14-5480 with PID 5972 (/home/mymotif/workspace/SpringBootTest/target/classes started by mymotif in /home/mymotif/workspace/SpringBootTest) 2017-11-01 09:02:22.314  INFO 5972 --- [           main] com.yiibai.mybatis.SpringbootMutiDsApp   : No active profile set, falling back to default profiles: default 2017-11-01 09:02:22.458  INFO 5972 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@56de5251: startup date [Wed Nov 01 09:02:22 CST 2017]; root of context hierarchy 2017-11-01 09:02:26.092  INFO 5972 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2017-11-01 09:02:26.140  INFO 5972 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat] 2017-11-01 09:02:26.141  INFO 5972 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.23 2017-11-01 09:02:26.341  INFO 5972 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext 2017-11-01 09:02:26.341  INFO 5972 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3895 ms 2017-11-01 09:02:26.509  INFO 5972 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/] 2017-11-01 09:02:26.514  INFO 5972 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*] 2017-11-01 09:02:26.514  INFO 5972 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2017-11-01 09:02:26.515  INFO 5972 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2017-11-01 09:02:26.515  INFO 5972 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*] 2017-11-01 09:02:27.587  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@56de5251: startup date [Wed Nov 01 09:02:22 CST 2017]; root of context hierarchy 2017-11-01 09:02:27.676  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/u/{id}],methods=[GET]}" onto public com.yiibai.mybatis.models.User com.yiibai.mybatis.web.Ucontroller.getUserByID(int) 2017-11-01 09:02:27.678  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/u/list],methods=[GET]}" onto public java.util.List<com.yiibai.mybatis.models.User> com.yiibai.mybatis.web.Ucontroller.getUsers() 2017-11-01 09:02:27.679  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/user/{id}],methods=[GET]}" onto public com.yiibai.mybatis.models.User com.yiibai.mybatis.web.UserController.getUserByID(int) 2017-11-01 09:02:27.680  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/user/list],methods=[GET]}" onto public java.util.List<com.yiibai.mybatis.models.User> com.yiibai.mybatis.web.UserController.getUsers() 2017-11-01 09:02:27.685  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2017-11-01 09:02:27.685  INFO 5972 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2017-11-01 09:02:27.718  INFO 5972 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-11-01 09:02:27.719  INFO 5972 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-11-01 09:02:27.759  INFO 5972 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-11-01 09:02:28.045  INFO 5972 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup 2017-11-01 09:02:28.230  INFO 5972 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-11-01 09:02:28.235  INFO 5972 --- [           main] com.yiibai.mybatis.SpringbootMutiDsApp   : Started SpringbootMutiDsApp in 7.301 seconds (JVM running for 9.627) 

http://localhost:8080/user/list

http://localhost:8080/u/list

这里可以看出http://localhost:8080/user/list获得的是test2库中的user表数据

而http://localhost:8080/u/list获得的是yiibai库中(通过primaryJdbcTemplate)的user表数据

参考:

SpringBoot多数据源的配置(SpringBoot+MyBatis)

Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解

Spring 的持久化实例  

 

 

本文发表于2017年11月01日 12:34
(c)注:本文转载自https://my.oschina.net/u/2245781/blog/1559046,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2060 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1