Hibernate
文章平均质量分 55
csdn_kenneth
这个作者很懒,什么都没留下…
展开
-
Hibernate的执行过程
Hibernate运行过程:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession()转载 2017-05-11 20:28:16 · 562 阅读 · 0 评论 -
hibernate框架的查询优化(二十三)
一、延迟加载延迟加载先获取到代理对象,当真正使用到该对象中的属性的时候,才会发送SQL语句,是Hibernate框架提升性能的方式1.1 类级别的延迟加载Session对象的load方法默认就是延迟加载Customer c = session.load(Customer.class, 1L);没有发送SQL语句,当使用该对象的属性时,才发送SQL语句1.1.1 se原创 2017-11-22 20:14:54 · 178 阅读 · 0 评论 -
hibernate框架绑定本地的session(八)
有这么一个业务:保存两个user,在dao层分别写两个方法,在service层调用这两个方法。要保证这两个方法在一个事务里面。代码如下:servlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException原创 2017-11-18 23:45:56 · 243 阅读 · 0 评论 -
hibernate入门案例(一)
hibernate和jdbc两种操作数据库的方式相比,hibernate有两个显著优点:1.不再需要编写sql语句,而是允许采用OO(面向对象)方式来访问数据库。2.在jdbc访问过程中大量的checked异常被包装成Hibernate的Runtime异常,从而不再要求程序必须处理所有异常。一、创建数据库和表1.1 创建数据库create database hibern原创 2017-11-17 22:30:46 · 364 阅读 · 0 评论 -
Hibernate常用的接口和类Configuration&SessionFactory(三)
Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。一、Configuration类1.1 主要作用Configuration对象用于配置并且启动Hibernate。Hibernate应用通过该对象来获得对原创 2017-11-18 12:17:03 · 600 阅读 · 0 评论 -
hibernate框架的查询策略(二十四)
1. 查询策略:使用Hibernate查询一个对象的时候,查询其关联对象.应该如何查询。是Hibernate的一种优化手段!2. Hibernate框架的检索策略解决的问题* 查询的时机Customer c1 = (Customer) session.get(Customer.class, 1);System.out.println(c1.getLinkmans().size())原创 2017-11-22 22:42:19 · 299 阅读 · 0 评论 -
hibernate笔记-旧版
1、一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。2、SessionFactory是重量级的,意味着不能随意创建或销毁它的实例。如果只访问一个数据库,只需要创建一个SessionFactory实例,且在应用初始化的时候完成。3、SessionFactory需要一个较大的缓存,用来存放预定义的SQL语句及实体的映射信息。另外可以配置一个缓存插件,这原创 2018-01-23 18:23:18 · 160 阅读 · 0 评论 -
hibernate映射配置文件分析(二)
一、标签用来将类与数据库表建立映射关系1.1 name类的全路径1.2 table表名.(类名与表名一致,那么table属性也可以省略)1.3 catalog数据库的名称。由于,我们在hibernate.cfg.xml文件中已经定义了,所以,此处我们一般省略。二、标签用来将类中的属性与表中的主键建立映射,id标签就是用来配置主键的。2原创 2017-11-18 11:13:29 · 291 阅读 · 0 评论 -
Hibernate常用的接口和类Session&Transaction(四)
SessionSession接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户s原创 2017-11-18 13:41:37 · 409 阅读 · 0 评论 -
hibernate持久化类&持久化对象(五)
一、Hibernate的持久化类1.1 什么是持久化类持久化类:就是一个Java类(程序员编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类。持久化类 = JavaBean + xxx.hbm.xml1.2 持久化类的编写规则1. 提供一个无参数 public访问控制符的构造器 -- 底层需要进行反射.2. 提供一个标识属性,映射数据表主键字段-原创 2017-11-18 17:32:34 · 480 阅读 · 0 评论 -
hibernate的事务(七)
1. 什么是事务 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败。 转账的例子:扣钱,加钱。两个操作组成了一个事情!2. 事务的特性* 原子性 -- 事务不可分割。事务就是最小单位。要么全成功,要么全不成功。* 一致性 -- 事务执行的前后数据的完整性保持一致。两个账户,分别有一万,A账户给B账户转了一千,最后,要保证两个账户的和还是两万,这就原创 2017-11-18 22:00:45 · 201 阅读 · 0 评论 -
hibernate框架的查询方式(十九)
hibernate提供5中查询的方式1. 唯一标识OID的检索方式session.get(对象.class,OID)2. 对象的导航的方式man.getCustomer().getCust_name()3. HQL的检索方式Hibernate Query Language-- Hibernate的查询语言4. QBC的检索方式Query By Criteria--原创 2017-11-21 01:04:31 · 275 阅读 · 0 评论 -
spring整合hibernate
Spring整合Struts2、Hibernate原理概述: 从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问。 从系统实现角度看,Ioc容器先创建SessionFactory和Dat...原创 2018-02-08 10:55:51 · 273 阅读 · 0 评论 -
【Hibernate框架】关联映射(一对一关联映射)
一、整理思路hibernate的相关的关联映射,直接上图:这张图,就是整个Hibernate的关联映射的一个大致思路。二、名词解释1、单向关联:很简单,就是一个对象依赖于另一个对象。2、双向关联:两个对象互相依赖。三、一对一(one-to-one)关联映射所谓的一对一,大白话理解就是一个物件拥有的某种附属物件能而且只能拥有一件。举个例子就是作为学生,一个转载 2018-02-06 11:41:47 · 326 阅读 · 0 评论 -
【Hibernate框架】关联映射(一对多,多对一)
场景设定:国家规定,一个人只能在一个公司上班,一个公司可以拥有很多员工。我们就利用这个场景,根据针对对象的不同,我们分别来分析一下一对多、多对一关联映射。一、多对一单向关联映射1、多对一单向关联映射:对于员工(Employee)来说,他跟公司(Company)的对应关系就是多对一关系Po对象:Employee.Javapublic class Employee {转载 2018-02-06 14:49:54 · 283 阅读 · 0 评论 -
BaseDao的封装
import java.io.Serializable;import java.util.List;import org.hibernate.criterion.DetachedCriteria;public interface BaseDao<T> { //增 void save(T t); //删 void delete(T t); //删 void dele...原创 2018-02-17 22:56:46 · 1894 阅读 · 0 评论 -
hibernate中load()和get()的区别
程序可以通过load()来加载一个持久化实例,这种加载就是根据持久化类的标识属性值加载持久化实例——其实质就是根据逐渐从数据表中加载一条新记录。User existUser = session.laod(User.class, pk);上面代码中的pk就是需要加载的持久化实例的标识属性。如果没有匹配的数据库记录,load()方法可能抛出HibernateException;如果在持久化注解原创 2017-11-22 12:39:40 · 405 阅读 · 0 评论 -
hibernate中save()和persist()的区别
hibernate之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯;另一方面是save()和persist()方法还有一个区别:使用save()方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);但使用persist()方法来保存持久化对象时,该方法没有任何返回值。因为save()方法需要立即返回持久化对象的标识属性值,原创 2017-11-22 12:30:48 · 397 阅读 · 0 评论 -
hibernate框架hql的条件查询(九)
给出3个实例,以便忘记怎么写的时候参照一下package com.hib.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.hib原创 2017-11-19 00:12:08 · 307 阅读 · 0 评论 -
hibernate框架一对多级联删除例子(十三)
一、hibernate不级联删除 /** * 不级联删除:删除客户,客户下有2个联系人 */ @Test public void run6() { Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); Customer c1原创 2017-11-19 16:13:51 · 1930 阅读 · 0 评论 -
hibernate框架一对多cascade取值和孤儿删除(十四)
1. 需要掌握的取值如下* none -- 不使用级联* save-update -- 级联保存或更新* delete -- 级联删除* delete-orphan-- 孤儿删除.(注意:只能应用在一对多关系)* all -- 除了delete-orphan的所有情况.(包含save-update delete)* all-delete-orphan--原创 2017-11-19 16:57:20 · 2023 阅读 · 1 评论 -
hibernate框架一对多之放弃外键的维护(十五)
在上一篇文章中,Customer中有private Set linkmans = new HashSet(); Linkman中有private Customer customer; 也就是两者都维护了外键。可以放弃一方面的外键的维护。一对多可以不用放弃。多对多必须放弃,不然程序会报错。1. 先测试双方都维护外键的时候,会产生多余的SQL语句。* 想修改客户和联系人的关系,进行双向原创 2017-11-19 19:20:22 · 2261 阅读 · 0 评论 -
hibernate框架cascade和inverse的区别(十六)
1. cascade用来级联操作(保存、修改和删除)2. inverse用来维护外键的一、只配置cascade="save-update"1.1 配置只在customer.hbm.xml中配置cascade="save-update"1.2 测试代码 /** * cascade和inverse的区别 */ @Test public void run1原创 2017-11-19 20:00:14 · 251 阅读 · 0 评论 -
hibernate框架一对多级联保存例子(十二)
1. 在前一篇文章中,在代码只插入其中的一方的数据* 如果只保存其中的一方的数据,那么程序会抛出异常。* 如果想完成只保存一方的数据,并且把相关联的数据都保存到数据库中,那么需要配置级联!!* 级联保存是方向性2. 级联保存效果* 级联保存:保存一方同时可以把关联的对象也保存到数据库中!!* 使用cascade="save-update"一、级联保存:保存客户,原创 2017-11-19 15:41:10 · 2334 阅读 · 0 评论 -
为什么要使用数据源
数据源是提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性地创建多个数据库连接,并把这些数据库连接保存在连接池中。当程序需要进行数据库访问时,无须重新获得数据库连接,而是从连接池中取出一个空闲的数据库连接。当程序使用数据库连接访问数据库结束后,无须关闭数据库连接,而是将数据库连接归还给连接池即可。通过这种方式,就可避免频繁地获取数据库连接、关闭数据库原创 2017-11-20 12:32:13 · 2429 阅读 · 1 评论 -
hibernate为什么要配置数据库的方言
hibernate底层依然使用sql语句来执行数据库操作,虽然所有关系型数据库都支持使用标准sql语句,但所有数据库都对标准sql语句进行了一些扩展,所以在语法细节上存在一些差异。因此,hibernate需要根据数据库来识别这些差异。举例来说,当mysql数据库里进行分页查询,只需使用limit关键字就可以了;而标准sql并不支持limit关键字,例如oracle则需要使用行内视图的方式来进行原创 2017-11-20 12:52:26 · 1103 阅读 · 1 评论 -
hibernate框架Criteria查询(十)
Criteria查询接口(做条件查询非常合适)写两个例子: /** * 按条件的查询,写法很麻烦,但是开发中用的挺多 */ @Test public void testCriteria2() { Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction原创 2017-11-19 00:16:25 · 187 阅读 · 0 评论 -
hibernate框架双向一对多例子(十一)
一方Customer,多方Linkman一、创建数据库hibernate_second创建两张表:CREATE TABLE `cst_customer` ( `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` varchar(32) NOT NULL COMMENT '客户原创 2017-11-19 14:44:37 · 392 阅读 · 0 评论 -
hibernate框架多对多(十七)
用户和角色是多对多的关系。那么他们需要一个中间表来维持多对多的关系。中间表有两个外键分别指向用户表和角色表的主键。中间没有单独的主键,uid和rid作为联合主键。如果我们自己创建,就要创建三张表。如果使用hibernate,只要编写2个javabean,编写2个映射的配置文件,中间表会自动生成。一、javabean和配置1.1 javabeanUser.javapackag原创 2017-11-20 22:21:51 · 233 阅读 · 0 评论 -
hibernate框架多对多-级联保存(十八)
一、多对多级联保存多对多级联保存,只要在上一篇的基础上对User.hbm.xml配置稍作修改1.1 配置多对多级联的时候,一方配置inverser,另一方就配置cascade1.2 测试程序 @Test public void run2() { Session session = HibernateUtils.getCurrentSession(); Tran原创 2017-11-20 23:02:54 · 290 阅读 · 0 评论 -
hibernate主键生成策略注意native和increment
针对mysql,native和increment的作用基本是一样的。但是,native一定要求,表的id字段是自增的。increment则无要求。原创 2017-11-16 17:02:42 · 833 阅读 · 0 评论 -
hibernate框架的查询方式QBC(二十)
四、 QBC的检索方式Query By Criteria。条件查询中用得比较多。因为hql中做条件查询的话,写hql语句稍微有点麻烦,QBC就很方便了。4.1 基本演示 /** * QBC的查询,基本演示 */ @Test public void run1() { Session session = HibernateUtils.getCurrentSess原创 2017-11-21 22:52:29 · 322 阅读 · 0 评论 -
hibernate框架的查询方式sql语句(二十一)
一、基本操作 /** * sql语句查询,基本操作 */ @Test public void run1() { Session session = HibernateUtils.getCurrentSession(); Transaction tx = session.beginTransaction(); // 创建的是sql的查询接口 SQLQuery que原创 2017-11-22 00:06:11 · 342 阅读 · 0 评论 -
hibernate框架的查询方式hql的多表查询(二十二)
一、简单演示 /** * 查询的客户,客户和联系人有关系 select * from cst_customer c, cst_linkman l where c.id = * l.id */ @Test public void run1() { Session session = HibernateUtils.getCurrentSession(); Transacti原创 2017-11-22 00:26:59 · 237 阅读 · 0 评论 -
Hibernate的实体类中为什么要继承Serializable?
Hibernate的实体类中为什么要继承Serializable?hibernate有二级缓存,缓存会将对象写进硬盘,就必须序列化,以及兼容对象在网络中的传输 等等。java中常见的几个类(如:Interger、String等),都实现了java.io.Serializable接口。实现 java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列...转载 2018-02-22 13:30:14 · 628 阅读 · 0 评论