Spring、Hibernate怎么动态加载数据库、表
2、sqlite也是以时间命名的。如:db_yyyymmdd
问题1中需要动态生成表与POJO的对应关系。
问题2中需要动态加载数据库。
求大牛们帮忙,谢谢啦! 展开
使用MyEclipse开发环境,生成对应关系:1.windows-show View-other
输入db,选择BD BROWSER
我晕,只能插入一张图片!
我下面只能写了,你要努力的理解啊!
选择好DB Browser后,进入一个MyElipse自带的数据浏览界面,右击选择new,然后进入一个创建连接的页面,数据你的数据库连接的具体信息,包括驱动,连接名称(自定义),驱动jar文件,连接url,用户名,和密码!然后下一步,选择display the selected schemas单选按钮-然后选择右边的add按钮-选择OK-出现的界面是许多的复选按钮-你要选择你自己的登录用户名信息-然后选择OK-然后结束-到这里就在MyEclipse中创建了到数据库的连接信息!
下面:双击你的连接名称,然后选择你的用户名-然后选择table-然后里面有很多你的表,然后按住ctrl键,选中你的表可以多选,然后右击-然后选择-Hibernate reverse engieerning(hibernate反转引擎)-然后下面的操作,选择你的项目信息(一定是添加过hibernate支持的)-
然后-勾选Hibernate mapping file (* hbm.xml) for...
勾选 Java DATA object (POJO<>DB TABLE)
然后是拷贝jar包到项目,然后下一步,做一些表到对象的映射操作,一看就知道的,然后
下一步,等待程序自动完成!基本操作就是这样!谢谢
对每个pojo类建立一个映射文件,名称是简短类名.hbm.xml,存放位置与pojo类一致。
问题2中需要动态加载数据库。
在hibernate.cfg.xml中配置数据库连接信息和方言,设置自动建表语句。
是查询的时候动态去改表名或库名 不是建表或建库的时候
用泛型来解决你的问题:我写的这个基础类,你继承它测试试试。
public abstract class BaseDao {
private Class clazz;
public BaseDao() {
ParameterizedType pt = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.clazz = (Class) pt.getActualTypeArguments()[0];
}
private SessionFactory sessionFactory;
//用spring注入进来
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void batchHandle(String hql, Serializable... serializables) {
Query query = getSession().createQuery(hql);
for (int i = 0; i findEntityByHQL(String hql, Serializable... serializables) {
Query query = getSession().createQuery(hql);
for (int i = 0; i < serializables.length; i++) {
query.setParameter(i, serializables[i]);
}
return query.list();
}
public T getEntity(String id) {
T t = (T) getSession().get(clazz, id);
return t;
}
public T loadEntity(String id) {
return (T) getSession().load(clazz, id);
}
public void saveEntity(T t) {
getSession().save(t);
}
public void saveOrUpdateEntity(T t) {
getSession().saveOrUpdate(t);
}
public Object uniqueResult(String hql, Serializable... serializables) {
Query query = getSession().createQuery(hql);
for (int i = 0; i < serializables.length; i++) {
query.setParameter(i, serializables[i]);
}
return query.uniqueResult();
}
public void updateEntity(T t) {
getSession().update(t);
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
}