博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring+Mybatis多数据库的配置
阅读量:6990 次
发布时间:2019-06-27

本文共 3775 字,大约阅读时间需要 12 分钟。

场景:在Spring+Mybatis搭建的项目中要配置两个数据库,如何实现?

    其实也不是多难的事情,只要把配置配好了,一切问题就迎刃而解了,废话不多说,且看

如下配置……

 

配置一:jdbc.properties

配置两个数据库:myuser和myitem

myuser.jdbc.driver=com.mysql.jdbc.Drivermyuser.jdbc.url=jdbc:mysql://192.168.1.100:3306/myuser?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=truemyuser.jdbc.username=rootmyuser.jdbc.password=123456myitem.jdbc.driver=com.mysql.jdbc.Drivermyitem.jdbc.url=jdbc:mysql://192.168.1.100:3306/myitem?useUnicode=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=truemyitem.jdbc.username=rootmyitem.jdbc.password=123456

 

配置二:applicationContext.xml

配置:

    两个数据源(myUserDataSource和myItemDataSource)、

    一个动态的DataSource(dynamicDataSource);

   

   

 

有童鞋可能会问:DynamicDataSource这个类是怎么回事?

别急,这个类是自定义的一个类,此类必须继承:AbstractRoutingDataSource这个抽象类,并且重写

AbstractRoutingDataSource方法,动态数据源才会生效。

代码如下:

/** * 自定义动态数据源,继承AbstractRoutingDataSource抽象类, * 重写determineCurrentLookupKey方法 * @author root */public class DynamicDataSource extends AbstractRoutingDataSource {    @Override    protected Object determineCurrentLookupKey() {        return DBContextHolder.getDBType();    }}

 

问:DataSourceContextHolder这个类是什么干嘛的?

代码如下:

/***设置数据库类型,指定使用哪个数据库*@author root*/public class DataSourceContextHolder {        private static final ThreadLocal
contextHolder = new ThreadLocal
(); public static void setDbType(String dbType) { contextHolder.set(dbType); } public static String getDbType() { return ((String) contextHolder.get()); } public static void clearDbType() { contextHolder.remove(); }}

 

问:那事物怎么管理呢?别急,继续往下看……

配置三:applicationContext-transaction.xml

 

问:那么sqlSessionFactory怎么获取数据源呢?继续配置……

配置四:applicationContext-mybatis.xml

 

到这里,其实该配置的都已经配置完了。

问:那么在代码中该如何使用呢?比如说要插入的数据时该往哪个数据库中插入呢?我怎么保证数据就是我要插入的数据库呢?

我们都知道要插入数据首先是要生成实体类和表对应起来,把数据封装到实体类,通过映射关系和注解标识把数据插入到表中,所以亮点就在这里了,上面的问题也就不言而喻了。

在实体类上注解上添加注解:

如:myuser数据库中有user表,指定:数据库名.表名(重点!!!)

@Table(name = "myuser.user")public class User {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;// 用户id    @Length(min = 2, max = 20, message = "账户名为2-20位,由汉字、字母(不分大小写)、数字或下划线组成!")    private String loginname;// 用户名

 

这样指定之后,当在代码中要往myuser.user表中插入数据时,封装完的User对象作为参数传递到saveUser(User user)方法中,自动就会插入到myuser库中的user表中。

问:如果myitem表中也有user表怎么办?我要往myitem的user表中插入数据怎么实现?

答案:同上!

@Table(name = "myitem.user")public class ItemUser {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;// 用户id    @Length(min = 2, max = 20, message = "账户名为2-20位,由汉字、字母(不分大小写)、数字或下划线组成!")    private String loginname;// 用户名

 

看到这里,我相信大家已经有所了解了,祝你配置成功!

转载于:https://www.cnblogs.com/fang-wei/p/4913253.html

你可能感兴趣的文章
JAVA 消耗 CPU过高排查方法
查看>>
DOM和BOM
查看>>
prometheus监控示例
查看>>
细菌的繁殖
查看>>
Windows Server 2008远程连接人数限制修改及修改端口
查看>>
第70天:jQuery基本选择器(一)
查看>>
目前微信 微博 新浪 豆瓣等所有分享的js插件
查看>>
源码包安装
查看>>
处理:“ORA-28002: the password will expire within 7 days”的问题
查看>>
How to: Fix a network printer suddenly showing as offline in Windows Vista, 7 or 8 « Robin's Blog
查看>>
读书笔记—CLR via C#章节4-7
查看>>
Python的__init__, __new__魔法方法以及在__metaclass__元类中的使用
查看>>
nodejs 搞定 阿里云短信API 后面有适用于小白的解决方案
查看>>
7.11 批量创建房间
查看>>
android camera
查看>>
bzoj 2259 [Oibh]新型计算机 ——最短路(建图)
查看>>
洛谷2575高手过招
查看>>
自己动手实现线性映射,哈希映射
查看>>
依然莫名其妙的内容查询Web部件(Content Query Web Part)
查看>>
删除专家账号,要注意删干净
查看>>