小小总结-----Hibernate总结
来源:互联网 发布:舞剧十面埋伏知乎 编辑:程序博客网 时间:2024/05/16 10:52
这一周我们都在学Hibernate,以下是我对Hibernate的总结。
一、Hibernate操作
Hibernate是面向对象的持久操作,Hibernate是一个开发源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,简化了JDBC繁琐的编码,将java对象与数据库表建立连接。Hibernate将java与数据库连接的过程:首先要为项目增添Hibernate支持,即添加jar包和编写配置文件,第二步是创建实体类,创建和配置映射文件,主要包括包括实体与表的映射,属性与主键的映射,属性与其他字段的映射,第三步是数据库操作:
public void hibernateTest() {// 1、获取配置Configuration cfg = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();// 2、创建SessionFactorySessionFactory factory = cfg.buildSessionFactory(serviceRegistry);// 3、获取sessionSession session = factory.openSession();Transaction tx = session.getTransaction();try {// 4、开启事务tx.begin();Type tp = new Type("小说", "亚洲小说集");// 5、保存Type对象session.save(tp);// 6、提交事务session.getTransaction().commit();} catch (Exception e) {tx.rollback();e.printStackTrace();} finally {// 7、关闭sessionsession.close();}}
二、实体关联
实体之间的有关联关系和泛化关系,关联关系包括一对多关联、一对一关联、多对一关联和双向一对多关联。
Many-to-one:many的一端应持有one的一端的对象,在映射文件中体现为:
<many-to-one class="entity.Type" name="type"><column name="type_id" /></many-to-one>
Class后面是写的实体名,name后面是class的属性名,colum name是外键名。
One-to-many:one的一端应持有many端的对象集合,在映射文件中体现为:
<set name="records" sort="unsorted"><key column="isbn" /><one-to-many class="entity.Record" /></set>
Many-to-many:双向一对多特别简单,就是同时配置了单向的一对多和单向的多对一。
此外我学习过程中遇到了联合主键且为外键的书写,在映射文件中体现为:
<composite-id ><key-many-to-one name="book" column="isbn" class="entity.Book" /><key-many-to-one name="stu" column="stu_id" class="entity.Student" /></composite-id>
三、实体的三种状态
我感觉在Hibernate中最有难度的地方是实体对象的三种状态,瞬时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。
四、HQL与Criteria查询
Hibernate 支持两种主要的查询方式:HQL和Criteria查询。HQL是一种面向对象的查询语言,其中没有表和字段的概念,有的是属性、类和对象的概念。HQL的操作需要四步:得到Session、编写HQL语句、创建Query对象,执行查询的得到结果。
我感觉HQL查询与SQL很相似,但是HQL是面向对象的,在HQL中比较新鲜的查询操作是分页操作和投影。
分页操作:
@Test// 测试分页public void pagerTest() {String hqlString = "from Student";Session session = HibernateUtil.currentSession();//通过HibernateUtil的currentSession方法获得SessionQuery query = session.createQuery(hqlString);query.setFirstResult(10);query.setMaxResults(10);List<Student> students = query.list();System.out.println(students);}
投影操作:
@Test// 投影的测试public void projectionTest() {Session s = HibernateUtil.currentSession();//通过HibernateUtil的currentSession方法获得SessionString queryString = "select b.name,b.count from Book b";//获得SQL语句Query query = s.createQuery(queryString);//创建Query对象List l = query.list();// 投影的结果:对象数组的集合——集合中的元素是对象数组// System.out.println(l.get(0).getClass());for (Object object : l) {Object[] data = (Object[]) object;System.out.println("name==" + data[0] + ",count==" + data[1]);}}
Criteria查询与HQL查询很类似,但是HQL是基于字符串的查询,因而更加灵活,我个人感觉Criteria比较好用一些。我感觉它的模糊查询比HQL更加好简洁。
@Overridepublic List<Book> findByNameLike(String name) throws Exception {Session session=HibernateUtil.getSession();//在HibernateUtil类中的getSession获取SessionCriteria criteria=session.createCriteria(Book.class);criteria.add(Restrictions.like("name","%"+ name+"%")); return criteria.list();//返回Book类型集合}
- 小小总结-----Hibernate总结
- Hibernate延迟加载小小总结
- 小小总结
- 小小总结
- 小小总结
- 小小总结
- 小小总结
- struts2+spring+hibernate三大框架环境搭建小小总结
- 小小的失恋总结
- 小小的总结一下
- 小小的总结.
- 突然想写点,小小总结
- Verilog/FPGA 小小总结
- Java基础小小总结
- 小小总结下
- 小小的总结一下
- 小小的总结
- 小小地总结下^ ^
- 【linux命令】单行命令利器——xargs
- 【linux命令】tr命令
- memcpy和memmove的区别。。
- 【linux命令】校检和&&核实
- 591 - Box of Bricks
- 小小总结-----Hibernate总结
- __declspec(dllexport) & __declspec(dllimport)
- 【linux命令】排序、单一与重复
- Makefile自动化变量
- android 实现抽屉效果
- sgu 112 a^b - b^a java大数
- UVa 567 - Risk
- Mahout聚类算法canopy源码分析(1)
- 三种asp.net 抓取网页源代码,推荐方法一