浅学Hibernate

Hibernate学习文档

1、配置Hibernate.jar包  有一个src目录下Hibernate.cfg.xml(数据库的配置)

<!DOCTYPE hibernate-configuration PUBLIC

    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

    <!--显示执行的SQL语句-->

    <property name="show_sql">true</property>

<!--连接字符串-->

<property name="connection.url">

jdbc:mysql://localhost:3306/persontest

</property>

    <!--连接数据库的用户名-->

<property name="connection.username">root</property>

<!--数据库用户密码-->

<property name="connection.password">YINFUHAO</property>

       <!--数据库驱动-->

       <property name="connection.driver_class">

com.mysql.jdbc.Driver

</property>

       <!--选择使用的方言-->

       <property name="dialect">

org.hibernate.dialect.MySQLDialect

</property>

      

       <property name="hbm2ddl.auto">create</property> <!—updateà

       <property name="show_sql">true</property>

    <!--映射文件 -->

       <mapping resource="cn/henu/domain/User.hbm.xml" />

<!—将配置好的xml文件映射到hibernate-à

    </session-factory>

</hibernate-configuration>

一般一个javaBean对应一个xxx.hbm.xml文件  例如User.java

publicclass User {

    private String name;

    privateintid;

    private Date birthday;

    public Date getBirthday() {

       returnbirthday;

    }

    publicvoid setBirthday(Date birthday) {

       this.birthday = birthday;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    publicint getId() {

       returnid;

    }

    publicvoid setId(int id) {

       this.id = id;

    }

   

}

对应的User.hbm.xml

<?xml version="1.0"?>

 

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="cn.henu.domain">

 

    <class name="User" table="person">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name" />

       <property name="birthday" />

      

    </class>

</hibernate-mapping>

接口UserDao中

publicinterface UserDao {

    public User findById(int id);

   

    public User findByName(String name);

   

    publicvoid remove(User user);

   

    publicvoid Update(User user);

   

    publicvoid saveUser(User user);

   

}

实现类UserDaoImpl

publicclass UserDaoImpl implements UserDao{

 

    @Override

    publicvoid Update(User user) {

       Session session=null;

       try {

           session=HibernateUtil.getSession();

           Transaction transaction=session.beginTransaction();

           session.update(user);

           transaction.commit();      

       } catch (Exception e) {

           if(session!=null){

              session.close();

           }

       }     

    }

 

    @Override

    public User findById(int id) {

       Session session=null;

       try {

           session=HibernateUtil.getSession();

           User user=(User)session.get(User.class, id);

           return user;

       } finally{

           if(session!=null){

              session.close();

           }

       }  

    }

 

    @Override

    public User findByName(String name) {

       Session session=null;

       try {

           session=HibernateUtil.getSession();

           Criteria criteria=session.createCriteria(User.class);

           criteria.add(Restrictions.eq("name",name));

           User user=(User) criteria.uniqueResult();

           return user;

       } finally{

           if(session!=null){

              session.close();

           }

       }  

    }

 

    @Override

    publicvoid remove(User user) {

       Session session=null;

       try {

           session=HibernateUtil.getSession();

           Transaction transaction=session.beginTransaction();

           session.delete(user);

           transaction.commit();          

       } catch (Exception e) {

           if(session!=null){

              session.close();

           }

       }  

    }

 

    @Override

    publicvoid saveUser(User user) {

       Session session=null;

       Transaction transaction=null;

       try {

           session=HibernateUtil.getSession();      

           transaction=session.beginTransaction();         

           session.save(user);        

           transaction.commit();                 

       } catch (Exception e) {

           if(session!=null){

              session.close();

           }

       }

    }

}

一般的情况下Hibernator初始化封装

publicfinalclass HibernateUtil {

    privatestatic SessionFactory sessionFactory;

    private HibernateUtil(){}

    static{      

       Configuration configuration=new Configuration();    

       configuration.configure(); 

       sessionFactory=configuration.buildSessionFactory(); 

    }

    publicstatic SessionFactory getSessionFactory(){

       returnsessionFactory;

    }  

    publicstatic Session getSession(){

       returnsessionFactory.openSession();

    }

}

2、  session中重要方法

delete

update

get     load

save

persist

saveOrUpdate

3、  实体对象的三种状态

4、  基本练习user对象的增删改查操作

5、  Hibernate中数据库关系

<1>  一对多关系   一个部门对应多个员工

Department  Set<Employee> emps;  id ;  name;

Employee id; name; Department  depart;

Department.hbm.xml

<class name="Department" table="department">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name" />

       <set name="employees">

           <key column="departid"></key>

           <one-to-many class="Employee"/>

          

       </set>    

</class>

注:若Department类中  List<Employee> emps;

    <list-index name="employees">

           <key column="departid"></key>

           <one-to-many class="Employee"/>

          

       </list>       有顺序之分

    <bag></bag> 无顺序之分

 

Employee.hbm.xml

<class name="Employee" table="employee" >

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name" />

<class>

    <2>、多对一     多个职员对应一个部门

Employee.hbm.xml

<class name="Employee" table="employee" discriminator-value="0">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name" />

       <many-to-one name="department" column="departid"></many-to-one>

<class>

<3>、一对一关系   Person  对应   IDCard

   Person 中  id;  name;  IDCard;

   IDCard 中  Date ; Perosn;

   <id name="id">

           <generator class="foreign"/>

       </id>

       <property name="name" />

<one-to-one name=”idCard” constrained=”true”/>

<4>、多对多    Teacher     Student

 

Teacher中有Set< Student> students;

    <set name=”students” table=”teacher_student”>

       <key column=”teacher_id”/>

       <many-to-many class=”Student” column=”student_id”/>

    </set>

Student中有Set< Teacher> teachers;

    <set name=”teachers” table=”teacher_student”>

       <key column=”Student_id”/>

       <many-to-many class=”Teacher” column=”teacher_id”/>

    </set>

6、继承关系的映射

Skiller  extends  Employee

   增加属性  String  skill

Sales  extends  Employee

  增加属性  int sell

<1>同一表中的映射  数据库中生成一个table  employee

   Employee.hbm.xml 中增加

<class name="Employee" table="employee" discriminator-value="0">

 

<subclass name="Skiller" discriminator-value="1">

           <property name="skill"/>

       </subclass>

       <subclass name="Sales" discriminator-value="2">

           <property name="sell"/>

</subclass>

<2>、创建table skillertable sale  table employee联系

              <joined-subclass name="Skiller" table="skilller">

           <key column="emp_id"/>

           <property name="skill"/>

       </joined-subclass>

      

       <joined-subclass name="Sales" table="sale">

           <key column="emp_id"/>   <!—-emp_id自己定义>

           <property name="sell"/>

    </joined-subclass>

<3> emplyee 和 skiller  在一个表中  另建table sale

<subclass name="Skiller" discriminator-value="1">

           <property name="skill"/>

       </subclass>

      

       <subclass name="Sales" discriminator-value="2">

           <join table="sale">

              <key column="emp_id"/>

              <property name="sell"/>

           </join>

          

</subclass>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值