hibernate初探之表单映射

什么是ORM?

ORM(Object/Relationship Mapping):对象/关系映射


什么是Hibernate?

Hibernate是java领域的一款开源的ORM框架技术。
Hibernate对JDBC进行了非常轻量级的对象封装。

第一个Hibernate例子

开发工具:eclipse for java
安装插件:JBoss Tools(点击help-->Eclipse Marketplace,搜索JBoss Tools,点击install,选择要安装的JBoss插件,安装完后重启eclipse即可  )
重新打开eclipse后,右击New -->Other,输入Hibernate会提示

创建hibernate步骤

1、创建Hibernate的配置文件  (hibernate.cfg.xml)
2、创建持久化类
3、创建对象-关系映射文件
4、通过Hibernate API编写访问数据库的代码
使用版本:Hibernate4.2.4+mysql

1)、导入Hibernate必须得jar包
hibernate-release-4.2.4.Final\lib\requeired
2)、导入Mysql的jdbc驱动
mysql-connector-java-5.1.38.jar
3)、junit-4.jar

4)、创建Hibernate的配置文件
右击项目New-->other-->hibernate

选择第一个

5)、写配置


6)、写持久化类
package hibernate;

public class User {
	private int id;
	private String username;
	private String password;
	public User(int id, String username, String password) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
	}
	public User() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
	
	
}

7)、创建对象-关系映射文件
New-->Other-->hibernate如下所示选择第四个生成User.hbm.xml映射文件


8)、然后把生成的User.hbm.xml文件加入到hibernate.cfg.xml文件中
<mapping resource="User.hbm.xml"/>
9)、创建hibernate数据库选择utf-8字符集
10)、使用Junit进行测试
@Test:测试方法
@Before:初始化方法
@After:释放资源

通过Hibernate API编写访问数据库的代码

测试代码:
package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import hibernate.User;

//测试类
public class UserTest {
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;
	
	
	@Before
	public void init()
	{
		Configuration config =new Configuration().configure();
		//创建服务注册对象
		ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
		//创建会话工厂对象
		sessionFactory=config.buildSessionFactory(serviceRegistry);
		//会话对象
		session =sessionFactory.openSession();
		//开启事务
		transaction =session.beginTransaction();
	}
	
	@After
	public void destory()
	{
		transaction.commit();//提交事务
		session.close();//关闭会话
		sessionFactory.close();//关闭会话工厂
	}
	
	@Test
	public void testSaveUser()
	{
		//生成用户对象
		User user=new User(1,"txr","123");
		session.save(user);//保存对象
	}

}
在测试时出了俩个错误,错误一映射文件没有找到,这是映射文件地址出错


2、方言配置有误

原因在hibernate.cfg.xml下 <property name="dialect">org.hibernate.dialect.MYSQL5Dialect</property>出现异常是大小写或是拼写的问题应该为org.hibernate.dialect.MySQL5Dialect,再到docs下验证,果然如此。(在我这里是拼写有误)

最后,得出结论,大小写与拼写要注意,尽量对照docs文档,最好是从docs中copy代码。


在修改完这些错误后进行测试,测试通过,并且向数据库中发送了这样一句sql语句


注意事项:

1、持久化对象要提供一个无参构造器。以便Hibernate可以使用Constructor.newInstance()来实例化持久类。
2、提供一个标识属性。通常映射为数据库表的主键字段。如果没有该属性,一些功能将不起作用
如:Session.saveOrUpdate()。
3、为持久化类的字段声明访问方法(get/set)。Hibernate对JavaBeans风格的属性实行持久化
4、使用非final类。在运行时生成代理是Hibernate的一个重要的功能。如果持久化类没有实现任何接口,Hibernate使用CGLIB生成代理。如果使用的是final类,则无法生成CGLIB代理。
5、重写equals()和hashCode()方法。如果需要把持久化类的实例放到Set中(当需要进行关联映射时),则应该重写这俩个方法。
6、创建Configuration的俩种方式(只一种即可,否则会被覆盖)
属性文件(hibernate.properties):
Configuration cfg = new Configuration();
xml 文件(hibernate.cfg.xml);
Configuration cfg = new Configuration().configure();
Configuration的configure方法还支持带参数的访问:
File file = new File("user.xml");
Configuration cfg = new Configuaration.configure(file);

7、SessionFactory接口:
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的。
SessionFactory对象一旦构造完毕,即被赋予特定的配置信息。
SessionFactory是生成Session的工厂
构造SessionFactory很消耗资源,一般情况下一个应用只初始化一个SessionFactory对象。
Hibernate4新增了一个ServiceRegistry接口,所有基于Hibernate的配置或者服务都必须统一向这个ServiceRegistry注册后才能生效。

8、Session接口:
Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,所有持久化对象必须在session的管理下才可以运行持久化操作。此对象的生命周期很短。Session对象有一个一级缓存,显示执行flush之前,所有的持久层操作的数据都缓存在session对象处。相当于JDBC中的Connection.
持久化类与Session关联起来后就具有了持久化的能力。
Session类的方法:
取得持久化对象的方法:get() load();
持久化对象都得保存,更新和删除:save,update(),saveOrUpdate(),delete();
开启事务:beginTransaction();
管理Session的方法:isOpen(),flush(),clear(),evict(),close()等。
9、Transaction接口:
代表一次原子操作,它具有数据库事务的概念。
所有持久层都应该在事务管理下进行,即使是只读操作。
获取Transaction对象:
Transaction transaction = session.beginTransaction();
常用方法:
commit();提交相关联的session实例;
rollback();撤销事务操作;
wasCommitted();检查事务是否提交。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值