通用JNDI数据源

来源:互联网 发布:淘宝如何隐藏订单 编辑:程序博客网 时间:2024/06/18 09:06

今天想把测试项目的数据源改成JNDI 的,但是不想每个项目都建立一个数据源,而是多个项目公用一个,测试项目嘛,搞简单点~


这样的话,URL就不能带目录名了,改成这样:

jdbc:mysql://localhost:3306                                                                                                                                       


问题来了,这样的话怎么查具体某一个目录里的表呢?

比如有一个库 hibernate ,我的hibernate的测试库,当运行这个项目时就会出异常了,原因是找不到指定的表


为了解决这个问题,查阅了hibernate的文档,找到如下解决方案

1. 在hibernate.cfg.xml 中可以设置全局默认的目录名:

<property name="default_catalog">hibernate</property>

2. 在 entity.hbm.xml 中可以设置局部目录名:

<hibernate-mapping package="entity" catalog="hibernate">


hibernate 是在table 名前加一个前缀,像下面这样:

insert into hibernate.t_users (name, age, verify, hiredate1, hiredate2, hiredate3) values(?, ?, ?, ?, ?, ?)


如果直接使用JDBC , 在Connection接口有个setCatalog方法,这个可以灵活使用哦~

或者使用表全名,就像上面hibernate做的一样,hibernate也可以修改源码,比如加一个配置参数读入目录名,然后setCatalog,这个大家自己研究吧~


至于mybatis , 由于是自写sql,所以和JDBC一样了,值得一提的是 DriverManager 类有一个这样的方法 getConnection(url, properties)

就是可以传入一个properties对象进去,实际上mybatis 自带的数据源实现就是用这个方法获取的Connection对象,上面说过setCatalog

方法了,所以在properties对象中添加一个catalog属性和值,就可以设置目录了


如有错误和不全面的,还请大家纠正和补充哈~

原创粉丝点击