首页 > Web开发 > 详细

Hibernate

时间:2019-03-06 12:57:58      阅读:156      评论:0      收藏:0      [点我收藏+]

1. Hibernate概念

1.1. 对象持久化

1.1.1. 什么是持久化?
    持久化就是将数据同步保存到数据库或某些存储设备中。
1.1.2. 持久化层
    持久化层就是与持久存储设备交互的逻辑层,如在数据库中对数据库的增加、删除、查找和修改操作就由持久化层来处理

1.1.3. 持久化机制
        1. JDBC调用
        2.自家的O/R mapping
        3.专门的O/R mapping技术(Hibernate,iBatis,topLink)

2. JDBC之炀

2.1. JDBC调用面临的问题
   
2.1.1. 烦琐的代码
  String insertSql = "insert into books (author,title,publish,price)     values(?,?,?,?)";
  Connection con = DBConnection.getConnection();
  PreparedStatement prst = con.prepareStatement(insertSql);
  prst.setString(1, book.getAuthor());
  prst.setString(2, book.getTitle());
  prst.setString(3, book.getPublish());
  prst.setDouble(4, book.getPrice());
  int count = prst.executeUpdate();
  prst.close();
  con.close();


session.save(book);
2.1.2. 多表连接时,过于复杂
技术分享图片

 


2.1.3. 表间级联的问题
如上例中要删除一个部门时级联删除员工,或者级联取得某个部门的所有员工的职位信息
2.1.4. 层与层之间的严重耦合
2.1.4.1. 编写持久层的人必须熟悉底层数据表结构、熟悉SQL
2.1.4.2. 表的变动将带来程序的大量修改
2.1.4.3. 持久存储层(数据库)的变换将导致数据访问层的大量变化

 

3. O-R映射(mapping)

3.1. O-R映射(mapping)
O/R Mapping就是对象到关系的映射,它把对表直接进行的操作变成对持久化对象的操作,如:
    
    session.get(UserVO.class, userid); //查找某个用户
    session.update(uservo); //修改用户
技术分享图片

 


 3.2. 使用ORM

3.2.1. O/R Mapping就是对象到关系的映射,它把对表直接进行的操作变成对持久化对象属性和方法的操作

技术分享图片

 

3.2.1.1. 如果得到了department对象可以:
  通过department.getEmployees() 得到该部门的所有员工
3.2.1.2. 如果得到了员工对象,可以:
  通过emp.getDepartment() 得到部门对象
  通过emp.getDepartment().getDeptName() 得到所在部门名称

 

 4. 开启开始Hibernate之旅

4.1. 下载安装Hibernate
将下载包解压后将Hibernate3.jar和lib目录下的包拷到/WEB-INF/lib下
技术分享图片

 



 4.2. 注册登陆实例


4.2.1. 规划
4.2.1.1. 值对象
4.2.1.2. 业务处理类
技术分享图片

 

4.3. 编写ValueObject
4.3.1. 用于在Web层和业务层之间传输数据,避免使框架组件渗透到业务组件
public class UserVO  implements Serializable{
    private int oid;
    private String userName;
    private String password;
    private String email;    
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
………

 

4.4. 实体-关系(O-R)映射文件
4.4.1. 实体-关系(O-R)映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name=“login.service.UserVO” table=“Account”>
      <id name="oid" column="userid" unsaved-value=“0">
            <generator class="native" />
      </id>
      <property name="userName" column="loginName"  type="string"  />
      <property name="password"   type="string" />
      <property name="email" type="string" />
    </class>
</hibernate-mapping>

技术分享图片

 


4.5. Hibernate全局配置文件
4.5.1. Hibernate全局配置文件:
4.5.1.1. 是Hibernate程序必不可少的文件
4.5.1.2. 文件名通常为hibernate.cfg.xml,放在CLASSPATH下
4.5.1.3. 配置数据库连接属性(驱动、URL … )
4.5.1.4. 指定所有的mapping文件
4.5.1.5. hibernate.cfg.xml
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory >
      <property name="show_sql">true</property>
      <property name="connection.driver_class">
        com.microsoft.jdbc.sqlserver.SQLServerDriver
      </property>
      <property name="connection.url">
         jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=study
      </property>
      <property name="connection.username">sa</property>
      <property name="connection.password">123</property> 
      <property name="dialect">
          org.hibernate.dialect.SQLServerDialect
     </property>
      <mapping resource="Account.hbm.xml" />        
    </session-factory>        
</hibernate-configuration>

 

4.6. Hibernate程序包含文件
技术分享图片

 

 

 5. 编写步骤

5.1. 定义数据库表结构(Account表)
5.2. 编写实体类(值对象UserVO.java)
5.3. 编写实体-关系mapping文件(Account.hbm.xml)
5.4. 编写Hibernate全局配置文件,将映射文件加入
5.5. 编写数据库访问类(UserService_HBN.java)
5.6. 编写Action、ActionForm、JSP
5.7. 示例
5.7.1. 编写数据库访问对象
//导入Hiberenate包,在org.hibernate.*下

public class UserService_HBN {
    private SessionFactory sessionFactory = null;
    public UserService_HBN() {
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }

    public void save(UserVO user) {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.save(user);
        tx.commit();
        session.close();
    }
技术分享图片
5.7.2.查找所有用户
    public boolean findAllUser() {
        User u = null;
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        Query query = session.createQuery("from UserVO");
        List users = query.list(); 
        tx.commit();
        session.close();    
        return users;
    }
技术分享图片

 5.7.3.判断用户是否合法


public boolean checkUser(UserVO user) {
        User u = null;
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        Query query = session.createQuery("from UserVO u where     u.userName=? and u.password=?");
        query.setString(0, user.getLoginName());
        query.setString(1,user.getPassword());
        UserVO user = (UserVO)query.uniqResult(); //必须保证结果唯一
        tx.commit();
        session.close();
        if (user != null ) {
         return true;
        }
        return false;
    }

技术分享图片
5.7.4.操纵实体对象
5.7.4.1. 修改实体对象
Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    session.update(user);
    tx.commit();
    session.close();
技术分享图片

5.7.4.2. 删除实体对象

Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    session.delete(user);
    tx.commit();
    session.close();
技术分享图片

 

 

6. 小结

6.1. 使用Hibernate与通常的JDBC编程的区别
6.1.1. Hibernate程序的组成
6.1.2. Hibernate程序的编写步骤
6.1.3. Hibernate操纵实体对象
6.1.3.1. 查询:  query.list(),  query.uniqResult()
6.1.3.2. 保存:  session.save(obj)
6.1.3.3. 修改:  session.update(obj)
6.1.3.4. 删除:  session.delete(obj)

 

Hibernate

原文:https://www.cnblogs.com/xkjlive/p/10482434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!