javaee之hibernate之many-to-one

来源:互联网 发布:mac ansible 编辑:程序博客网 时间:2024/06/06 14:26
<?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">mkk</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="many2one_domain/Bumen.hbm.xml" ></mapping><mapping resource="many2one_domain/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="many2one_domain"><!-- 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></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="many2one_domain"><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 many2one_domain;public class Bumen implements java.io.Serializable {/** *  */private static final long serialVersionUID = 1L;private Integer ID;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 many2one_domain;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().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 org.hibernate.Session;import org.hibernate.Transaction;import many2one_domain.Bumen;import many2one_domain.Students;import util.SessionFactoryUtil;public class TestMain {public static void main(String[] args) {// TODO Auto-generated method stub// 做一些逻辑(添加一些数据)Session session = null;Transaction transaction = null;try {session = SessionFactoryUtil.getCurrentSession();transaction = session.beginTransaction();// 添加学生(学生ID是自增长的所以不需要指定. genarate里面class属性设置成identity )Students students = new Students();// 添加部门(部门的ID 也是自增长的。 在id 标签里的generate里面的class属性设置成identity)Bumen bumen = new Bumen();// 这里设置学生的信息Students s2 = new Students();s2.setName("小明");Students s3 = new Students();s3.setName("小红");students.setName("马凯凯");// 设置部门的信息Bumen b2 = new Bumen();b2.setName("中科院");bumen.setName("国务院");// 这一句比较重要(把students的值设置到部门里面,用配置文件里的many-to-one的标签,然后设置成的外键,把students的信息添加到这个部门)students.setBumen(bumen);s2.setBumen(b2);s3.setBumen(b2);// 先保存bumen,这样避免了,置空students里面外键bumen的步骤!减少了额外的update语句。session.save(bumen);session.save(students);session.save(b2);session.save(s2);session.save(s3);// 多个对象的话直接new多个对象,做相应的外键的处理,然后就可以一起提交了!transaction.commit();} catch (Exception e) {// TODO: handle exception} finally {if (session != null) {session.close();}}}}


0 0