你好,游客 登录 注册 搜索
背景:
阅读新闻

简单的Hibernate实例分享

[日期:2017-07-20] 来源:Linux社区  作者:young-z [字体: ]

  Hibernate是一个开源的ORM框架,顾名思义,它的核心思想即ORM(Object Relational Mapping,对象关系映射),可以通过对象来操作数据库中的信息,据说开发者一开始是不太熟悉数据库SQL语句的,这也造就了hibernate的强大之处,它不强求开发者熟悉SQL语句也可以操作数据库,hibernate可以自动生成SQL语句,自动执行。

  利用hibernate可以让开发者完全使用面想对象思维来操作数据库,所以接下来的演示不会有一句SQL语句,如果有的话,请当我这句话没说!

  本文使用hibernate实现了简单的对一个person数据表的基本增删改查操作。

 

 

准备工作

环境:win7+eclipse

工具包:hibernate包,可前往http://hibernate.org/orm/downloads/下载,本例中使用的是4版本;

数据库连接驱动包,本例中使用的是mysql的

  

 

程序结构图示

 

pojo层实体类

package demo.pojo;

public class Person {
	
	private Integer id;
	private String name;
	private String gender;
	private Integer age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";
	}
	
	
}

  

核心配置文件hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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>
        <!-- 以下四行分别为:数据库驱动类、Drivermanager获取连接的参数URL、用户名、密码  -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1/web?characterEcoding=utf-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <!-- 设置方言,hibernate会根据数据库的类型相应生成SQL语句 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
       
        <!-- 控制台显示生成的sql语句,默认为false -->
        <property name="show_sql">true</property>
        <!-- 映射配置源文件的位置 -->
        <mapping resource="demo/pojo/Person.hbm.xml"/>
    </session-factory>
   
</hibernate-configuration>

映射文件Person.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name是实体类全名,table为数据表名 -->
    <class name="demo.pojo.Person" table="Person">
        <id name="id" column="id">
            <!-- 主键生成方式,native是让hibernate自动识别 -->
            <generator class="native"></generator>
        </id>
        <!--
        注意点:
        0.name值为实体类中属性名,column为数据表中字段名;
        1.当实体类中属性名与对应数据表字段名相同时,后面的column可以省略,hibernate会自动匹配,例如下面age ;
        2.反之当实体类中属性名与对应数据表字段名不相同时,两项都要写上,例如下面gender和sex
        -->
        <property name="name" column="name"></property>
        <property name="gender" column="sex"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>

Session工厂类

package demo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateSessionFactory {
    private static SessionFactory factory;
    private static ThreadLocal<Session> thread = new ThreadLocal<Session>();
    private static String path = "hibernate.cfg.xml";
    private static Configuration config = new Configuration();
    static {
        config.configure(path);
        ServiceRegistry service = new ServiceRegistryBuilder()//定义一个服务注册机
            .applySettings(config.getProperties()).buildServiceRegistry();
        factory = config.buildSessionFactory(service);//创建Session工厂类
    }
   
    public static Session getSession() {
        Session session = thread.get();
        if(session == null || !session.isOpen()) {
            session = factory.openSession();
            thread.set(session);
        }
        return session;
    }
   
    public static void closeSession() {
        Session session = thread.get();
        if(session != null && session.isOpen()) {
            session.close();
            thread.set(null);
        }
    }
   
}

DAO层封装数据各项操作的方法

package demo.dao;

import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.Transaction;
import demo.pojo.Person;
import demo.util.HibernateSessionFactory;

public class PersonDaoImpl {
    //增删改查,此处以增为例
    public boolean add(Person p) {
        Session session = HibernateSessionFactory.getSession();//创建Session
        Transaction trans = session.beginTransaction();//开启事务
        try {
            Serializable id = session.save(p);//添加记录并获取主键值
            System.out.println(id+"为获取的主键值");//控制台查看主键值
            trans.commit();//提交事务
            return true;
        } catch (Exception e) {
            trans.rollback();//获取异常,则事务回滚
        } finally {
            HibernateSessionFactory.closeSession();//关闭Session
        }
        return false;
    }
}

测试类TestPerson

package demo.test;

import org.junit.Test;
import demo.dao.PersonDaoImpl;
import demo.pojo.Person;

public class TestPerson {
    @Test
    public void testAdd() {
        //创建一个人类对象
        Person p = new Person();
        p.setName("张三");
        p.setGender("男");
        p.setAge(18);
        //创建dao层类对象并调用添加方法
        PersonDaoImpl dao = new PersonDaoImpl();
        dao.add(p);
    }
}

Hibernate3.1.2_中文文档PDF  http://www.linuxidc.com/Linux/2016-02/128462.htm

Hibernate学习入门教程  http://www.linuxidc.com/Linux/2015-08/121498.htm

在Hibernate中开启日志 http://www.linuxidc.com/Linux/2015-07/120499.htm

Hibernate+JUnit测试实体类生成数据库表  http://www.linuxidc.com/Linux/2015-07/120161.htm

Hibernate整体理解 http://www.linuxidc.com/Linux/2014-07/104405.htm

Hibernate的映射机制  http://www.linuxidc.com/Linux/2014-12/110265.htm

Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句  http://www.linuxidc.com/Linux/2016-08/134619.htm

Struts2+Spring3+Hibernate3+MySQL简单登录实现  http://www.linuxidc.com/Linux/2017-02/140408.htm

Hibernate的简单示例  http://www.linuxidc.com/Linux/2016-11/136609.htm

Intellij IDEA 15 下新建 Hibernate 项目及添加配置  http://www.linuxidc.com/Linux/2016-09/135624.htm

Hibernate 的详细介绍请点这里
Hibernate 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-07/145807.htm

linux
相关资讯       hibernate  Hibernate实例 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款