hibernate初步学习(一)——使用hibernate实现简单的增删改查

一、三层体系结构

表示层 业务层 数据层

二、四层体系结构

表示层 业务层 持久层 数据层

三、ORM object/Relation Mapping对象关系映射

一种为了解决面向对象与关系数据库存在不匹配的现象的技术,将java程序中的对象自动持久化到关系数据库中。

四、流行的ORM中间件产品

1.hibernate
2.mybatis

五、Hibernate简介

他是面向java环境的对象/关系数据库映射工具,此工具不仅仅可以管理java类到数据库表的映射,还提供数据库查询和获取数据的方法。

它的目标是:对于开发者通常的数据持久化相关变成任务,解放其中95%的工作。

对于以数据为中心的程序来说,Hibernate并不是最好的解决方案;适用于基于Java的中间层应用中,是Hibernate最有用的应用场景。

六、Hibernate优点

1.减少乏味编码
2.更加面向对象的设计
3.更好的性能,持久层框架提供了优秀的性能优化机制
4.更好的移植性

七、第一个hibernate程序

1.首先需要导入hibernate和orcl数据库的jar包放在web-inf的lib下:
项目结构图
2.建立javabean:
Person.java

    package com.it.hibernate.entity;
    public class Person {
    private int pid;
    private  String pname;
    private String pwd;
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public Person(int pid, String pname, String pwd) {
        super();
        this.pid = pid;
        this.pname = pname;
        this.pwd = pwd;
    }
    public Person() {
        super();
    }
    @Override
    public String toString() {
        return "Person [pid=" + pid + ", pname=" + pname + ", pwd=" + pwd + "]";
    }

}

2.建立并配置映射文件
Person.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.it.hibernate.entity">
        <!-- 建立类与数据库表的映射 -->
            <class name="Person" table="person">
            <!-- 主键必须设置  -->
                <id name="pid" type="int" column="pid">
                    <!-- 设置自增主键,此paramname需要与orcl中序列名一致 -->
                    <generator class="sequence">
                        <param name="sequence">seq_person</param>
                    </generator>
                </id>
                <property name="pname" type="string"  />
                <property name="pwd" type="string"></property>  
            </class>
        </hibernate-mapping>

3.配置hibernate以便连接、操作数据库
hibernate.cfg.xml

 <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory name="foo">    
         <!-- 数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <!-- 数据库驱动 -->
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <!-- 数据库账号密码 -->
        <property name="hibernate.connection.username">scott</property>
        <property name="hibernate.connection.password">tiger</property>
        <!-- 数据库链接字符串 -->
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <!-- 数据库语句是否打印 -->
        <property name="show_sql">true</property>
        <!-- 实体对象映射 这里将Person类配置到hibernate.cfg.xml-->
        <mapping resource="com/it/hibernate/entity/Person.hbm.xml"/>

    </session-factory>
    </hibernate-configuration>

4.创建hibernateutil类启动hibernate
HibernateUtil.java

 package com.it.hibernate.util;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    public class HibernateUtil {

    static SessionFactory sessionFactory;
    //静态初始化块
    static{

        Configuration con = new Configuration();
        //加载之前设置的hibernate.cfg.xml文件
        con.configure();
        //创建sessionfactory
        sessionFactory =con.buildSessionFactory(); 
    }
    public static Session getSession(){
         //获得session
        return sessionFactory.openSession();
    }
}

这里的sessionFactory为hibernate的核心,他可以对配置文件进行初始化加载,并创建session。
5.建立持久层
PersonDaoImp.java

    package com.it.hibernate.dao;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import com.it.hibernate.entity.Person;
    import com.it.hibernate.util.HibernateUtil;
    public class PersonDaoImp {

    public boolean addPerson(Person person){

        Session session = HibernateUtil.getSession();
        int result = (int) session.save(person);
        Transaction tran = session.beginTransaction();
        boolean flag = false;
        if(result>0){
            flag = true;
            tran.commit();
        }
        session.close();
        return flag;

    }
    public boolean updatePerson(Person person){

        Session session = HibernateUtil.getSession();
        session.update(person);
        Transaction tran = session.beginTransaction();
        tran.commit();
        session.close();
        return true;

    }
    public boolean deletePerson(Person person){

        Session session = HibernateUtil.getSession();
        session.delete(person);
        Transaction tran = session.beginTransaction();
        tran.commit();
        session.close();
        return true;

    }
    public Person qeuryPerson(int pid){

        Session session = HibernateUtil.getSession();
        Person person = (Person) session.get(Person.class, pid);


        session.close();
        return person;

    }
}

这里注意,对表的增删改都需要创建事物并提交:

 Transaction tran = session.beginTransaction();
    tran.commit();

而且session使用完也需要sesion.close();关闭。
6.建立测试类
test.java

 package com.it.hibernate.util;
    import com.it.hibernate.dao.PersonDaoImp;
    import com.it.hibernate.entity.Person;
    public class Test 
    public static void main(String[] args) {
    Person person = new Person(0,"dad","dsad");
    PersonDaoImp personDao = new PersonDaoImp();
    boolean flag = personDao.addPerson(person);
    System.out.println("插入数据:"+flag);
    Person person1 = new Person(1008,"qqqq","qqqq");

     flag = personDao.updatePerson(person1);
    System.out.println("更新数据:"+flag);
    Person person2 = new Person(1008,"qqqq","qqqq");

     flag = personDao.deletePerson(person2);
    System.out.println("删除数据:"+flag);

    Person person3 = personDao.qeuryPerson(1003);
    System.out.println("显示数据:"+person3.toString());
        }
    }

这里方法作为测试,都可得到正确的结果,建议四个功能分开测试。

猜你喜欢

转载自blog.csdn.net/hqh1129/article/details/81292894