搜档网
当前位置:搜档网 › Hibernate实现(注解方式)

Hibernate实现(注解方式)

Hibernate实现(注解方式)
Hibernate实现(注解方式)

Hibernate实现(注解方式)

注解方式:

注解的方式与xml很很多类似:

首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar

ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar

下面是不同的地方:

(1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:

即把:

改为:

(2):获取SessionFactory方式发生了变化:

即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()

改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory()

(3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。

注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。

(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。

(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。

(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))

(5):表名称可以在实体类前进行注解。

(6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。

---------------------------------------------------------------------------------------------------------------------

@Entity // 表示为实体类

@Table(name="t_teacher") // 表名注解

publicclass Teacher implements Serializable {

privateint id;

private String username;

privateint age;

@Id// 表示主键

@GenericGenerator(name = "generator", strategy = "increment") @GeneratedValue(generator = "generator") // 自增长@Column(name = "id") // 类属性对应着表字段

publicint getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

@Column(name="t_username") // 类属性对应着表字段

public String getUsername() {

return username;

}

publicvoid setUsername(String username) {

https://www.sodocs.net/doc/7f18287254.html,ername = username;

}

@Column(name="t_age") // 在实体类属性进行注解,类属性对应着表字段publicint getAge() {

return age;

}

publicvoid setAge(int age) {

this.age = age;

}

Spring+hibernate

课程内容 1.面向接口(抽象)编程的概念与好处 2.IOC/DI的概念与好处 a)inversion of control b)dependency injection 3.AOP的概念与好处 4.Spring简介 5.Spring应用IOC/DI(重要) a)xml b)annotation 6.Spring应用AOP(重要) a)xml b)annotation 7.Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要) a)opensessionInviewfilter(记住,解决什么问题,怎么解决) 8.Spring JDBC 面向接口编程(面向抽象编程) 1.场景:用户添加 2.Spring_0100_AbstractOrientedProgramming a)不是AOP:Aspect Oriented Programming 3.好处:灵活 什么是IOC(DI),有什么好处Dependecy Injection (依赖注入)依赖UserDAO a)IOC (inversion of control)控制反转,交给容器来控制 1.把自己new的东西改为由容器提供 a)初始化具体值 b)装配 2.好处:灵活装配 Spring简介 1.项目名称:Spring_0200_IOC_Introduction

2.环境搭建 a)只用IOC i.spring.jar , jarkata-commons/commons-loggin.jar 3.IOC容器 a)实例化具体bean b)动态装配 4.AOP支持 a)安全检查 b)管理transaction Spring IOC配置与应用 1.FAQ:不给提示: a)window – preferences – myeclipse – xml – xml catalog b)User Specified Entries – add i.Location: D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\sprin g-beans-2.5.xsd ii.URI: file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resource s/spring-beans-2.5.xsd iii.Key Type: Schema Location iv.Key: https://www.sodocs.net/doc/7f18287254.html,/schema/beans/spring-beans-2.5.xsd 2.注入类型 a)Spring_0300_IOC_Injection_Type b)setter(重要) c)构造方法(可以忘记) d)接口注入(可以忘记) 3.id vs. name a)Spring_0400_IOC_Id_Name b)name可以用特殊字符 4.简单属性的注入 a)Spring_0500_IOC_SimpleProperty b) 5.

spring4.x + hibernate4.x 配置详解

spring4.x + hibernate4.x 配置详解 关于spring和hibernate的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜索一下即可。 本篇博文的内容主要是我最近整理的关于spring4.x 和hibernate 4.x 相关配置和使用方式,当然spring3.x以及hibernate4.x也可以借鉴。 首先是配置文件web.xml 增加以下代码即可 contextConfigLocation classpath*:/applicationContext.xml org.springframework.web.context.ContextLoaderListener 然后建立 applicationContext.xml 文件,src下。文件内容如下,注释我尽量写的很详细 org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:///hibernatedemo root yzp140103 这样就配置好了。 接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下: package com.joe.entity; import java.io.Serializable;

springmvc框架搭建之xml配置说明(spring4+hibernate4)

SpringMVC框架搭建说明 Spring4.1.4 + hibernate4.3.8 1、web.xml配置 程序运行时从web.xml开始,加载顺序为:context-param -> listener -> filter ->structs (如果使用structs的话)-> servlet 如下为web.xml的配置说明 bmymis2 contextConfigLocation classpath:applicationContext-*.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true springServlet org.springframework.web.servlet.DispatcherServlet

马士兵hibernate文档 (个人完善版)

3. hibernate.hbm2ddl.auto : 在SessionFactory 创建时,自动检查数据库结构,或者将数据库schema 的DDL 导出到数据库。使用create-drop 时,在显式关闭SessionFactory 时,将删除掉数据库schema。 例如:validate | update | create | create-drop create :如果没有表就创建 update :如果表结构更新,就更新 validate :每次插入表的时候看看表结构有没有更新。 理论上是先建类后建表:这个时候只要你的类建好了,可以跨数据库。 实际中先建表比先建类多,建好表以后要对数据库进行优化,比如建索引,建试图,各种各样的优化。 project\etc目录下面有很多示例性的文档,log4j的文档就在那个下面。 SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); SessionFactory的建立是很耗费时间的,应该像连接池一样,只建立一次,以后要用就直接从那用。 Hibernate文档建议我们自己写一个辅助类,用单例来做。 JUnit的一个bug: @BeforeClass public static void beforeClass() { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } 在这句话的时候 配置文件如果有的时候写错了,她悄悄把错误隐藏起来了。 解决的方法:可以对这句话加try catch块 8.表名和类名不一致的时候: @Entity @Table(name="_teacher")

hibernate学习笔记

第一次课: 持久化:就是把瞬时状态的数据转变为持久化状态的数据,这一个过程就是持久化。 (java中内存分为:栈(变量,方法,形参都是在栈上),堆(new出来的对象在堆上)) 1)瞬时状态:刚new出来,在内存中存在的对象就是瞬时状态的。如果程序结束,对象就会被回收。 2)持久化状态:在磁盘或者是数据库中存在的数据就是持久状态。 Hibernate是什么? 1)是一个优秀的持久化框架,对jdbc进行进一步的封装。(hibernate,ibatis )。 2)是一个ORM (Object relation mapping ). Mysql,oracle,access 是关系型数据库 = hibernate操作的是对象。 使用hibernate的步骤:1)新建项目 2)引入jar包(hibernate最少依赖8个jar包) 3)新建 hibernate配置文件(hibernate.cfg.xml) ,放在src根目录下面。 用于数据库的配置信息。 com.mysql.jdbc.Driver root abc jdbc:mysql:///fwcz org.hibernate.dialect.MySQLDialect create 4)写bean/vo类,并且编写映射文件。

hibernate_annotation

Hibernate Annotation 使用hibernate Annotation来映射实体 准备工作 下载 hibernate-distribution-3.3.2.GA hibernate-annotations-3.4.0.GA slf4j 导入相关依赖包 Hibernate HOME: \hibernate3.jar \lib\bytecode(二进制) \lib\optional(可选的) \lib\required(必须的) 导入required下的所有jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar log4j-1.2.14.jar mysql.jar ---Annotation包 ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar

简单的例子,通过annotation注解来映射实体PO 1、建立(Java Project)项目:hibernate_0100_annotation_HelloWorld_default 2、在项目根下建立lib目录 a)导入相关依赖jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar log4j-1.2.14.jar mysql.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar 3、建立PO持久化类cn.serup.model.Teacher 内容如下 package cn.serup.model; import javax.persistence.Entity; import javax.persistence.Id; //@Entity表示该是实体类 @Entity public class Teacher { private int id ; private String username ; private String password ; //ID为主键,主键手动分配 @Id public int getId() { return id; } public void setId(int id) { this.id = id;

中文版hibernate-annotations-3.4.0.CR1-doc

Hibernate Annotations 参考文档 3.2.0 CR1 目录 前言 1. 翻译说明 2. 版权声明 前言 1. 创建一个注解项目 1.1. 系统需求 1.2. 系统配置 2. 实体Bean 2.1. 简介 2.2. 用EJB3注解进行映射 2.2.1. 声明实体bean 2.2.1.1. 定义表(Table) 2.2.1.2. 乐观锁定版本控制 2.2.2. 映射简单属性 2.2.2.1. 声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2. 3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4. 3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5. 3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4. 3. 属性

2.4. 3.1. 访问类型 2.4. 3.2. 公式 2.4. 3.3. 类型 2.4. 3. 4. 索引 2.4. 3.5. @Parent 2.4. 3.6. 生成的属性 2.4.4. 继承 2.4.5. 关于单个关联关系的注解 2.4.5.1. 延迟选项和获取模式 2.4.6. 关于集合类型的注解 2.4.6.1. 参数注解 2.4.6.2. 更多的集合类型 2.4.7. 缓存 2.4.8. 过滤器 2.4.9. 查询 3. 通过XML覆写元数据 3.1. 原则 3.1.1. 全局级别的元数据 3.1.2. 实体级别的元数据 3.1.3. 属性级别的元数据 3.1. 4. 关联级别的元数据 4. Hibernate验证器 4.1. 约束 4.1.1. 什么是约束? 4.1.2. 内建约束 4.1.3. 错误信息 4.1.4. 编写你自己的约束 4.1. 5. 注解你的领域模型 4.2. 使用验证器框架 4.2.1. 数据库schema层次验证 4.2.2. Hibernate基于事件的验证 4.2.3. 程序级验证 4.2.4. 验证信息 5. Hibernate与Lucene集成 5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引 A. 术语表 前言 WARNING! This is a translated version of the English Hibernate reference documentation. The translated version might not be up to date! However, the differences should only be very minor. Consult the English reference documentation if you are missing information or encounter a translation error. If you like to contribute to a particular translation, contact us on the Hibernate developer mailing list. Translator(s): RedSaga Translate Team 满江红翻译团队 1. 翻译说明

hibernate关联注解

说明: 本文对hibernate的一对多、多对一、多对多的关联 示例代码是Order类和OrderItem类的一对多的关系 1.一对多 1.1注解方式: @OneToMany 代码示例如下: 双向关联,维护端在“多”的一端 Public class Order implements Serializable { Private Set orderItems = new HashSet(); @OneToMany(mappedBy="order"(有了mappedby不能也不该在此再定义@joincolumn),cascade = CascadeType.ALL, fetch = https://www.sodocs.net/doc/7f18287254.html,ZY) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 单向关联,维护端在此端 Public class Order implements Serializable { private Set orderItems = new HashSet(); @OneToMany(cascade = CascadeType.ALL, fetch = https://www.sodocs.net/doc/7f18287254.html,ZY) @JoinColumn(name=”order_id”) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 1.2维护端和级联问题 维护端的意思是对外键进行维护,维护端有对外键进行插入和更新的权利。 下面分情况介绍hibernate的级联操作: 1.2.1单向关联 对“一”表进行插入一条记录的操作: 1)级联类型:CascadeType.ALL 执行语句: 1.insert into category (description, name, id) values(?, ?, ?)

注解整理笔记

注解整理笔记 @是java中的注解。 JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 1@SuppressWarnings("serial") 实体类注解例子 2@Entity 3@Table(name = "T_BASE_ROLE") 5@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = CacheConstants.HIBERNATE_CACHE_BASE) //jackson标记不生成json对象的属性 4@JsonIgnoreProperties (value = { "hibernateLazyInitializer" , "handler","fieldHandler" ,"resources","users"}) public class Role extends BaseEntity implements Serializable { 6@Id 7@GeneratedV alue(strategy = GenerationType.AUTO) 8@Column(name = "ID") public Long getId() { return id;} @Excel(exportName="记录创建者", exportFieldWidth = 30) protected String createUser; 9@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00") @Column(name = "CREATE_TIME", updatable = false) 10@Temporal(TemporalType.TIMESTAMP) public Date getCreateTime() { return createTime;} 11@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = https://www.sodocs.net/doc/7f18287254.html,ZY) 12@JoinTable(name = "T_BASE_ROLE_RESOURCE", joinColumns = { @JoinColumn(name = "ROLE_ID") }, inverseJoinColumns = { @JoinColumn(name = "RESOURCE_ID") }) 13@OrderBy("id") public List getResources() { return resources;} 14@Transient @SuppressWarnings("unchecked") public List getResourceIds() { if (!Collections3.isEmpty(resources)) { resourceIds = ConvertUtils. convertElementPropertyToList(resources, "id"); } return resourceIds;}

Struts2+Spring+Hibernate的工作流程及原理(整理的)

Struts2框架 一、简介 Struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action 的MVC Web框架。它基于当年的WebWork和XWork框架,继承其优点,同时做了相当的改进。 1、Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可 以很好的掌控开发的过程。 2、使用OGNL进行参数传递。OGNL提供了在Struts2里访问各种作用域的 数据的简单方式,你可以方便的获取Request、Attribute、Application、 Session、Parameters中的数据。大大简化了开发人员在获取这些数据是的 代码量。 3、强大的拦截器。Struts2的拦截器是一个Action级别的AOP,Struts2中的 许多特性都是通过拦截器来实现的,例如异常处理、文件上传、验证等。 拦截器是可配置与重用的,可以将一些通用的功能如:登录验证、权限 验证等置于拦截器中以完成了系统中的权限验证功能。 4、易于测试。Struts2的Action都是简单的POJO,这样可以方便的对Struts2 的Action编写测试用例,大大方便了Java Web项目的测试。 5、易于扩展的插件机制。在Struts2添加扩展是一件愉快而轻松的事情,只 需要将所需要的Jar包放到WEB-INF/lib文件中,在Struts.xml中做一些 简单的设置就可以实现扩展。 6、模块化管理。Struts2已经把模块化作为了体系架构中的基本思想,可以 通过三种方法来将应用程序模块化:将配置信息拆分成多个文件把自包 含的应用模块创建为插件创建的框架特性,即将于特定应用无关的新功 能组织成插件,以添加到多个应用中去。 7、全局结果与声明式异常。为应用程序添加全局的Result,和在配置文件中 对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定 页面。 二、Struts2的工作机制 在Struts2框架中的处理大概分为: 1、客户端初始化一个指向Servlet容器(如Tomcat)的请求; 2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框 架的集成很有帮组,例如:SiteMeshPlugin); 3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定 这个请求是否需要调用某个Action; 4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的 处理交给ActionProxy; 5、ActionProcy通过Configuration Manager询问框架的配置文件,找到需要 调用的Action类; 6、ActionProxy创建一个ActionInvocation实例。 7、ActionInvocation实例使用命令模式来调用,在调用Action的过程前后,

Struts+Spring+Hibernate框架搭建

整合SSH框架 整合框架版本:hibernate-distribution-3.6.0.Final-dist + spring-framework-2.5.6.SEC01-with-dependencies + struts-2.1.8.1 一、搭建工具 Windows 、Tomcat 6.0+ 、MyEclipse、SQLServer2008 R2 、Google 二、创建工程 新建WEB项目工程(MyEclipse),包含web.xml配置文件。 三、添加框架环境Junit4 右击新建的项目,选择Build Path —> Add Library —> Junit —> 选择Junit4 —> 确定完成单元测试的添加。 四、添加框架环境Struts2 1.解压struts- 2.1.8.1 ,如下图所示: 可在apps文件里,随机选择一个.war文件解压,到WEB-INF→lib下的基础jar文件:

复制黏贴添加到项目工程的lib下。也可将lib下的全部jar(71个)都复制到项目中来,不过很多用不到。我们崇尚即用即加的原则…… 2. 配置struts.xml和web.xml文件,如下: web.xml: ItcastOA struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndE xecuteFilter struts2 /* index.html index.htm index.jsp default.html default.htm default.jsp struts.xml:

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

相关主题