Hibernate初级入门

Hibernate介绍

  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。Hibernate的出现解放了程序员百分之九十的工作量
部分名词解释:

  • POJO:简单的java类,实际上就是我们常说的bean类。类中提供简单的私有属性和get&set方法,并提供构造方法。
  • 对象关系映射:ORM,将bean类与数据库中对应的数据表进行联系。
  • 数据持久化:在程序中,数据有三种状态,分别是瞬时状态,持久状态,托管状态。

实现一个Hibernate小样

第一步:导包。

其中包含两个个部分:

  • 数据库的包(这里使用Oracle数据库)
  • Hibernate的包(依赖包和核心包)

第二步:在数据库中新建表

<!-- 创建表格 -->
create table person
(
pid number(4) primary key,
pname varchar2(20),
pwd varchar2(20)
);
<!-- 创建序列(自增) -->
create sequence se_single
minvalue 1000
maxvalue 2000
start with 1001
increment by 1
nocache;
<!-- 创建触发器 -->
CREATE OR REPLACE TRIGGER tri_person
BEFORE
insert on person
for each row
begin
select se_single.nextval into :new.pid from dual;
end ;
复制代码

第三步:创建hibernate.cfg.xml文件

该文件可在解压好的hibernate压缩包下****\hibernate\hibernate-distribution-3.6.6.Final\project\etc\hibernate.cfg.xml复制而来,只需要修改一些属性的值。 我们将hibernate.cfg.xml文件复制到项目的src下面,打开如下:

<!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="show_sql">true</property>
		<mapping resource="org/hibernate/test/legacy/Simple.hbm.xml"/>
		<class-cache
			class="org.hibernate.test.legacy.Simple"
			region="Simple"
			usage="read-write"/>
	</session-factory>
</hibernate-configuration>
复制代码
  • 其中session-factory属性,是Hibernate的核心,这里对name属性不需要更改
  • show_sql属性,类型是boolean,表示是否在控制台上打印Hibernate的sql语句(Hibernate自己生成的)
  • 标签表示引入映射文件(此处先忽略)
  • 标签我们不需要知道,删除即可

修改后的文件

<!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">chuxus</property>
	<property name="hibernate.connection.password">angle</property>
	<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<mapping resource="com/hibernate/bean/Person.hbm.xml"/>
	</session-factory>
	
</hibernate-configuration>
复制代码
  • 新增方言属性,方言的作用是让hibernate分清楚是什么类型的数据库,以生成相应的sql语句
  • 新增数据库驱动、url、账户、密码属性,这里相当于MVC中的Util类中的设置。
  • 新增format_sql属性,将sql语句格式化

第四步:创建实体类和对应的ORM文件

  • 实体类中包含私有属性,get&set方法,构造方法和toString方法
  • 创建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.hibernate.bean">
	<class name="Person" table="person">
	<!-- 这里的name是对应实体类中的属性,column中是数据库中的表列名,这里区分大小写 -->
		<id name="pid" type="int" column="pid">
			<!-- Oracle的自增归用户所有,这里相对于MySql有区别 -->
            <generator class="sequence">
            	<param name="sequence">se_single</param>
            </generator>
		</id>
		<!-- 这里的类型是小写的string,如果使用大写,则需要前缀java.lang.String -->
		<property name="pname" type="string" column="pname" />
		<property name="pwd" type="string" column="pwd"></property>
	</class>
</hibernate-mapping>
复制代码
  • 修改hibernate.cof.xml文件<mapping resource="com/hibernate/bean/Person.hbm.xml"
    这里的resource是关系映射文件的位置(一般和实体类放在同一个包下)

第五步:新建HibernateUtil类,用来获取session

package com.hibernate.util;

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

public class HibernateUtil {
	static SessionFactory sf = null;
	/**
	 * java中加载顺序
	 * 默认值
	 * 初始化快
	 * 构造方法
	 * 顺序如下:默认值->初始化快->构造方法
	 */
	static {
		Configuration con = new Configuration();
		con.configure();
		sf = con.buildSessionFactory();
	}
	public static Session getSession() {
		return sf.openSession();
	}
}
复制代码

第六步:新建dao层,imp层

  • dao层
package com.hibernate.dao;

import java.util.List;
/**
 * 基础dao层
 * @author Chuxus
 *
 * @param <T>
 */
public interface BasicDao<T> {
	/**
	 * 登陆
	 * 添加
	 * 删除
	 * 更新
	 * 
	 * @param t
	 * @return
	 */
	public boolean login(T t);
	public boolean add(T t);
	public boolean delete(int id);
	public boolean update(T t);
}

复制代码
  • imp层(部分代码)
public class BasicImp<T> implements BasicDao<T> {
	Session session = null;
	@Override
	public boolean login(T t) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean add(T t) {
		session = HibernateUtil.getSession();
		//开启事务
		Transaction tr = session.beginTransaction();
		int result = (Integer)session.save(t);
		boolean flag = false;
		if(result>0) {
			flag = true;
			//提交事务
			tr.commit();
		}
		return flag;
	}
}
复制代码
package com.hibernate.dao.imp;

import com.hibernate.bean.Person;

public class PersonImp2 extends BasicImp<Person> {

}

复制代码

在Oracle中,增删改都是需要事务提交之后的,如果没有事务提交,那么被修改的数据只是存在Oracle的缓存中,不会真正写入到数据库中,这里需要注意。

新建测试类

package com.hibernate.test;


import com.hibernate.bean.Person;
import com.hibernate.dao.PersonDao;
import com.hibernate.dao.imp.PersonImp2;
import com.hibernate.dao.imp.personImp;


public class Test {
	@org.junit.jupiter.api.Test
	public void Demo() {
		Person p = new Person(1024,"Jerry","111111");
		PersonImp2 pd = new PersonImp2();
		boolean flag = pd.add(p);
		System.out.println(flag);
	}
}

复制代码

结果如下:

数据库中查询数据,已经插入,至此,第一个hibernate程序就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值