Hibernate学习框架: 1、基本部分
crud的操作
主键的生成机制
类型
持久化类
映射文件 *.hbm.xml
配置文件 hibernate.cfg.xml
2、关系部分
一对多的单项
一对多的双向
多对多的双向
一对一
在many-to-one加一个属性unique="true"
cascade 级联 inverse 维护关系
中lazy,fetch
3、性能的部分
维护关系 inverse懒加载 lazy抓取策略 fetch一级缓存 二级缓存 查询缓存
4、查询
hql
条件查询
一。Hibernate概述: 在servlet中,操作数据库我们使用的是jdbc,为了更加方便的操作数据库,我们可以使用ORM框架,ORM:Object Relation Mapping,对象关系映射,目的就是像操作java普通的类一样来操作数据库。显然Hibernate是ORM框架中做得比较好的一款!
Hibernate的有点: 面向对象数据库
编程;代码书写更加简洁;具有缓存机制,提高效率;
二.入门: 准备条件:
1.导入相关的包
2.hibernate.cfg.xml:(通常位于scr根目录下)
数据库要自己先新建好!!
'1.0' encoding ='utf-8'?>
"connection.username" >root
"connection.password" >root
"connection.url"> jdbc:
mysql:// localhost:3306/hibernate512
"dialect" >org.hibernate.dialect.MySQLDialect
"connection.driver_class" > com.mysql.jdbc.Driver
"hbm2ddl.auto">update
"show_sql"> true
"format_sql"> true
"com/oteman/hibernate/domain/Person.hbm.xml" />
|
3.要操作的实体bean(Person为例)
package com.oteman.hibernate.domain; public class Person { Long pid; String pname; String pgender; public Long getPid() { return pid ; } public void setPid(Long pid) { this.pid = pid; } public String getPname() { return pname ; } public void setPname(String pname) { this.pname = pname; } public String getPgender() { return pgender ; } public void setPgender(String pgender) { this.pgender = pgender; } } |
4.要操作的实体与数据库表的对应关系:
Person.hbm.xml (通常与实体bean在同一个目录)
"1.0" encoding ="utf-8"?>
"com.oteman.hibernate.domain.Person" table=
"Person" >
"pid" column =
"pid" length=
"5" type=
"java.lang.Long" >
"increment">
"pgender" column =
"gender" length=
"10" type=
"string">
"pname" column =
"name" length=
"20" >
|
5.根据配置文件建立表:
| @Test public void testCreateTable(){ Configuration configuration= new Configuration(); configuration.configure(); SessionFactory sessionFactory = configuration.buildSessionFactory(); } |
6.增删改查:
/** * 向数据库中增加数据 */ @Test public void add(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person p= new Person(); p.setPgender( "男"); p.setPname( "张三"); session.save(p); transaction.commit(); session.close(); } /** * 更新数据, hibernate具有快照机制,会将对象前后的值进行比较,如果发现对象的属性没有发生改变,那么就不进行update操作,可以观察 sql语句; */ @Test public void update(){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person person=(Person) session.get(Person. class, 2l); person.setPname( "哈哈"); /*//第二种形式: Person p=new Person(); p.setPgender("男"); p.setPid(2L); p.setPname("李四");*/ session.update(person); transaction.commit(); session.close(); } /** * 删除数据 */ @Test public void delete(){ Session session= sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); Person person=(Person) session.get(Person. class, 1l); session.delete(person); transaction.commit(); session.close(); } /** * 查询所有! */ @Test public void query(){ Session session= sessionFactory.openSession(); List list = session.createQuery("from Person").list(); System. out.println(list.size()); session.close(); } |
7.Generator主键产生机制
| public class GeneratroTest extends HibernateUtils{ /** * * 1.
* increament形式产生的 sql语句 * Hibernate: select max( pid) from person Hibernate: insert |
|