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.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string>#include <iost ...
- 自开发Web应用和SAP Customer Data Cloud Identity服务的集成
今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...
- ubuntu16.4安装php7+apache2+mysql环境全过程记录
1.安装apache2 sudo apt-get install apache2 2.安装php7 sudo apt-get install php7.0 3.apache 识别php插件(不是必须, ...
- 支持FreeMarker需要哪些JAR包?
FreeMarker所需的全部jar包,Jar包:struts2-core-2.0.11.2.jar,xwork-2.0.5.jar,ognl-2.6.11.jar,freemarker-2.3.8. ...
- ssm框架基本流程
题目,写的有点大了,其实就是 对一张表的基本处理,增删改查的基本操作演示. 好了,我们开始了. 假如,我们在做一个单表处理,就举例是 学院(某个大学的学院) 吧. 首先,我们分析 学校这样表有哪些属性 ...
- CentOS 安装postgresql
CentOS 安装postgresql 添加postgresql官网安装源 在/etc/yum.repos.d目录下新建pgdg-10-centos.repo 文件 [pgdg10] name=P ...
- PAT——1012. 数字分类
给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: ...
- AutoLayout对 scrollview的contentSize 和contentOffset属性的影响
AutoLayout对 scrollview的contentSize 和contentOffset属性的影响 问题一.iOS开发中,如果在XIB文件中创建一个scrollview,同时给它设置布局 ...
- 随机数使用不当引发的生产bug
前几天负责的理财产品线上出现问题:一客户赎回失败,查询交易记录时显示某条交易记录为其他人的卡号. 交易的链路如下: 出现该问题后,我们对日志进行了分析,发现主站收到的两笔流水号完全相同,然而主站却没有 ...
- LeetCode 简单 -旋转字符串(796)
给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能变成B ...