Hibernate怎么用
一.为什么用Hibernate? 【核心:对象关系映射】
Hibernate是对jdbc的轻量级封装,可以简化数据库连接操作,
在该框架之前,数据库的操作步骤是:
1.根据连接字串获取连接
2.执行sql语句
3.获取结果集
4.从结果集提取数据
二.Hibernate怎么用?
1.引入框架所需要的包
2.配置 src/hibernate.cfg.xml,常用配置如下: 【hibernate.cfg.xml 该文件名由软件自动生成,不能修改】
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="hbm2ddl.auto">update</property> //根据类自动建表
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">java</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 自定义配置 -->
<property name="show_sql">true</property> //显示sql语句
<property name="format_sql">true</property> //格式化显示sql语句 <!-- 映射文件 -->
<mapping resource="com/bean/User.hbm.xml"/>
</session-factory> </hibernate-configuration>
3.编写实体类映射文件 User.hbm.xml 【文件名和实体类名字相同】
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.bean.User" table="TEST_USER" >
<id name="id">
<generator class="native"/>
</id>
<property name="uname"/>
<property name="photo"/>
</class>
</hibernate-mapping>
4.进行具体查询的业务逻辑【软件导入框架时会默认添加一个获取session的类】
package com.dao.impl; import org.hibernate.Session;
import org.hibernate.Transaction; import com.bean.User;
import com.dao.IUserDao;
import com.util.HibernateSessionFactory; public class UserDaoImpl implements IUserDao{ @Override
public Integer addUser(User u) { int result = -1;
//获取会话
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction(); try {
//保存数据
session.save(u);
tx.commit();
result=1;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //关闭
session.close();
return result;
} }
三,Hibernate高级知识:
1.对象关系映射
当一个类里,把另一个类作为属性使用时,怎么用映射文件来反映这种关系?
这就是对象关系映射,参考上一篇对象关系映射文章
2.Hibernate查询:Query查询,Criteria查询 [不常用的本地查询,native查询]
Query查询:
//获取会话
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction(); String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。 Query query=session.createQuery(hql);
query.setString("name", name);
List<Admin> list=query.list(); for(Admin admin:list){
System.out.println(admin.getAname());
}
Criteria查询:
Restrictions-条件查询,默认获取全部
Projections-聚合查询,如求和,平均值
//获取会话
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction(); Criteria c=session.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password)); List<Admin> list=c.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}
四,Hibernate查询优化
1.延时加载:当一个类的属性是另一个类的时候,只显示本类属性,
用法:配置set-lazy属性即可,默认开启
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.crazyit.app.domain">
<!-- 映射 Person 持久化类 -->
<class name="Person" table="person_inf">
<!-- 映射标识属性 id -->
<id name="id" column="person_id">
<!-- 定义主键生成器策略 -->
<generator class="identity"/>
</id>
<!-- 用于映射普通属性 -->
<property name="name" type="string"/>
<property name="age" type="int"/>
<!-- 映射集合属性 -->
<set name="addresses" table="person_address" lazy="true">
。。。
</set>
</class>
</hibernate-mapping>
2.抓取策略:和延时差不多,
用法:配置set-fetch属性即可,默认开启
五,Hibernate缓存
1.一级缓存默认开启,session不关闭同一查询,语句只执行一次
2.二级缓存,由第三方提供,可以于session关闭情况下进行历史查询
导入第三方包
在配置文件里添加开启配置
Hibernate怎么用的更多相关文章
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- Entity FrameWork Code First 配置关系
Has方法与With方法 A.HasRequired(a => a.B).WithOptional(b => b.A);上面一句配置意思就是A类包含B类一个不为null的实例,B类包含A类 ...
- HBuilde H5开发,关于JSON的Storage存储
今天踩坑了,在这里记一下. 我想做一个列表,开始是一个一个复制粘贴,然后发现这样太不灵活了,如果我有更多内容要填难道还要再一个一个复制吗? 所以我想到直接用JS动态生成最好,我的思路是这样的: //首 ...
- LaTeX-WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联
WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联 CTeX 套装 2.8 版本以后,也就是09年9月以后的版本加入了SumatraPDF程序,将PDF文件与Acrobat程序取消 ...
- 记一次挖掘115网盘反射型xss,08xss的储存型xss
记一次对115分站简单绕过过滤继续实现xss,08xss平台也中枪!! 115反射型xss url:http://115.qiye.115.com/disk/?ac=select_public_fil ...
- Ios国际化翻译工具
IOS Translation Tool(IOS国际化翻译工具) 介绍 当IOS项目国际化的时候,手工去翻译每一个字符串是一件非常痛苦的事情.尤其是当项目中存在N多种语言.而且又很难保证,手工翻译的准 ...
- (转)对于ESP、EBP寄存器的理解
原文地址https://blog.csdn.net/yeruby/article/details/39780943 esp是栈指针,是cpu机制决定的,push.pop指令会自动调整esp的值: eb ...
- 当你的Spring IOC 容器(即applicationContext.xml文件)忘记配到web.xml 文件中时
当你的Spring IOC 容器忘记配到web.xml 文件中时,启动服务器就会报错. 部分错误如下: Caused by: org.springframework.beans.factory.NoS ...
- 关于PHP中的 serialize () 和 unserialize () 的使用(即关于PHP中的值与已存储的表示的相互转换)
有时,我们会碰到这样的数据(字符串) a:3:{i:0;s:44:"/Uploads/images/2017-07-21/5971a9a08ad57.png";i:1;s:44:& ...
- Mac python3.5 + Selenium 开发环境配置
一. python 3.5 1. 下载 2. Mac默认为2.7,所以这里主要介绍如何将系统Python默认修改为3.5. 原理: 1)Mac自带的python环境在: python2.7: /Sys ...
- Linux下安装Qt5.6.1
我的环境:CentOS 6.7 64位. 1.下载Qt: Qt版本有很多,自己比较菜,希望安装的过程越简单越好,感觉比较新的版本会好安装一些,5.4版本还要更新 /usr/lib64/libstdc ...