javaee之hibernate(one-to-many)

来源:互联网 发布:淘宝的价格排列欺骗 编辑:程序博客网 时间:2024/06/13 00:28
<?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">        <!--这里开始配置数据库相关的信息-->        <hibernate-configuration>              <!-- 这里是配置和相应的数据库的类型的配置 -->        <session-factory>                <!-- 详细的配置信息可以到hibernate的自带的hibernate的配置文件中找到 -->        <!-- 找到相应的类型进行配置 -->                <!-- 这里用SqlServer2008配 -->                <!-- 第一个配置链接的驱动 -->        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>    <!-- 第二个配置链接的URL --><!-- 数据库的名称因人而异 --><property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=User</property><!-- 第三个配置用户名 --><property name="connection.username">sa</property><!-- 第四个配置密码 --><property name="connection.password">****</property><!-- 第五个配置dialect,告诉hibernate此次用哪一种数据库来链接 --><!-- 这个value也是在自带的配置文件中会给出 --><property name="dialect">org.hibernate.dialect.SQLServerDialect</property><!-- 这里是配置绑定线程,(现在不太清楚作用) --><property name="hibernate.current_session_context_class">thread</property><property name="show_sql">true</property><!-- 自动生成相应的表 --><!-- 用update可以更新数据,类型变化也可以更新,具体的数据并不会改变 --><property name="hbm2ddl.auto">update</property><!-- 现在配 置映射的文件(路径要写这个工程下的路径) --><mapping resource="one2many/Bumen.hbm.xml" ></mapping><mapping resource="one2many/Students.hbm.xml" ></mapping> </session-factory>        </hibernate-configuration>              
<?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="one2many"><!-- classname表示类名 --><class name="Bumen"><id name="ID" type="java.lang.Integer"><!-- 下面用自增长的策略,这个identity不能用在orecol里面 --><generator class="identity"><!--  --><!-- <param name="identity">xulie</param> --></generator></id><!-- 这里配置类的属性和标的字段的对应 cooumn指表里字段的属性信息 --><property name="name" type="java.lang.String"><column name="name" length="33" ></column></property><!-- 配置one 2 many name指的是bumen中set的变量名 --><!-- cascade 用于级联操作,保存时,如果有想关联的未保存。会自动关联额庵后保存 --><set name="students" cascade="save-update"><!-- class如果不确定路径,可以写全路径 --><!-- 指定students的外键的名称 ,用key指定,必须要配置--><key column="bumen"></key><!-- Students是将要映射成多个的类的类名 --><one-to-many class="Students"  /></set></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"><!-- mapping里面写包名 ,class里面写类名--><hibernate-mapping package="one2many"><class name="Students"><id name="ID" type="java.lang.Integer"><generator class="identity"></generator></id><property name="name" type="java.lang.String"><column name="name" length="64" not-null="true"></column></property><!-- 用many to one来配置部门的信息,,column="bumen"表示自动生成的外键的名称为bumen --><many-to-one name="bumen" column="bumen"></many-to-one></class></hibernate-mapping>
package one2many;import java.util.Set;public class Bumen implements java.io.Serializable {/** *  */private static final long serialVersionUID = 1L;private Integer ID;// 配置一个学生的集合,用于后面的onetomanyprivate Set<Students> students;public Set<Students> getStudents() {return students;}public void setStudents(Set<Students> students) {this.students = students;}public Integer getID() {return ID;}public void setID(Integer iD) {ID = iD;}public String getName() {return name;}public void setName(String name) {this.name = name;}private String name;}

package one2many;public class Students implements java.io.Serializable {/** *  */private static final long serialVersionUID = 1L;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getID() {return ID;}public void setID(Integer iD) {ID = iD;}public Bumen getBumen() {return bumen;}public void setBumen(Bumen bumen) {this.bumen = bumen;}private Integer ID;private Bumen bumen;}

package util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class SessionFactoryUtil {// 写一个获取session的工具类// 这里写之前配置文件里那个配置文件绑定线程的那个private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();// 0.现在静态的成员属性private static SessionFactory sessionFactory = null;// 要把这个做成单例的所以是私有的。只能通过方法获取// 1.这里先写一个空的构造方法public SessionFactoryUtil() {}// 2.写一个获得sessionFactory的静态语句块,加载的时候就开始执行static {sessionFactory = new Configuration().configure("one2many/hibernate.cfg.xml").buildSessionFactory();}// 3.这里写通过sessionfactory获取session的静态方法,贡使用public static Session getSession() {return sessionFactory.openSession();}// 获取当前的sessionpublic static Session getCurrentSession() {Session session = threadLocal.get();if (session == null) {// 如果线程为空,就从新打开一个sessionsession = sessionFactory.openSession();// 然后加入到这个线程,与之相互绑定threadLocal.set(session);}return session;}}
package view;import java.util.HashSet;import java.util.Set;import org.hibernate.Session;import org.hibernate.Transaction;import one2many.Bumen;import one2many.Students;//import many2one_domain.Bumen;//import many2one_domain.Students;import util.SessionFactoryUtil;public class TestMain {public static void main(String[] args) {// TODO Auto-generated method stubSession session = null;Transaction transaction = null;try {session = SessionFactoryUtil.getCurrentSession();transaction = session.beginTransaction();/* * // 现在直接从数据库里面查询一下3号部门的学生的数量 Bumen bumen = (Bumen) * session.get(Bumen.class, 3); Set<Students> students = * bumen.getStudents(); *  * // 用for循环加强遍历一下 for (Students s : students) { *  * System.out.println(s.getName()); } */// 添加学生Bumen bumen = new Bumen();bumen.setName("市场部门");Students students = new Students();students.setName("市场部门1");Students students2 = new Students();students2.setName("市场部门2");// 吧学生放到一个set里面,然后再把set放到部门里面的那个set属性里面Set<Students> sets = new HashSet<Students>();sets.add(students);sets.add(students2);bumen.setStudents(sets);// 最后保存,提交即可// 级联保存,再原来的xml里面的set属性里添加session.save(bumen);transaction.commit();} catch (Exception e) {// TODO: handle exception} finally {if (session != null) {session.close();}}}}



0 0
原创粉丝点击