SessionFactory sessionFactory = new Configuration().configure().
Hibernate学习笔记2 1.Hibernate持久化类与主键生成策略 2.Hibernate持久化对象状态 2.1. 持久化类类三种状态 2.2. 由hibernate维护一个变量,每次生成主键时自动以递增。问题:如果有多个应用访问一个数据库,由于每个应用维护自己的主键,所以此时主键可能冲突。建议不采用。 identity 代理主键。 2.Hibernate持久化对象状态 2.1. 2.持久态:在hibernatesession管理范围内,它具有持久化标识OID它的特点,在事务未提交前一直是持久态,当它发生改变时,hibernate是可以检测到的。 问题2:脱管对象的oid如果在数据表中不存在,会报异常? ? 所以:在操作中,建议我们通过持久化对象来直接修改其操作。
{ this.id = id; } public void setLastname(String lastname) { this.lastname = lastname; } } 2: 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.nerd.entity.Person" table="person > 3:把配置加入到<em>hibernate</em>.cfg.xml中 <mapping resource="com/nerd/entity/Person.hbm.xml"/> 4:创建一个方法使关联工作 Event.class, eventid); aPerson.getEvents().add(aEvent); session.getTransaction().commit(); } 注意Hibernate
class="native"/> </id> 注意,在使用native的底层是针对Oracle数据库时,id的生成方式还是使用sequence,只不过需要一个特定名字的sequence,"hibernate_sequence 2,外键引用,也就是一方引用另一方的主键,作为外键,并且对引用的外键加唯一约束。 以User和Address类为例,用户和用户的地址是一对一关系 User类 package alan.hbn.rel.o2o; import java.io.Serializable; public class = null){ address.setUser(this); } } } Address类 package alan.hbn.rel.o2o; import
发表评论 663 views A+ 所属分类:Hibrenate Hibernate框架应用步骤 ---- 引入hibernate所需jar包 ---- 1.创建实体类,(最好实现序列化接口 return "Student [id=" + id + ", name=" + name + ", age=" + age + ", score=" + score + "]"; } } ``` ---- 2. DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org public void testSave() { // 1.加载主配置文件 Configuration configure = new Configuration().configure(); // 2. -- 自动建表 --> <property name="<em>hibernate</em>.hbm<em>2</em>ddl.auto">update</property> <!
2.持久化类 ---- 2.1 持久化类的编写规则 实体类经过 hibernate 操作转换成持久化类,下面还是使用实体类说明规则。 实体类提供无参的构造方法。 2.hibernate 的一级缓存使用范围就是 session 范围,是从 session 创建到 session 关闭。 3.hibernate 的一级缓存,存储数据必须是持久化数据。 5.3 事务的并发问题 在实际应用中,数据库是要被多个用户共同访问的,在多个事务同时使用相同的数据时,可能会发生并发的问题。 脏读:一个事务读取到了另一个事务未提交的数据。 配置方法:<property name="<em>hibernate</em>.connection.isolation">4</property> ,并且我们在进行正真的事务管理时,需要考虑到事务的应用场景,事务的控制不应该放在 Session 对象的生命周期与本地线程绑定 Session 对象的生命周期与 JTA(Java Transaction API,Java事务API,是一个Java企业版的应用程序接口)事务绑定 hibernate
*ok 没问题spring和hibernate整合完毕 *再将struts2所需包加入lib中 *创建struts.xml配置文件 Java代码 1.<? > 2.<!DOCTYPE struts PUBLIC 3. > 2.<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j<em>2</em>ee" 3. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6. 7. 20. <filter> 21.
2.一级缓存应用: save()。当session对象调用save()方法保存一个对象后,该对象会被放入到session的缓存中。 get()和load()。 /*从数据库中获取id="402881e534fa5a440134fa5a45340002"的Customer对象*/ Customer customer2 getUsername is"+customer2.getUsername()); /*事务提交*/ tx.commit(); customer.getUsername islisi ------------------------------------- customer2.getUsername islisi ------ == customer2 result is true说明两个取出来的对象是同一个对象。
持久化类映射文件在hibernate.cfg.xml中的配置 hibernate的配置文件hibernate.cfg.xml用于配置数据库的连接的信息,以及需要持久化的对象的xml映射文件的位置 在hibernate.cfg.xml hibernate.cfg.xml中的标签 <! DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" " http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory --指定sequence名--> </generator> </id> 2,自增列,适用于SQLServer和MySQL <id name="id" column="id"> <generator
多对多的映射实现 一般多对多关联会拆分成两个一对多的关系来实现多对多关系,也可以通过hibernate提供的解决方案来实现。 其实hibernate的实现方式是通过中间表间接的实现了多对多关系,实际上也是将多对多拆分成两个双向的一对多关系。 -- key子标签中标明的被引用的本类对应表的字段,many-to-many子标签是表示关联类在中间表中对应引用字段的 --> </class> </hibernate-mapping> > 类继承关系映射 建表策略 1) 所有类建一个表 2) 只为具体类建表 3) 每个类建一个表。 2) 只为具体类建表,使用于不使用多态的情况下,具体类之间没有继承关系时适用 需要针对每个类写映射配置文件,就和普通的单表映射的xml文件相同。
以前没有关注这块,现在分析一下这个参数的属性值: 在hibernate配置文件中书写即可 它包含4个属性: * create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表 ,重新生成表,哪怕2次没有任何改变 * create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除 * update : 最常用的属性
常用的是共享主键策略来完成一对一关系的映射 User类的映射文件User.hbm.xml <hibernate-mapping package="alan.hbn.rel.o2o"> <class name="User" table="user_o<em>2</em>o_pk"> <id name="userId" column="userid"> <generator > Address类的映射文件Address.hbm.xml <hibernate-mapping package="alan.hbn.rel.o2o"> <class name="Address > 外键策略来完成一对一关系的映射 User类的映射文件User.hbm.xml <<em>hibernate</em>-mapping package="alan.hbn.rel.o2o"> <class name > Address类的映射文件Address.hbm.xml <hibernate-mapping package="alan.hbn.rel.o2o"> <class name="Address
前言: 上一篇文章我们学习了Hibernate的配置详解,主要包括两个配置文件, hibernate.cfg.xml和hbm.xml。 DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net Orders orders2 = new Orders(); orders2.setName("订单1"); //将customer赋给orders2 Orders orders2 = new Orders(); orders2.setName("订单1"); //将customer赋给orders2
setUpdateTime(Timestamp updateTime){ this.updateTime = updateTime; } } 使用时间戳的User类的User.hbm.xml文件 <hibernate-mapping name="name" column="name"/> <property name="phone" column="phone"/> </class> </hibernate-mapping > 类继承关系映射 建表策略 1) 所有类建一个表 2) 只为具体类建表 3) 每个类建一个表。 2) 只为具体类建表,使用于不使用多态的情况下,具体类之间没有继承关系时适用 需要针对每个类写映射配置文件,就和普通的单表映射的xml文件相同。
1 前三个文章 是我对ssh的具体实现 虽然没有真的写一个ssh的例子出来 但是 意思应该传达到了 主要还是注解注入的ssh太模块化了 感觉写出来意义不大 个人水平有限 说不清 2 我一开是写的是struts2 是有原因的 它就是ssh的第一个 负责mvc的分类 有了它基本代码的规范就有了 后面先写hibernate再写spring 则是因为hibernate具体spring抽象 而且struts+hibernate
/ProductDaoHibernate.java 1 package com.v512.example.dao.hibernate; 2 3 import java.util.List; 4 定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder. 8 * 会启动后延时数秒新开线程调用compassGps.index()函数. 9 * 默认会在Web应用每次启动时重建索引 --设置一起动当前的Web应用,就加载Spring,让Spring管理Bean--> 14 <listener> 15 <listener-class> 16 --解决Hibernate延迟加载出现的问题,需要放到struts2过滤器之前--> 20 <filter> 21 <filter-name>lazyLoadingFilter< --解决Hibernate延迟加载出现的问题,仍需要放到struts2过滤器mapping之前--> 37 <filter-mapping> 38 <filter-name>lazyLoadingFilter
J2EE中搭建搭建hibernate: 在这我就只是给出初略的步骤了 注意:如果只是搭建hibernate的话不需要再Web.xml中配置hibernate信息 整体的架构如下图: ? 需要加入的jar文件有hibernate的和mysql的jdbc,如下图: ? 获得SessionFactory,如下图所示: ? 下图是hibernate.xml中的配置: ? (adsbygoogle = window.adsbygoogle || []).push({});
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http:/ /hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.demo.model"> = new Certificate(); certificate2.setCertificateId(4); certificate2.setCertificateName("dd"); certificate2 3 证书名称:cc Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2 证书名称:cc Hibernate: select student0_.student_id as student1_0_0_, student0_.student_name as student2_0
一、springBoot2.x整合hibernate5 1.所需依赖: <dependency> <groupId>org.springframework.boot</groupId> 2.application.properties中的配置: springBoot2.x默认使用的连接池是hikari,号称是最快的连接池,用来替换druid的。 由于springBoot2.x默认使用这个连接池,所以不需要添加额外的依赖,下面是其相关配置: #最大连接数 spring.datasource.hikari.maximum-pool-size=20 我们都知道hibernate首先要获取sessionFactory,然后从sessionFactory中获取session进行持久化操作。那么如何获取这个Session呢? 首先在application.properties中定义其配置: hibernate.current_session_context_class=org.springframework.orm.hibernate5
> 2 <! products) { 88 this.products = products; 89 } 90 91 } Product.java 1 package com.b510.examples; 2 ). 2 log4j:WARN Please initialize the log4j system properly. 3 Hibernate: 4 select 5 category0_.id as id1_0_, 6 category0_.description as descript2_1_0_, 7 category0_.name descript2_5_0_, 41 category0_.name as name5_0_ 42 from 43 users.category category0