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.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- 洗牌算法shuffle
对这个问题的研究始于一次在群里看到朋友发的洗牌面试题.当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个.过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: 一 ...
- ASN.1详解
Chapter 4 ASN.1 4.1 网络数据表示及编码4.2 ASN.1的基本概念4.3 基本编码规则 4.1 网络数据表示及编码ASN.1(Abstract Syntax Notation 1) ...
- C# using、namespace使用注意事项
一.using 用法 1.引用命名空间. 如: using System; 2.自动释放对象使用的资源. 如: using (SqlConnection connection = new SqlCon ...
- 17、配置嵌入式servlet容器(1)
SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 1).如何定制和修改Servlet容器的相关配置 1.修改和server有关的配置 (Se ...
- Hibernate之openSession与getCurrentSession的区别
openSession 与 getCurrentSession的区别(1)openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定 ...
- 谈谈Ajax(一)
解决办法是:比如我是使用SSM框架(Spring+SpringMVC+MyBatis/MyBatis Plus)开发web应用,通常Controller的参数列表与ajax的data保持一致即可,少一 ...
- 【题解】洛谷P1879 [USACO06NOV] Corn Fields(状压DP)
洛谷P1879:https://www.luogu.org/problemnew/show/P1879 思路 把题目翻译成人话 在n*m的棋盘 每个格子不是0就是1 1表示可以种 0表示不能种 相邻的 ...
- java 编写小工具 尝试 学习(四)
1.在新建 的窗口上 ,添加了一个按钮后 ,给 按钮添加一个事件 ,意思就是 点击按钮后 发生什么事情!不废话 贴图 贴 代码! package jFrameDemo; import java.aw ...
- 关于ucos操作系统中如何从邮箱中提取出消息
问题提出? 定义两个任务,task1,task2,想task1用OSMboxPost,task2用OSMboxPend定义了一个邮箱Mbox1=OSMboxCreate(括号里面应该怎么写?)还有具体 ...
- java文件系统中的的NIO与IO
java从jdk1.4后就引入了java NIO机制: NIO的显著特点就是通道(channel).缓冲(buffer).选择器(selector),NIO机制中添加了传统I/O机制中没有的非阻塞调用 ...