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文件中
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下
最后,得出结论,大小写与拼写要注意,尽量对照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();检查事务是否提交。
还没有评论,来说两句吧...