====== Spring+Mybatis 多数据源配置_1 ======
===== 方法描述 =====
采用spring配置文件直接配置多个数据源,指定某个路径下的mapper文件使用哪个数据源,分别配置事务管理
===== 优缺点 =====
- 不支持分布式事务,一个事务中不能操作多个数据源
- 配置简单,但是不灵活
- 适合两个数据库没有相关性的情况
- 不适合master-slave性的多数据源的配置,需要根据业务类型进行细致配置,比如增删改在master上,不允许有主从同步时间延时的查询在master上,耗时查询在slave上等等
- vo,dao,mapper,service都需要两套
===== 主要代码 =====
==== application-context.xml ====
==== application-local-profile.xml ====
数据源配置,主要用于开发测试环境
==== application-test-profile.xml ====
JNDI数据源,在生产环境使用应用服务器的数据库连接池
==== jdbc.properties ====
#本地环境主数据源
master.local.jdbc.driverClassName=com.mysql.jdbc.Driver
master.local.jdbc.url=jdbc:mysql://127.0.0.1:3306/record?useUnicode=true&characterEncoding=UTF-8&useOldAlias
master.local.jdbc.username=root
master.local.jdbc.password=root
#本地环境备数据源
slave.local.jdbc.driverClassName=com.mysql.jdbc.Driver
slave.local.jdbc.url=jdbc:mysql://127.0.0.1:3306/record_slave?useUnicode=true&characterEncoding=UTF-8&useOldAlias
slave.local.jdbc.username=root
slave.local.jdbc.password=root
==== MasterUserService.java ====
package com.gxx.record.service.master;
import com.gxx.record.base.master.vo.User;
/**
*
* - Title:
* -
* 用户服务接口
*
* - Description:
* -
*
none
*
*
*
* @author Administrator
* @version 1.0, 2015年6月18日
* @since record
*
*/
public interface MasterUserService {
/**
* 新增用户
* @param user
*/
public void doSaveUser(User user);
/**
* 根据姓名查用户
* @param name
* @return
*/
public User getUserByName(String name);
}
==== MasterUserServiceImpl.java ====
package com.gxx.record.service.master.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.gxx.record.base.master.dao.UserMapper;
import com.gxx.record.base.master.vo.User;
import com.gxx.record.service.master.MasterUserService;
/**
*
* - Title:
* -
* 用户服务实现类
*
* - Description:
* -
*
none
*
*
*
* @author Administrator
* @version 1.0, 2015年6月18日
* @since record
*
*/
@Service("masterUserService")
public class MasterUserServiceImpl implements MasterUserService {
@Autowired
@Qualifier("masterUserMapper")
private UserMapper userDao;
/**
* 新增用户
* @param user
*/
public void doSaveUser(User user) {
userDao.insert(user);
}
/**
* 根据姓名查用户
* @param name
* @return
*/
public User getUserByName(String name) {
return userDao.getUserByName(name);
}
}
==== UserMapper.java ====
package com.gxx.record.base.master.dao;
import org.springframework.stereotype.Repository;
import com.gxx.record.base.master.vo.User;
@Repository("masterUserMapper")
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
/**
* 根据姓名查用户
* @param name
* @return
*/
User getUserByName(String name);
}
==== User.java ====
package com.gxx.record.base.master.vo;
public class User {
private Integer id;
private String name;
private String password;
private String createDate;
private String createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getCreateDate() {
return createDate;
}
public void setCreateDate(String createDate) {
this.createDate = createDate == null ? null : createDate.trim();
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime == null ? null : createTime.trim();
}
}
==== UserMapper.xml ====
id, name, password, create_date, create_time
delete from user
where id = #{id,jdbcType=INTEGER}
insert into user (id, name, password,
create_date, create_time)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
#{createDate,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR})
insert into user
id,
name,
password,
create_date,
create_time,
#{id,jdbcType=INTEGER},
#{name,jdbcType=VARCHAR},
#{password,jdbcType=VARCHAR},
#{createDate,jdbcType=VARCHAR},
#{createTime,jdbcType=VARCHAR},
update user
name = #{name,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
create_date = #{createDate,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=VARCHAR},
where id = #{id,jdbcType=INTEGER}
update user
set name = #{name,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
create_date = #{createDate,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
===== 附上代码 =====
{{:分享:技术:数据源:record.zip|}}