今天想把测试项目的数据源改成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属性和值,就可以设置目录了
如有错误和不全面的,还请大家纠正和补充哈~