Hibernate实例

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

使用Hibernate的一般过程
1)设计对象模型
2)设计操作对象的接口
3)如果不是使用maven的话,需要加入相关的jar包
4)配置对象关系映射文件(ORM)
5)配置hibernate全局配置文件
6)设计Hibernate工具类
7)实现设计的操作对象的接口
8)使用

实例
本文以操作用户表为例,数据库为mysql5.7,IDE为eclipse Java EE IDE for Web Developers.

实现步骤
1)在mysql数据库中创建数据库,取名为myhibernate
2)打开eclipse,创建普通的Java Project,取名为HibernateDaoDemo
3)创建用户对象User,全名为com.peace.domain.User,具体体代码如下:

package com.peace.domain;

import java.util.Date;

public class User {
    private int id;
    private String name;
    private Date birthday;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", birthday=" + birthday + "]";
    }
}

4)设计对用户表进行增删改查的接口类UserDao,全名为com.peace.dao.UserDao,具体如下:

package com.peace.dao;


import com.peace.domain.User;

public interface UserDao {
    public void savaUser(User user) ;
    public User findUserByName(String name);
    public User findUserById(int id);
    public void updateUser(User user);
    public void remove(User user);
}

5)导入需要的依赖jar包,这里用的是hibernate-3.2,导入的包如下图中的hibernate3.jar和lib下的所有包
这里写图片描述
另外,hibernate底层也是基于jdbc,所以还需要导入mysql-connector-java-5.1.39-bin.jar
6)配置User对象的关系映射文件User.hbm.xml,内容如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
    package="com.peace.domain">

    <class name="User">     
        <id name="id">
            <generator class="native"/>
        </id>

        <property name="name" unique="true"/>
        <property name="birthday"/>

    </class>

</hibernate-mapping>

7)配置hibernate全局配置文件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 name="foo">
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myhibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">1234</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


        <property name="hibernate.hbm2ddl.auto">create</property>
        <property name="hibernate.show_sql">true</property>
        <mapping resource="com/peace/domain/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

8)设计实现Hibernate工具类HibernateUtil,全名为com.peace.dao.HibernateUtil,实现如下:

package com.peace.dao;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


public final class HibernateUtil {
    private static SessionFactory sessionFactory = null;
    private HibernateUtil() {
        // TODO Auto-generated constructor stub
    }
    static {
        Configuration cfg = new Configuration();
        cfg.configure();
        sessionFactory = cfg.buildSessionFactory();
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public static Session getSession() {
        return sessionFactory.openSession();        
    }
}

9)继承,实现操作用户表的接口UserDaoHibernateImpl,全名com.peace.dao.impl.UserDaoHibernateImpl,实现如下:

package com.peace.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.peace.dao.HibernateUtil;
import com.peace.dao.UserDao;
import com.peace.domain.User;

public class UserDaoHibernateImpl implements UserDao {

    @Override
    public void savaUser(User user) {
        // TODO Auto-generated method stub
        Session s = null;
        Transaction tx = null;
        try {
            s = HibernateUtil.getSession();
            tx = s.beginTransaction();
            s.save(user);
            tx.commit();
        } finally {
            if(s != null)
                s.close();
        }
    }

    @Override
    public User findUserByName(String name) {
        // TODO Auto-generated method stub
        Session s = null;
        try {
            s = HibernateUtil.getSession();
            Criteria c = s.createCriteria(User.class);
            c.add(Restrictions.eq("name", name));
            User user = (User) c.uniqueResult();
            return user;
        } finally {
            if(s != null) {
                s.close();
            }
        }
    }

    @Override
    public User findUserById(int id) {
        // TODO Auto-generated method stub
        Session s = null;
        try {
            s = HibernateUtil.getSession();
            User user = (User) s.get(User.class, id);
            return user;
        } finally {
            if(s != null) {
                s.close();
            }
        }
    }

    @Override
    public void updateUser(User user) {
        // TODO Auto-generated method stub
        Session s = null;
        Transaction tx = null;
        try {
            s = HibernateUtil.getSession();
            tx = s.beginTransaction();
            s.update(user);
            tx.commit();
        } finally {
            if(s != null)
                s.close();
        }
    }

    @Override
    public void remove(User user) {
        // TODO Auto-generated method stub
        Session s = null;
        Transaction tx = null;
        try {
            s = HibernateUtil.getSession();
            tx = s.beginTransaction();
            s.delete(user);
            tx.commit();
        } finally {
            if(s != null)
                s.close();
        }
    }

}

10)实现测试类DAOTest,对设计的接口测试,代码如下:

package com.peace;

import java.util.Date;

import com.peace.dao.UserDao;
import com.peace.dao.impl.UserDaoHibernateImpl;
import com.peace.domain.User;

public class DAOTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        UserDao dao = new UserDaoHibernateImpl();
        User user = new User();
        user.setName("ABC");
        user.setBirthday(new Date());
        dao.savaUser(user);

        user.setName("DEF");
        dao.updateUser(user);

        User u1 = dao.findUserById(user.getId());
        System.out.println(u1);

        User u2 = dao.findUserByName("DEF");
        System.out.println(u2);

        dao.remove(user);
    }

}

11)结果
这里写图片描述

附——工程代码结构图
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值