hibernate配置及数据库映射建立流程
hibernate的基本用法
hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
Hibernate学习笔记
Hibernate项目的构建与配置1.在项目里倒入Hibernate所必须的Jar包(1)Hibernate框架可以使用在任何的Java项目里,并不一定是Web项目。
只需要在项目里倒入Hibernate所必须要使用的jar包就可以了。
(2)在Hibernate的官网下载hibernate-release-4.2.2.Final.zip解压,要使用Hibernate必须导入的jar包就在目录“hibernate-release-4.2.2.Final\lib\required”下。
倒入此路径下的所有jar包就可以了。
2.配置hibernate.cfg.xml文件(1)配置hibernate.cfg.xml文件可以参考“\project\etc”目录下的hibernate.cfg.xml文件与hibernate.properties文件。
(2)使用Hibernate连接MySQL的hibernate.cfg.xml配置文件如下:<hibernate-configuration><session-factory>(设置显示Hibernate产生的SQL语句)<property name="show_sql">true</property>(设置MySQL的SQL语法的方言)<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>(设置MySQL的驱动程序)<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>(设置MySQL的数据库路径、用户名、密码)<property name="hibernate.connection.url">jdbc:mysql:///java</property><property name="ername">root</property><property name="hibernate.connection.password">lizhiwei</property>(设置当数据库要保存的表不存在时,就新建表)<property name="hibernate.hbm2ddl.auto">update</property>(设置对象与数据库表的关系映射文件)<mapping resource="vo/User.hbm.xml"/></session-factory></hibernate-configuration>(3)此配置文件一般放在项目的src目录下。
hbm映射文件配置和主键生成策略
hbm映射文件配置和主键生成策略1.hbm文件配置①配置类到指定数据库中表的映射.<?xml version="1.0" encoding="UTF-8"?>.<!DOCTYPE hibernate-mapping PUBLIC."-//Hibernate/Hibernate Mapping DTD 3.0//EN"."/dtd/hibernate-mapping-3.0.dtd">.<!-- 完成实体类和数据表映射-->.<hibernate-mapping>.<!-- 1、类与表的映射-->.<!--.name 类名.table 表名.catalog 数据库名.-->.<class name="cn.itcast.domain.Customer" table="customer"catalog="hibernate3day1">.<!-- 2、类中属性与表中数据列映射-->.<!-- 主键-->.<!--.name 属性名(类中).column 列名(表中).type 类型.-->.<id name="id" column="id" type="int">.<!-- 主键策略identity 主键自增长-->.<generator class="native"></generator>.</id>.<!-- 普通属性-->.<property name="name" column="name" type="ng.String"not-null="true"></property> <!-- java类型-->.<property name="age" column="age" type="int"></property>.<property name="city">.<column name="city" sql-type="varchar(20)"></column> <!-- SQL类型--> .</property>.</class>..<!-- 在配置文件中定义SQL,给SQL命名,在程序通过login 使用SQL -->.<sql-query name="login">.<![CDATA[select * from user where username= ? and password =?]]>.</sql-query>..</hibernate-mapping>* 在配置过程中,省略column 和 type ,如果不写column 生成列名就是属性名,不写type将按照类中属性类型自动映射* 配置列其它属性 unique="true" 唯一not-null="true" 非空length="20" 长度2.主键的生成策略在<id>元素中通过 <generator class="生成策略"></generator> 指定数据表主键生成策略常用六种主键生成策略①incrementincrement 标识符生成器由 Hibernate 以递增的方式为代理主键赋值原理:select max(id) , insert max(id)+1* 使用 increment 创建数据表没有主键自增长,通过hibernate在程序内部完成自增* 好处跨平台,缺点高并发访问时,可以出现主键冲突问题②identity (无线程问题)---- Mysqlidentity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型原理:依赖数据库内部自增长,和hibernate无关* 创建数据表 `id` int(11) NOT NULL AUTO_INCREMENT* 优点,无需程序处理,数据库自己完成主键增长,缺点 Mysql支持自增主键,oracle 不支持③sequence --- Oraclesequence 标识符生成器利用底层数据库提供的序列来生成标识符原理:依赖数据库序列支持,和hibernate程序无关* Oracle 支持序列, Mysql 不支持序列* 序列原理create sequence customer_seq;insert into customer(id) values(customer_seq.nextval); 自动序列+1④nativenative 标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择使用 identity, sequence 或 hilo 标识符生成器.* Mysql 自动选择 identity , oracle 自动选择 sequence⑤uuiduuid 的主键生成,采用String 类型主键随机生成32位字符串⑥assigned前五种策略,都是代理主键生成策略assigned 是自然主键生成策略 ---- 必须用户在程序中指定(无法自动生成)* 复合主键(联合主键),一个数据表中多列共同作为主键 -----复合主键是一种特殊 assigned 策略.<composite-id>.<!-- 配置多列-->.<key-property name="firstname"></key-property>.<key-property name="secondname"></key-property>.</composite-id>错误:Caused by: org.hibernate.MappingException: composite-id class must implement Serializable: cn.itcast.domain.Person复合主键类必须实现序列化接口。
hibernate配置
目录
1 Hibernate概述 2 第一个Hibernate程序 3 Hibernate的配置文件 4 深入理解持久化对象 5 Hibernate的映射文件 6持久化对象 如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录
脱管对象 如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原 因,PO实例脱离了Session 的管理
Hibernate全面解决方案架构解释
事务(Transaction) 代表一次原子操作,它具有数据库事务的概念 但它通过抽象,将应用程序从底层的具体的JDBC、JTA和CORBA 事务中隔离开。 一个Session 之内可能包含多个Transaction对象。 所有的持久化操作都应该在事务管理下进行,即使是只读操作。
管态,对该对象操作无须锁定数据库,不会造成性能的下降。
持久化对象的状态迁移
持久化实体: 1、Serializable save(object obj) 将对象变为持久化状态 2、void persist(object obj) 将对象转化为持久化状态 3、Serializable save(object obj,object pk) 将obj对象转化为持久化状态,该对象保存到数据库,指定主键值 4、void persist(object obj,object pk) 也加了一个设定主键
Hibernate工作原理
Configuration cfg = new Configuration().configure();
开始
启动hibernate
构建Configuration 实例,初始 化该实例中的所有变量
hibernet的原理
hibernet的原理Hibernate的原理简介Hibernate是一个开源的对象关系映射(ORM)框架,用于将Java应用程序中的对象与关系型数据库之间进行映射。
它可以大大简化数据库操作,并提供了高度的灵活性和可维护性。
ORM的基本概念•对象关系映射(ORM):将关系数据库中的表和对象之间的映射关系定义在一个配置文件中,使得Java中的对象可以直接操作数据库,无需编写复杂的SQL查询语句。
•持久化:将对象保存在数据库中,以便随时从数据库中获取对象。
•对象关系映射文件(ORM文件):包含了实体类和数据库表之间的映射关系。
•实体类:表示Java应用程序中的一个实体,通常与数据库表中的一行数据对应。
Hibernate的工作原理1.配置文件–创建``配置文件,包含了数据库连接信息、实体类与数据库表之间的映射关系等。
2.实体类–创建实体类,为类添加注解或使用XML文件,用于定义实体类与数据库表之间的映射关系。
3.SessionFactory–在应用程序启动时,使用配置文件和实体类来创建SessionFactory对象。
SessionFactory是线程安全的,通常一个应用只需要一个SessionFactory实例。
4.Session–在应用程序运行过程中,通过()方法创建Session对象。
–Session代表了与数据库的一次会话,可用于执行数据库操作,如增删改查等。
–Session具有缓存机制,它会缓存从数据库检索到的实体对象,以提高性能。
5.事务管理–Hibernate使用事务来管理数据库操作,保证数据的一致性。
–开启事务:();–提交事务:();–回滚事务:();6.对象操作–使用Session对象操作数据库,如保存对象、更新对象、删除对象等。
–查询操作:使用HQL(Hibernate Query Language)或Criteria API进行查询,它们提供了更高级的查询功能。
7.数据库操作–Hibernate会根据实体类和数据库表之间的映射关系,自动生成对应的SQL语句并执行。
Hibernate教程_从入门到精通_第二篇(共四篇)
目标: •Hibernate API简介
Hinernate的体系结构(运行时)
SessionFactory:它保存了对当前数据库配置的所有映射关系,它是将某 个数据库的映射关系经过编译之后全部保存在内存中的。 它还是生成 Session的工厂,它在进行实例化的过程中将会用到ConnectionProvider。 一个SessionFactory对应一个数据库连接,当数据库连接改变时需要修改 SessionFactory Sesion: 是进行持久化操作的基础,所有的持久化操作都是在Session的 基础上进行的。它相当与JDBC中的Connection。它是Hibernate的持 久化 管理器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针 对持久化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对 象的时候会用 到。 Transation:功能上和数据库中的事务完全一样,通过它实现对数据库中 事务的控制。Transation对象是Session对象产生的,所以他的生命周期比 Session短。一个Session的生命周期中可以有多个Transaction对象。 ConnectonProvider:主要作用是生成与数据库建立了连接的JDBC对象 ,同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应 用程序和底层的DataSource和DriverManager的隔离。 TransactionFactory:是生成Transaction对象的工厂,通过 TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无 关。
判断一个实体对象是否处于瞬态: 该实体对象的<id>属性(如果存在)的值为空 如果在映射文件中为<id>设置了unsaved-value属性,并且 实体对象的id属性的值与unsaved-value属性的值相同 如果这个实体对象配置version属性,并且version属性的 空 在映射文件中为version属性设置了unsaved-value属性,并且 version属性的值与unsaved-value属性的值相同。 如果设置了interceptor,并且interceptor的isUnsaved() 方法的返回值为true
hibernate saveorupdate举例使用
hibernate saveorupdate举例使用Hibernate是一个用于Java语言的对象关系映射框架,它提供了一种将对象模型与关系数据库进行映射的方式,使开发人员可以通过面向对象的方式进行数据库操作。
其中,saveOrUpdate()是Hibernate中一个常用的方法,用于保存或更新实体对象。
在本文中,我将详细介绍saveOrUpdate()方法的使用,并以示例代码来演示其具体的操作步骤。
首先,我们需要配置Hibernate的相关环境和依赖。
在项目的pom.xml 文件中,添加如下的Hibernate依赖:xml<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.0.Final</version></dependency>同时,我们需要在项目中配置Hibernate的相关配置文件,如hibernate.cfg.xml。
在该文件中,我们需要配置数据库的连接信息、实体类与数据库表的映射关系等。
接下来,我们创建一个实体类,假设为User,用于映射到数据库中的一张用户表。
javaEntityTable(name = "user")public class User {IdGeneratedValue(strategy = GenerationType.IDENTITY)private Long id;Columnprivate String username;Columnprivate String password;getters and setters}在上述代码中,我们使用Entity注解将User类与数据库表进行映射,并使用Table注解指定了数据库表的名称。
Hibernate操作数据库的方法
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
//取得SessionFactory实例
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//打开一个Session实例
Session session = sessionFactory.openSession();
//开始事务
sessionFactory = new Configuration().configure(file)
.buildSessionFactory();
} catch (Throwable ex) {
//创建SessionFactory失败信息
System.err.println("Initial SessionFactory creation failed." + ex);
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
userTable.setPassword("123456");
hibernate配置文件说明
create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行。会导致数据库表数据丢失。
create-drop: 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
(2)hibernate.show_sql打印所有的SQL语句到控制台,可以通过设置org.hibernate.SQL类的日志策略到DEBUG级,实现同样的效果。取值 true|false。
(3)hibernate.format_sql 格式化SQL语句在打印到控制台或写入日志文件时。取值true|false。
hibernate.cache.provider_class=org.hibernate.cache.SingletonEhCacheProvider
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
# 二级缓存配置文件
#Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。
hibernate.jdbc.batch_size=50
#设置外连接抓取树的最大深度取值. 建议设置为0到3之间
#hibernate.max_fetch_depth
#是否显示最终执行的SQL(开发环境)
hibernate.show_sql=false
# 格式化显示的SQL
hibernate.format_sql=false
# 如果设置为true,Hiberante将为SQL产生注释,这样更利于调试。默认值为false。取值为true|false。
Java中的数据库操作和ORM框架
Java中的数据库操作和ORM框架在Java开发中,数据库操作是一个非常重要的环节之一。
为了方便开发者对数据库进行操作,提高开发效率和可维护性,ORM(Object Relational Mapping)框架被广泛应用。
本文将介绍Java中的数据库操作和ORM框架的使用。
一、Java中的数据库操作1. JDBCJDBC(Java Database Connectivity)是Java中最常用的数据库操作方式之一。
通过JDBC,开发者可以使用Java程序连接数据库、执行SQL语句、获取数据结果等。
JDBC的基本使用步骤如下:(1)加载数据库驱动程序:Class.forName("com.mysql.jdbc.Driver");(2)建立数据库连接:Connection connection = DriverManager.getConnection(url, username, password);(3)创建Statement对象:Statement statement =connection.createStatement();(4)执行SQL语句并获取结果:ResultSet resultSet = statement.executeQuery(sql);(5)遍历结果集并处理数据:while (resultSet.next()) { // 处理数据 }(6)释放资源:resultSet.close(); statement.close(); connection.close();2. PreparedStatementPreparedStatement是JDBC中用于执行预编译SQL语句的接口。
相比Statement,PreparedStatement具备更好的性能和安全性,并且可以防止SQL注入攻击。
使用PreparedStatement的基本步骤如下:(1)创建PreparedStatement对象:PreparedStatement preparedStatement = connection.prepareStatement(sql);(2)设置参数并执行SQL语句:preparedStatement.setXXX(index, value); // 设置参数 preparedStatement.execute(); // 执行SQL语句(3)获取结果集并处理数据:ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { // 处理数据 }(4)释放资源:resultSet.close(); preparedStatement.close(); connection.close();二、ORM框架的使用1. HibernateHibernate是一个流行的Java ORM框架,它通过对象关系映射的方式将Java对象与数据库表进行映射,提供了一系列方便的API来进行数据库操作。
ssh三大框架整合
ssh三⼤框架整合Hibernate框架 1 hibernate核⼼配置⽂件 (0)orm思想 - 对象关系映射 (1)数据库信息 (2)hibernate信息 (3)映射配置 (4)hibernate核⼼配置⽂件 - 如果单纯使⽤hibernate框架,核⼼配置⽂件名称 hibernate.cfg.xml和位置 src下⾯固定的 - hibernate和spring整合时候,hibernate核⼼配置⽂件名称和位置没有固定要求的 2 hibernate映射配置⽂件 (1)实体类和数据库表映射关系—使⽤orm思想 3 hibernate操作的步骤 (1)在spring框架对hibernate框架进⾏封装,使⽤hibernateTemplateStruts2框架 1 Action操作 (1)action创建三种⽅式 - 继承类 ActionSupport (2)配置action访问路径 - 创建struts.xml配置⽂件,这个⽂件名称和位置固定 src下⾯的 (3)配置访问action的多个⽅法 - 使⽤通配符⽅式配置 (4)在action获取表单提交数据 - 获取request对象 ** 使⽤ServletActionContext类获取 - 属性封装 - 模型驱动(重点) - 表达式封装 (5)在action操作域对象 - 使⽤ServletActionContext获取域对象 (6)配置struts2的过滤器 2 值栈 (1)向值栈放数据 - set⽅法 - push⽅法 - 定义变量,⽣成get⽅法 (2)从值栈获取数据 - 在jsp中使⽤struts2标签+ognl获取 - <s:property> - <s:iterator> 3 拦截器 (1)aop和责任链模式 (2)⾃定义拦截器 - 继承MethodFilterInterceptor - 重写类⾥⾯的⽅法 - 配置拦截器和action关联Spring框架 1 spring核⼼配置⽂件 (1)名称和位置没有固定要求 (2)在spring核⼼配置⽂件中引⼊schema约束 2 创建对象 (1)xml配置⽅式:<bean id=”” class=”” scope=””/> (2)注解⽅式:四个注解 3 注⼊属性(对象类型属性) (1)xml配置⽅式: (2)注解⽅式:两个注解 - autowired - resource 3 使⽤ServletContext对象和监听器实现 (1)在服务器启动时候,加载spring配置⽂件,创建对象 (2)配置spring的监听器 (3)指定spring配置⽂件位置 4 jdbcTemplate 5 spring事务配置 (1)xml⽅式 (2)注解⽅式SSH框架整合思想 1 三⼤框架应⽤在javaee三层结构 2 struts2框架和spring整合 (1)struts2的action在spring配置 3 spring框架和hibernate框架整合 (1)hibernate的sessionFactory交给spring配置 (2)把hibernate数据库配置交给spring配置整合struts2和spring框架 1 把struts2的action交给spring管理 2 实现过程 第⼀步导⼊struts2的jar包 (1)导⼊⽤于整合的jar包 (log4j.properties为log4j的⽇志输出格式,放⼊src下⾯) (2)Spring为了整合Struts还需要额外再导⼊⼀个jar包:(该包在struts的lib⽬录下) (3)导⼊Struts2的jar包(struts2版本为2.3.24): (4)创建Actionpublic class UserAction extends ActionSupport {public String execute() throws Exception {System.out.println("Success....");return NONE;}} (5)创建Strut2的核⼼配置⽂件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo" extends="struts-default" namespace="/"><action name="userAction" class="erAction"></action></package></struts> (6)在web.xml中配置struts2的过滤器<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping> (7)导⼊Spring整合Web项⽬的jar包,也就是监控项⽬启动的监听器所在的jar包 (8)创建Spring的核⼼配置⽂件并在其中引⼊约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"></beans> (9)把action交给Spring进⾏配置1 <!-- 配置action的对象 -->2 <!-- 注意action是多实例的,因此我们这⾥把scope配置为prototype的 -->3 <bean id="userAction" class="erAction" scope="prototype"></bean> ①在spring配置action对象,在struts.xml中也配置action对象 ②解决: 只需要在spring⾥⾯配置action对象,不要在struts.xml中配置<struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts> 可以这样写的原因是我们导⼊了⼀个Spring整合Struts2的jar包:struts2-spring-plugin-2.3.24.jar (10)web.xml中Spring监听器的配置<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param> (11)测试准备 ①所需的为Struts2的核⼼配置⽂件:struts.xml ②Spring的配置⽂件:bean.xml ③项⽬的配置⽂件:web.xml ④Struts2的UserAction类 ⑤在UserAction中对UserService的调⽤ ⑥UserService中对UserDao的调⽤ ⑦UserDao类的编写struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""/dtds/struts-2.3.dtd"><struts><package name="demo1" extends="struts-default" namespace="/"><!-- class属性⾥⾯不写action全路径了,因为写,action对象创建两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts>bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd"><bean id="userAction" class="erAction"><property name="userService" ref="userService"></property></bean><bean id="userService" class="erService"><property name="userDao" ref="userDaoImp"></property></bean><bean id="userDaoImp" class="erDaoImp"></bean></beans>web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" <display-name>spring-day4-ssh</display-name><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:bean.xml</param-value></context-param><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>UserAction.javaimport com.opensymphony.xwork2.ActionSupport;import erService;public class UserAction extends ActionSupport {private UserService userService;public void setUserService(UserService userService) {erService = userService;}public String execute() throws Exception {userService.add();return NONE;}}UserService.javapublic class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {erDao = userDao;}public void add() {userDao.add();}}UserDao.java 其实现类public class UserDaoImp implements UserDao {public void add() {System.out.println("UserDaoImp....");}} (12)测试结果: 可以在后台观察到如下测试结果:image ⾄此,Spring和Struts2的整合已经完毕,然后是Spring对Hibernate的整合了。
Hibernate_映射配置文件详解
Prepared by TongGang
hibernate.cfg.xml的常用属性
• • • • • • • • • connection.url:数据库URL ername:数据库用户名 connection.password:数据库用户密码 connection.driver_class:数据库JDBC驱动 show_sql:是否将运行期生成的SQL输出到日志以供调试。取 show_sql 值 true | false dialect:配置数据库的方言,根据底层的数据库不同产生不 dialect 同的sql语句,Hibernate 会针对数据库的特性在访问时进行 优化。 hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据 hbm2ddl.auto 库模式。取值 create | update | create-drop resource:映射文件配置,配置文件名必须包含其相 mapping resource 对于根的全路径 connection.datasource :JNDI数据源的名称
• Class:定义一个持久化类 Class: • name (可选): 持久化类(或者接 (可选): 持久化类( 可选 口)的类名 • table (可选 - 默认是类的非全限 (可选 定名): 定名): 对应的数据库表名 • discriminator-value (可选 - 默 discriminator(可选 认和类名一样): 认和类名一样): 一个用于区分不 同的子类的值,在多态行为时使用。 同的子类的值,在多态行为时使用。 它可以接受的值包括 null 和 not null。 null。
Prepared by TongGang
Hibernate 配置详解 (一)
Hibernate 配置详解(一)Hibernate的基本配置文件有两种:hibernate.cfg.xml和*.hbm.xml文件。
前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到Configuration和SessionFactory实例;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping 节点被加载到Configuration和SessionFactory实例。
这两种文件信息包含了Hibernate的所有运行期参数。
下面我们用详细的例子来说明这两种文件的基本结构和内容。
一、hibernate.cfg.xml文件:<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:--> <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- 正文开始--><hibernate-configuration><!--下面是数据库的基本连接信息,对一个应用来说,设置一个session-factory节点就够了,除非我们中间使用了多个数据库--> <session-factory><!--数据库驱动信息--><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!--url信息--><propertyname="connection.url">jdbc:mysql://localhost:3306/webases</property><!--用户名--><property name="ername">root</property><!--密码--><property name="connection.password">274507</property><!--数据库方言信息--><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--指定Hibernate映射文件路径--><mapping resource="com/Hibernate/test_products.hbm.xml" /></session-factory></hibernate-configuration>。
hibernate的manytoone和onetomany用例 -回复
hibernate的manytoone和onetomany用例-回复Hibernate是一个Java的持久化框架,常用于开发数据访问层的代码。
它提供了一种简化数据库操作的方法,可以通过对象和关系数据库进行交互。
在Hibernate中,常用的关系映射包括many-to-one和one-to-many。
本文将通过详细讲解这两种关系映射的用例来帮助读者更好地理解和使用Hibernate。
首先,我们来了解一下many-to-one关系映射。
这种映射关系表示一个实体对象(通常是较"多"的一方)可以与另一个实体对象(通常是较"一"的一方)建立多对一的关系。
在关系数据库中,这种关系通过外键实现。
在Hibernate中,我们可以通过注解或XML配置来映射这种关系。
假设我们要建立一个简单的图书和作者的many-to-one关系映射。
一个作者可以写多本图书,而一本图书只能由一个作者所写。
我们先创建一个Author类和一个Book类。
Author类包含作者的姓名、年龄等属性,并与多个Book对象建立关联,通过"books"字段来表示与图书的关系。
Book 类包含图书的名字、出版日期等属性,并通过"author"字段与一个Author 对象建立关联,表示与作者的关系。
javapublic class Author {private Long id;private String name;private int age;private List<Book> books;省略getter和setter方法}public class Book {private Long id;private String name;private LocalDate publishDate;private Author author;省略getter和setter方法}在Author类中,我们可以使用OneToMany注解来建立与Book对象的关联,并通过设置cascade属性来实现级联操作。
hibernate项目开发的一般步骤
Hibernate 是一个开源的对象关系映射(ORM)框架,它可以将 Java 对象映射到关系型数据库中。
使用 Hibernate 进行项目开发的一般步骤如下:
1. 配置 Hibernate:首先需要在项目中添加 Hibernate 的相关依赖,并在配置文件中进行相关配置,如连接数据库的 URL、用户名和密码等。
2. 创建实体类:根据数据库表的结构,创建相应的 Java 实体类。
这些类需要继承自Hibernate 的某个抽象类或接口,并包含相应的属性和注解。
3. 创建映射文件:为每个实体类创建一个映射文件,用于描述实体类与数据库表之间的映射关系。
映射文件通常是以`.hbm.xml`为扩展名的文件。
4. 编写 DAO 类:使用 Hibernate 提供的 API 编写数据访问对象(DAO)类,用于对数据库进行操作。
DAO 类通常包含用于插入、更新、删除和查询数据的方法。
5. 编写业务逻辑:在服务层编写业务逻辑代码,调用 DAO 类进行数据库操作。
6. 测试:编写测试代码,对业务逻辑进行测试。
7. 部署和运行:将项目部署到服务器上,并运行应用程序。
需要注意的是,在使用 Hibernate 进行项目开发时,需要遵循一些最佳实践,如延迟加载、缓存优化等,以提高系统的性能和可维护性。
以上是使用 Hibernate 进行项目开发的一般步骤,具体的步骤和实现方式可能因项目的需求和架构而有所不同。
Hibernate教程
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。
然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。
这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。
在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。
本文的目的是演示一下Hibernate的安装过程以及最基本的功能,从而给初学者一个低得不能再低的入门门槛。
下载文件你需要Java SDK、Hibernate包、Ant包、和JDBC Driver。
1、Hibernate包下载地址:/hibernate/?sort_by=date&sort=desc2、Ant包下载地址:/ant/binaries/apache-ant-1.6.1-bin.zip3、JDBC Driver要根据你用的database来定,一般database官方网站上都会有。
Hibernate 支持常用的database,比如MySQL, Oracle, PostgreSQL, 和MS-SQL Server。
这些数据库都有JDBC Driver:Oracle JDBC Driver下载地址(下载前必须同意Oracle协议书)/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.h tmlMySQL JDBC Driver下载地址/downloads/connector/j/3.0.htmlPostgreSQL JDBC Driver下载地址/download.htmlMS-SQL Server JDBC Driver下载地址/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05 bf71&displaylang=en4、将Hibernate包和Ant包分别解压至c:\dev\下(此目录不重要,你可以换其它任何目录)。
hibernate注解简介
@Entity
@Table(name="T_MODEL_PLANE")
public class ModelPlane {
private Long id;
private String name;
@Id
@Column(name="PLANE_ID")
传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载。创建这些映射有很多方法,可以从已有数据库模式或Java类模型中自动创建,也可以手工创建。无论如何,您最终将获得大量的 Hibernate 映射文件。此外,还可以使用工具,通过javadoc样式的注释生成映射文件,尽管这样会给您的构建过程增加一个步骤。
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.1.ga</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
经典heibernate教程,从入门到精通
• 什么是ORM?
ORM(对象-关系映射): ORM(对象-关系映射): 完成对象数据到关系型数据映射的 完成对象数据到关系型数据映射的 机制称为对象-关系映射,简称 机制称为对象-关系映射,简称 ORM。 ORM。 映射信息 映射信息
类: User 属性 name sex pw 表: TBL_User 字段 user_name user_sex user_pw
使用Hibernate实现:
配置Hibernate关联自动加载区县对应的街道 配置Hibernate关联并实现:
1、增加一个公司:“CSTP” 2、增加CSTP下属的三个部门 3、删除“教学” 4、划“财务”到红旗渠 5、删除红旗渠
– 配置Hibernate多对多关联,实现某OA系统项 目和人员对照关系的管理
1configuration7关闭session2创建sessionfactory6提交事务54开始一个事务3打开session持久化操作saveupdatedeletefind创建和销毁都相当耗费创建和销毁都相当耗费资源通常一个系统内资源通常一个系统内一个数据库只创建一个一个数据库只创建一个类似于jdbc中的类似于jdbc中的connectionconnectionconfigurationconfiguration创建hibernatecfgxmlhibernatecfgxmlfwxxcfgxmluserhbmfwxxcfgxmluserhbmxml开始transactiontransactionsessionfactorysessionfactory创建sessionsession执行复杂的查询操作稍后介绍复杂的查询操作稍后介绍savedeleteupdategettxcommitsessionclose结束结束sessionsessionsfopensession
Hibernate学习总结
一.对象语言和操作数据库不匹配:模型不匹配(阻抗不匹配)①.可以使用JDBC手动转换;sql参数和jdbc中用对象赋值②.使用ORM(Object Relation Mapping对象关系映射)框架:hibernate 二.Hibernate安装配置①.配置文件Hibernate.cfg.xml和Hibernate.properties②.映射文件xxx.hbm.xml:对象模型和关系模型的映射三.开发流程1.由Domain Object -> mapping -> db2.有DB开始,用工具生成mapping和Domain Object3.由配置文件开始四.Domain Object限制1.默认的构造方法(必须的)2.有无意义的标示符id(主键) 可选3.非final的,对懒加载有影响可选Configuration SessionFactory Session Transaction Query CriteriaConfiguration类Configuration类负责配置并启动Hibernate,创建SessionFactory对象。
在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory 对象。
SessionFactory接口SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,并负责创建Session对象。
这里用到了工厂模式。
需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Session接口Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。
hibernate 生成数据库表的原理
hibernate 生成数据库表的原理Hibernate是一个Java持久化框架,它提供了一种方便的方式来映射Java对象到关系数据库中的表结构。
当使用Hibernate时,它可以根据预定义的映射文件或注解配置自动创建、更新和管理数据库表。
Hibernate生成数据库表的原理如下:1. 对象关系映射(Object-Relational Mapping,ORM):Hibernate使用ORM技术将Java类和关系数据库表之间建立起映射关系。
通过在实体类中定义注解或XML映射文件,Hibernate可以知道哪个Java类对应哪个数据库表以及类中的属性与表中的列之间的映射关系。
2. 元数据分析:当应用程序启动时,Hibernate会对实体类进行元数据分析。
它会扫描实体类中的注解或XML映射文件,获取实体类的名称、属性名、属性类型等信息,并根据这些信息生成相应的元数据。
3. 数据库模式生成:根据元数据,Hibernate可以自动生成数据库表的DDL语句。
它会根据实体类的名称创建表名,根据属性名创建列名,并根据属性类型确定列的数据类型、长度、约束等。
生成的DDL语句可以包括创建表、添加索引、外键约束等操作。
4. 数据库表管理:Hibernate可以根据生成的DDL语句来创建数据库表。
在应用程序启动时,Hibernate会检查数据库中是否已存在相应的表,如果不存在则创建表;如果已存在但结构与元数据不匹配,则根据需要进行表结构的更新或修改。
总的来说,Hibernate生成数据库表的原理是通过分析实体类的元数据,自动生成对应的DDL语句,并根据需要创建、更新和管理数据库表。
这种自动化的方式大大简化了开发人员的工作,提高了开发效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
搞了两天Hibernate,终于能够顺利地把流程跑下来了……主要流程如下(以tomcat为例,项目主目录为myweb):1、安装Hibernate。
网上讲得够多了,就不再重复了。
2、配置XML文件。
把log4j.properties、hibernate.cfg.xml(也可以用hibernate.properties,这两个文件同时存在的时.cfg.xml会覆盖.properties)拷到myweb/WEB-INF/classes(所有的XML文件都放在这里)。
3、修改hibernate.cfg.xml,配置connection.datasource和dialect,例如:<property name="connection.datasource">java:comp/env/link</property><property name="show_sql">true</property><property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>关于dialect是什么,参见Hibernate参考手册。
MySQL就用MySQLDialect就行了。
然后把这边放着,不要忘了顺便把Tomcat里面的DataSource配置好.4、我的习惯是先把数据库建立起来,然后生成.hbm.xml和java类。
所以建立数据库吧!暂称为mydb,下设两张表:t1,t2。
注意,强烈建议要设立id字段(也就是主键),否则后面生成的时候.hbm.xml会有点“与众不同”……5、用Middlegen生成.hbm.xml。
hibernate-middlegen的下载地址:/project/showfiles.php?group_id=40712&package_i d=84728注意:不要用ddl2hbm,我在这上面花了一天时间都没能把.hbm.xml建立起来,慢慢推进,不同的报错,都快疯了……最后一个错误是:“建议使用class2hbm”……昏……后来才知道,ddl2hbm基本上被废弃了,已经不提供技术支持了。
用Middlegen是个不错的方法。
Middlegen的设置也不复杂:主要要配置两个文件。
一个是要使用的数据库配置XML,位于middlegen\config\database,文件名为{数据库}.xml,例如MySQL的配置文件就是MySQL.XML,打开后很明了,很容易修改的。
附上我的MySQL.需要修改的项标红了(注意把数据库驱动mysql-connector-java-3.1.8-bin.jar拷到相应的目录):<property name="database.script.file"value="${src.dir}/sql/${name}-m ysql.sql"/><property name="database.driver.file"value="${lib.dir}/mysql-connect or-java-3.1.8-bin.jar"/><property name="database.driver.classpath"value="${database.driver.file}" /><property name="database.driver"value="com.mysql.jdbc.Driver"/><property name="database.url"value="jdbc:mysql://localhost/l ink"/><property name="erid"value="root"/><property name="database.password"value=""/><property name="database.schema"value=""/><property name="database.catalog"value=""/><property name="jboss.datasource.mapping"value="mySQL"/>另一个是Middlegen主目录下的build.xml。
修改的主要是:(1)第24行左右的数据库连接,将默认的改为mysql.xml:<!ENTITY database SYSTEM"file:./config/database/mysql.xml">(2)第33行左右的name。
这里的name基本上就是将来要连接的表对应类文件所属类的上两级。
例如表对应类的包为myweb.elements,则name就是myweb。
<property name="name"value="myweb"/>(3)第184行左右的<hibernatedestination="${build.gen-src.dir}"package="${name}.Hibernate"genXDocletTags="false"genIntergratedCompositeKeys="false"javaTypeMapper="middlegen.plugins.hibernate.HibernateJava TypeMapper"/>可以将package="${name}.Hibernate"改为"${name}.elements"(个人习惯)。
这个package就是所有表对应类所在的package。
也可以改为绝对值,如myweb.elements。
至于genXDocletTags,在设置为true的情况下,xml文件带上了XDoclet的标签,可以用XDoclet生成对应类。
我们下面使用的是Hibernate自带的hbm2java,所以不必要。
但是设为true也没有关系。
其余可以不修改。
然后在Middlegen主目录下运行ant就行了(没有的话去/下一个就行了,版本要在1.5以上)。
一切顺利地话就会出现Middlegen的GUI了。
操作很一目了然,还可以设置one-to-many之类的映射关系。
比ddl2hbm好得多。
完成后按左上角的“Generate”就行了。
生成文件在使用默认设置时会放在middlegen\build\gen-src下面。
打开检查一下没有问题就可以继续了。
6、把XML映射文件都拷到myweb/WEB-INF/classes。
修改hibernate.cfg.xml,加入XML映射文件的映射。
直接加在<!--Mapping files-->的下面即可,最终hibernate.cfg.xml为:<?xml version='1.0'encoding='utf-8'?><!DOCTYPE hibernate-configurationPUBLIC"-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-2.0.dtd "><hibernate-configuration><session-factory><!--database--><property name="connection.datasource">java:comp/env/link</property><property name="show_sql">true</property><property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property><!--Mapping files--><mapping resource="t1.hbm.xml"/><mapping resource="t2.hbm.xml"/></session-factory></hibernate-configuration>7、使用hbm2java生成对应类文件。
首先要配置好setenv.bat。
特别注意设置类路径的时候,目前hibernate的版本和这个tools发布时版本不一样,很多类文件名都已经改了,注意比对一下,修改过来。
然后把HIBERNATE_HOME、HIBERNATETOOLS_HOME、JDBC_DRIVER、CORELIB、LIB设置好就可以了。
除了以上5个路径和类路径以外的都可以删掉。
试着在命令行模式下运行一下hbm2java,如果报告Nothing to do,就一切正常了。
然后,把生成的XML映射文件都拷到hibernate\tools\bin下。
运行:hbm2java*.hbm.xmlhbm2java生成完成以后,可以在generated目录下找到按目录存放好的类源文件,目录是每个.hbm.xml文件中<CLASS>中的类名规定的。
最后将文件拷到相应目录。
8、写个测试类测试一下是否正常,正常的话就一切完成了。
如果在配置文件中有什么问题,建议查看HIbernate参考手册,虽然不是很全面,但是应该也很有些帮助。