【Hibernate一】概述及入门
2015-07-16 16:41
302 查看
Hibernate学习框架:
1、基本部分
crud的操作
主键的生成机制
类型
持久化类
映射文件 *.hbm.xml
配置文件 hibernate.cfg.xml
2、关系部分
一对多的单项
一对多的双向
多对多的双向
一对一
在many-to-one加一个属性unique="true"
cascade 级联
inverse 维护关系 <set>中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根目录下)
数据库要自己先新建好!!
3.要操作的实体bean(Person为例)
4.要操作的实体与数据库表的对应关系:Person.hbm.xml
(通常与实体bean在同一个目录)
5.根据配置文件建立表:
6.增删改查:
7.Generator主键产生机制
1、基本部分
crud的操作
主键的生成机制
类型
持久化类
映射文件 *.hbm.xml
配置文件 hibernate.cfg.xml
2、关系部分
一对多的单项
一对多的双向
多对多的双向
一对一
在many-to-one加一个属性unique="true"
cascade 级联
inverse 维护关系 <set>中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根目录下)
数据库要自己先新建好!!
[align=left]<?xml version= '1.0' encoding ='utf-8'?>[/align] [align=left]<!DOCTYPE hibernate-configuration PUBLIC[/align] "-//Hibernate/Hibernate Configuration DTD 3.0//EN" [align=left] "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >[/align] [align=left] [/align] [align=left]<hibernate-configuration>[/align] [align=left] <session-factory >[/align] <!-- 数据库的用户名 --> [align=left] <property name="connection.username" >root </property>[/align] [align=left] <!-- 密码 -->[/align] <property name="connection.password" >root </property> [align=left] <!-- url -->[/align] [align=left] <property name= "connection.url">[/align] [align=left] jdbc:mysql:// localhost:3306/hibernate512[/align] [align=left] </property>[/align] [align=left] <!-- 方言 告诉hibernate,要操作的数据库是mysql -->[/align] [align=left] <property name="dialect" >org.hibernate.dialect.MySQLDialect </property>[/align] [align=left] <!-- 导入驱动 -->[/align] [align=left] <property name= "connection.driver_class" >[/align] [align=left] com.mysql.jdbc.Driver[/align] [align=left] </property>[/align] [align=left] [/align] <!-- validate 只检查结构 update 检查结构,更新或者创建表 create 每次启动 hibernate时,都要创建表 create-drop 启动 hibernate时创建表,当 hibernate关闭时,删除表 --> [align=left] <property name= "hbm2ddl.auto">update</property >[/align] <!--显示sql语句的输出 --> [align=left] <property name= "show_sql"> true</ property >[/align] [align=left] <property name= "format_sql"> true</ property >[/align] [align=left] [/align] <!--关联映射文件,手动添加,然后自动生成! --> [align=left] <mapping resource="com/oteman/hibernate/domain/Person.hbm.xml" />[/align] [align=left] [/align] [align=left] </session-factory >[/align] [align=left] [/align] [align=left]</hibernate-configuration>[/align] |
[align=left]package com.oteman.hibernate.domain;[/align] [align=left] [/align] public class Person { [align=left] Long pid;[/align] [align=left] String pname;[/align] String pgender; public Long getPid() { [align=left] return pid ;[/align] [align=left] }[/align] public void setPid(Long pid) { this.pid = pid; [align=left] }[/align] public String getPname() { [align=left] return pname ;[/align] [align=left] }[/align] public void setPname(String pname) { this.pname = pname; [align=left] }[/align] public String getPgender() { [align=left] return pgender ;[/align] [align=left] }[/align] public void setPgender(String pgender) { this.pgender = pgender; [align=left] }[/align] [align=left] [/align] [align=left]}[/align] |
(通常与实体bean在同一个目录)
[align=left]<?xml version= "1.0" encoding ="utf-8"?>[/align] <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" [align=left]"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >[/align] [align=left] [/align] [align=left]<!-- 数据库表和类之间的映射关系 字段和表列名之间的关系 -->[/align] [align=left]<hibernate-mapping>[/align] [align=left] <class name="com.oteman.hibernate.domain.Person" table="Person" >[/align] [align=left] <id name= "pid" column ="pid" length="5" type="java.lang.Long" >[/align] [align=left] <generator class= "increment"></generator >[/align] [align=left] </id>[/align] [align=left] <property name= "pgender" column ="gender" length="10" type="string"></ property>[/align] [align=left] <property name= "pname" column ="name" length="20" ></property>[/align] [align=left] </class >[/align] [align=left] [/align] [align=left]</hibernate-mapping>[/align] |
[align=left] @Test[/align] [align=left] public void testCreateTable(){[/align] [align=left] Configuration configuration= new Configuration();[/align] [align=left] configuration.configure();[/align] [align=left] SessionFactory sessionFactory = configuration.buildSessionFactory();[/align] [align=left] }[/align] |
[align=left]/**[/align] [align=left] * 向数据库中增加数据[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void add(){[/align] [align=left] [/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] [align=left] Person p= new Person();[/align] [align=left] p.setPgender( "男");[/align] [align=left] p.setPname( "张三");[/align] [align=left] session.save(p);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left] [/align] [align=left] /**[/align] [align=left] * 更新数据, hibernate具有快照机制,会将对象前后的值进行比较,如果发现对象的属性没有发生改变,那么就不进行update操作,可以观察 sql语句;[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void update(){[/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] Person person=(Person) session.get(Person. class, 2l); [align=left] person.setPname( "哈哈");[/align] [align=left] /*//第二种形式:[/align] [align=left] Person p=new Person();[/align] [align=left] p.setPgender("男");[/align] [align=left] p.setPid(2L);[/align] [align=left] p.setPname("李四");*/[/align] [align=left] session.update(person);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left] /**[/align] [align=left] * 删除数据[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void delete(){[/align] [align=left] Session session= sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] Person person=(Person) session.get(Person. class, 1l); [align=left] session.delete(person);[/align] [align=left] [/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] [/align] [align=left] }[/align] [align=left] /**[/align] [align=left] * 查询所有![/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void query(){[/align] [align=left] Session session= sessionFactory.openSession();[/align] List list = session.createQuery("from Person").list(); [align=left] System. out.println(list.size());[/align] [align=left] session.close();[/align] [align=left] }[/align] |
[align=left]public class GeneratroTest extends HibernateUtils{[/align] [align=left] [/align] [align=left] /**[/align] [align=left] *[/align] * 1.<id name=" pid" column="pid" type="java.lang.Long"> [align=left] <generator class="increment"> </generator>[/align] [align=left] </id>[/align] [align=left] * increament形式产生的 sql语句[/align] [align=left] * Hibernate:[/align] [align=left] select[/align] [align=left] max( pid)[/align] [align=left] from[/align] [align=left] person[/align] [align=left] Hibernate:[/align] [align=left] insert[/align] [align=left] into[/align] [align=left] person[/align] [align=left] ( pname, psex , pid)[/align] [align=left] values[/align] [align=left] (?, ?, ?)[/align] [align=left] [/align] [align=left] 说明:[/align] [align=left] 1、先得到主键的最大值[/align] [align=left] 2、在最大值的基础上加1[/align] [align=left] 3、上述的两步过程是由 hibernate内部完成的[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void testIncrement(){[/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] [align=left] Person person = new Person();[/align] [align=left] //person.setPid(11L);为increament时,自行设置的id没有用, hibernate会帮我们处理id;[/align] [align=left] person.setPname( "云三班长" );[/align] [align=left] person.setPsex( "不详");[/align] [align=left] session.save(person);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left] [/align] [align=left] /**[/align] [align=left] *[/align] [align=left] * 2.<generator class="identity"> </generator>[/align] [align=left] *[/align] [align=left] * Hibernate:[/align] [align=left] insert[/align] [align=left] into[/align] [align=left] person[/align] [align=left] ( pname, psex )[/align] [align=left] values[/align] [align=left] (?, ?)[/align] [align=left] 说明:[/align] [align=left] 主键的生成交给数据库来做,数据库必须支持自动增长机制,会出现id不连续的情况,效率比increment要高一些;[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void testIdentity(){[/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] [align=left] Person person = new Person();[/align] [align=left] //person.setPid(11L);[/align] [align=left] person.setPname( "云三班长" );[/align] [align=left] person.setPsex( "不详");[/align] [align=left] session.save(person);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left] [/align] [align=left] /**[/align] [align=left] * 3.<generator class=" uuid"></generator>[/align] [align=left] * 主键的生成是由 hibernate内部完成的[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void testUUID(){[/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] [align=left] Person person = new Person();[/align] [align=left] person.setPname( "云三班长" );[/align] [align=left] person.setPsex( "不详");[/align] [align=left] session.save(person);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left] /**[/align] [align=left] * 4.<generator class="assign"> </generator>[/align] [align=left] * 主键的生成由自己指定。[/align] [align=left] */[/align] [align=left] @Test[/align] [align=left] public void testAssigned(){[/align] [align=left] Session session = sessionFactory.openSession();[/align] [align=left] Transaction transaction = session.beginTransaction();[/align] [align=left] Person person = new Person();[/align] [align=left] person.setPid(11L);[/align] [align=left] person.setPname( "云三班长" );[/align] [align=left] person.setPsex( "不详");[/align] [align=left] session.save(person);[/align] [align=left] transaction.commit();[/align] [align=left] session.close();[/align] [align=left] }[/align] [align=left]}[/align] |
相关文章推荐
- 插件管理框架 for Delphi(一)
- 使用CSS框架布局的缺点和优点小结
- 列举PHP的Yii 2框架的开发优势
- Windows窗体的.Net框架绘图技术实现方法
- 浅谈JavaScript 框架分类
- JS刷新框架外页面七种实现代码
- 超赞的动手创建JavaScript框架的详细教程
- asp.net4.0框架下验证机制失效的原因及处理办法
- 插件管理框架 for Delphi(二)
- 零基础学习AJAX之AJAX框架
- Ajax 框架学习笔记
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Flex中最好的MVC框架Mate框架
- JavaScript 异步调用框架 (Part 4 - 链式调用)
- JavaScript 异步调用框架 (Part 2 - 用例设计)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理