我有一套表
因为数据实在太多,按类别分成多套表
不知道表的名字,表是根据文件解析生成的
如:
文件有3个: s0.txt,s1.txt,s2.txt
生成3个表 : s0user, s1user, s2user
3个表的列都是一样的,这些表名我要从一个主表里查询出来,
事先是不知道的
大家帮写个例子,谢谢拉
因为数据实在太多,按类别分成多套表
不知道表的名字,表是根据文件解析生成的
如:
文件有3个: s0.txt,s1.txt,s2.txt
生成3个表 : s0user, s1user, s2user
3个表的列都是一样的,这些表名我要从一个主表里查询出来,
事先是不知道的
大家帮写个例子,谢谢拉
for (int i=0;i<list.size();i++)
{
Maintable mt=(Maintable ) list.get(i);
// jdbc的方式查询
rs=stmt.execute("select * from "+mt.getTableName+ " ");
}
要用hsql查询,帮忙
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://127.0.0.1:3306/xizhiyao
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">
LocalMysql
</property>
<property name="connection.password">19820221</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="show_sql">true</property>
<mapping resource="mytest/Lesson.hbm.xml" />
<mapping resource="mytest/Teacher.hbm.xml" /> </session-factory></hibernate-configuration>
根据你的主表写一个 POJO类
public class maintable implements java.io.Serializable {
// Fields 我就是举例哦
private Integer mainId;
private String tableName;
set get 方法省略
}
再写一个映射类 maintable.hbm.xml
<hibernate-mapping>
<class name="*.*.maintable " table="maintable ">
<id name="mainId" type="java.lang.Integer">
<column name="maintable_id" />
<generator class="native" />
</id>
<property name="tableName" type="java.lang.String">
<column name="table_name" length="10" />
</property>
</class>
</hibernate-mapping>
封装一个HibernateSessionFactory类用来获得session
public class HibernateSessionFactory {
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
threadLocal.set(session);
} return session;
}
}//网上很多例子 要是LZ用myeclipse的话 这些都是myeclipase自动生成的
使用
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
Query query = session.createQuery("from maintable");
List list = query.list();
String[] tablename = new String[list.size()];
for (int i=0;i<list.size();i++)
{
mintable mt=(Maintable ) list.get(i);
tablename[i] = mt.getTableName();//获得了存在主表中的名字 可以用与以后查询使用
}
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping> //映射开始
<class name="com.cochance.audit.model.Auditthrowdaylightonsth" //映射类的包类名
table="AUDITTHROWDAYLIGHTONSTH" schema="CO_CHANCE"> //数据库的相应映射
<id name="audthrowsthid" type="java.lang.Long"> //主键
<column name="AUDTHROWSTHID"/> //主键对应数据库列
<generator class="sequence" /> //主键生成方式 (我这里是Oracl序列生成方式)
</id>
<property name="name" type="java.lang.String"> //映射类的属性名
<column name="NAME" length="100" /> //对应数据库字段名
</property>
<property name="year" type="java.util.Date">
<column name="YEAR" length="7" />
</property>
</class>
</hibernate-mapping> //映射结束这是hibernate 映射文件的大概方法!还可以 控制 一对多,多对一,多对多等方式,但很麻烦,也可向上面介绍的简单映射,,其他自己程序控制!
one to one 举例有 Teacher (保存TEACHER信息) TeacherCard (保存teacher的一些卡号等唯一信息的比如身份证) TeacherCard 根据Teacher生成
首先在Teacher POJO中加入TeacherCard 字段(set get ) 然后在TeacherCard POJO中加入一个Teacher字段 同样 (set get)
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.beans"> <class name="Teacher" table="teacher">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String" not- null="true" />
<property name="address" column="address" type="java.lang.String" />
<one-to-one name="teachercard" class="org.beans.Teachercard" cascade="all">
</one-to-one>
<!--one to one 设定与设定property 是一样的 cascade表示控制权 -->
</class>
</hibernate-mapping><?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="org.beans">
<class name="Teachercard" table="teachercard">
<id name="id" column="id" type="java.lang.Integer">
<generator class="foreign">
<param name="property">teacher</param>
</generator>
</id>
<!--利用外键生成 Teachercard的主键 -->
<property name="cardid" column="cardid" type="java.lang.Integer" />
<one-to-one name="teacher" class="org.beans.Teacher"></one-to-one>
</class>
</hibernate-mapping>
使用
Teachercard tc = new Teachercard();
Teacher t = new Teacher();
tc.setTeacher(t); t.setTeachercard(tc);
其余属性添加剩率
session.save(t);//cascade设置为ALL所以 Teachercard的插入也完成 查询时同理One to Many(可以为单向 双向 我说下双向的)
举例 还是 Teacher 可以有多个Lesson
在Teacher 中加入private Set lessons = new HashSet(); (SET GET)
在Lsson 中加入private Teacher teacher = new Teacher();(SET GET)
HBM设置 只需要增加 剩下都是一样的
teacher.nbm.xml
<set name="lessons" table="lesson" inverse="true" >
<key column="lesson_teacherid"></key>
<one-to-many class="org.beans.Lesson"/>
</set>
lesson.hbm.xml
<many-to-one name="teacher" class="org.beans.Teacher" column="lesson_teacherid">
</many-to-one>
使用与
Teacher t = new Teacher(); Lesson l = new Lesson();
t.getLessons().add(l);//这里比较特别
l.setTeacher(t);
session.save(t);Many to Many
复杂一些 需要建立一个中间表 把需要多对多关联的两张表主键保存在 中间表中
举例 customers 和corder
分别在两给POJO类中加入 SET与ONE TO MANY 时一样 省略
customers .hbm.xml中<set name="corders" table="cu_co_table" inverse="true">
<key column="customer_id"></key>
<many-to-many class="org.hibernate.beans.Corder" column="order_id"></many-to-many>
</set>corders.hbm.xml中
<set name="customers" table="cu_co_table"
cascade="save-update"
inverse="false">
<key column="order_id"></key>
<many-to-many class="org.hibernate.beans.Customer" column="customer_id">
</many-to-many>
</set>
使用与 one to many相似 只是两个都是 SET了