hibernate初探之表单映射

我就是我 2022-07-11 13:24 265阅读 0赞

什么是ORM?

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

什么是Hibernate?

Hibernate是java领域的一款开源的ORM框架技术。

Hibernate对JDBC进行了非常轻量级的对象封装。

Center

第一个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

Center 1

4)、创建Hibernate的配置文件

右击项目New—>other—>hibernate

Center 2

选择第一个

Center 3

5)、写配置

Center 4

6)、写持久化类

  1. 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映射文件

Center 5

Center 6

8)、然后把生成的User.hbm.xml文件加入到hibernate.cfg.xml文件中

9)、创建hibernate数据库选择utf-8字符集

10)、使用Junit进行测试

@Test:测试方法

@Before:初始化方法

@After:释放资源

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

Center 7

测试代码:

  1. package test;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import org.hibernate.service.ServiceRegistry;
  7. import org.hibernate.service.ServiceRegistryBuilder;
  8. import org.junit.After;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. import hibernate.User;
  12. //测试类
  13. public class UserTest {
  14. private SessionFactory sessionFactory;
  15. private Session session;
  16. private Transaction transaction;
  17. @Before
  18. public void init()
  19. {
  20. Configuration config =new Configuration().configure();
  21. //创建服务注册对象
  22. ServiceRegistry serviceRegistry =new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
  23. //创建会话工厂对象
  24. sessionFactory=config.buildSessionFactory(serviceRegistry);
  25. //会话对象
  26. session =sessionFactory.openSession();
  27. //开启事务
  28. transaction =session.beginTransaction();
  29. }
  30. @After
  31. public void destory()
  32. {
  33. transaction.commit();//提交事务
  34. session.close();//关闭会话
  35. sessionFactory.close();//关闭会话工厂
  36. }
  37. @Test
  38. public void testSaveUser()
  39. {
  40. //生成用户对象
  41. User user=new User(1,"txr","123");
  42. session.save(user);//保存对象
  43. }
  44. }

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

Center 8

2、方言配置有误
Center 9

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

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

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

Center 10

注意事项:

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 条评论,265人围观)

还没有评论,来说两句吧...

相关阅读