- 浏览: 831144 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (363)
- 2010年3月 (3)
- 2010年4月 (3)
- Java (116)
- ExtJs (22)
- EJB3.0 (11)
- JQuery (28)
- SqlServer (5)
- Oracle (17)
- hibernate (21)
- struts2 (14)
- php (10)
- JavaScript (11)
- jbpm (6)
- spring (24)
- lucene (2)
- ibatis (7)
- C# (8)
- mysql (11)
- json (3)
- webservice (3)
- 设计模式 (1)
- jdbc (1)
- servlet (2)
- ice (6)
- 日常软件问题 (2)
- 生活 (2)
- iphone (1)
- rest (3)
- ruby (2)
- linux (13)
- quartz (1)
- poi (1)
- redis (13)
- memcached (4)
- nosql (2)
- tomcat调优 (1)
- 项目管理 (0)
最新评论
-
天使建站:
jquery里和数组相关的操作 附带具体的实例 ...
jquery对象数组 -
Cy0941:
$('#formId').form('submit',...) ...
easyui的form表单提交处理 -
shmily2038:
swifth 写道楼主,,你的命令写错啦,,[root@ser ...
centos直接yum安装nginx -
swifth:
楼主,,你的命令写错啦,,[root@server ~]# y ...
centos直接yum安装nginx -
随遇而安DXX:
...
REST
<!--[if !supportLists]-->1. <!--[endif]-->JDK1.5的Annotation特性
在涉及Hibernate Annotation前,不得不说一下JDK1.5版本提供的Annotation特性,因为他才是Hibernate Annotation的基础。其实说起注解语法,对于任何一个Java开发人员来说都已经耳熟能详了,我们每天都在使用着 @author, @param,等等编写注释,然后用javadoc生成文档。Java的这种方便的文档生成方法受到了开发者的普遍赞誉。JDK默认有3个annotation类型(都在java.lang包下):
(1)@Override: 该方法是重写方法(只能用在方法上)
(2)@Deprecated: 不建议使用(过时)的东西
(3)@SuppressWarnings: 暂时把警告信息去掉
前2个没什么好说的,@SuppressWarnings需要一个参数,
如 @SuppressWarnings(value="unchecked") ,"value="可以省略
参数大致有以下这些:
deprecation 使用了过时的类或方法时的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型
fallthrough 当Switch 程序块直接通往下一种情况而没有 Break 时的警告
path 在类路径、源文件路径等中有不存在的路径时的警告
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告
finally 任何 finally 子句不能正常完成时的警告
all 关于以上所有情况的警告
<!--[if !supportLists]-->2. <!--[endif]-->Hibernate的配置策略
Hibernate传统的配置方法是编写hibernate.cfg.xml文件和具体的bean实例的bean.hbm.xml配置文件,并且把该文件在hibernate.cfg.xml文件中作映射来实现的。我们要来维护这两个文件,如果POJO的实体类数量越多,那么我们需要维护的配置文件也就越多。Hibernate Annotation的出现树的我们只维护hibernate.cfg.xml成为可能。在这种新的策略下我们可以利用注释在POJO类中进行属性与数据库表的映射,并且在hibernate.cfg.xml中直接对bean类所在类路径进行映射即可。
<!--[if !supportLists]-->3. <!--[endif]-->Hibernate Annotation语法
@Entity --声明为一个实体bean
@Table(name="promotion_info") --为实体bean映射指定表(表名="promotion_info)
@Id --声明了该实体bean的标识属性
@GeneratedValue --可以定义标识字段的生成策略.
@Column(name="promotion_remark") --声明列(字段名="promotion_total") 属性还包括(length=200等)
@base(fetch=FrtchType.LAZY) --延迟获取,在创建实体bean时不会即时将这个属性从数据库中 读出,只有在实体bean这个属性第一次调用时获取相应值。当然默认的fetch属性是时将这个属性从数据库中读出的。
在对一个类进行注解时,可以选择对它的属性或者方法进行注解,根据选择,Hebernate的访问类型分别为field或者property.如果访问类型为property就要在getter()上注解,类型为field就在字段上进行注解声明。
具体应用实例:
package bean;
import javax.persistence.*;
@Entity
@Table(name="customer")
public class Customer {
@Id //声明了该实体bean的标识属性
//Hibernate 根据数据库给出一个合适的主键生成策略.
//AUTO--可以是identity类型的字段,或者sequence类型或者table类型,取决于不同的底层数据库
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="name") //将属性映射到列
private String cName;
@Column(name="age")
private int age;
@Column(name="email")
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return cName;
}
public void setName(String cName) {
this.cName = cName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
<!--[if !supportLists]-->4. <!--[endif]-->数据库表结构
id
name
age
email
1
benson
21
peng@sina.com
2
laura
22
lla@163.com
<!--[if !supportLists]-->5. <!--[endif]-->hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/book</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">MySql_hibernate</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 以下设置对象与数据库表格映像类别 -->
<mapping class="bean.Customer"/>
</session-factory>
</hibernate-configuration>
注意一下: <mapping class="bean.Customer"/>我们不再使用传统方式在该文件中映射bean.hbm.xml文件,而是直接映射bean的类文件。
<!--[if !supportLists]-->6.<!--[endif]-->JAVA文件
HibernateSessionFactory
package dao;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
//这里使用 AnnotationConfiguration 这也是与传统方式的区别
private static Configuration configuration = new AnnotationConfiguration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
//configuration.configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
public static synchronized Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
public static synchronized org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
public static Configuration getConfiguration() {
return configuration;
}
}
TestAnnotation
package main;
public class TestAnnotation {
/**
* @param args
*/
public static void main(String[] args) {
// 将持久化的物件
Customer user = new Customer();
user.setName("wangpeng55");
user.setAge(29);
user.setEmail("wang55@sohu.cn");
// 开启Session,相当于开启JDBC的Connection
Session session = HibernateSessionFactory.getSession();
// Transaction表示一组会话操作
Transaction tx= session.beginTransaction();
// 将对象映像至数据库表格中储存
session.save(user);
tx.commit();
HibernateSessionFactory.closeSession();
HibernateSessionFactory.getSessionFactory().close();
System.out.println("success!");
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pengpeng2395/archive/2008/09/02/2866801.aspx
在涉及Hibernate Annotation前,不得不说一下JDK1.5版本提供的Annotation特性,因为他才是Hibernate Annotation的基础。其实说起注解语法,对于任何一个Java开发人员来说都已经耳熟能详了,我们每天都在使用着 @author, @param,等等编写注释,然后用javadoc生成文档。Java的这种方便的文档生成方法受到了开发者的普遍赞誉。JDK默认有3个annotation类型(都在java.lang包下):
(1)@Override: 该方法是重写方法(只能用在方法上)
(2)@Deprecated: 不建议使用(过时)的东西
(3)@SuppressWarnings: 暂时把警告信息去掉
前2个没什么好说的,@SuppressWarnings需要一个参数,
如 @SuppressWarnings(value="unchecked") ,"value="可以省略
参数大致有以下这些:
deprecation 使用了过时的类或方法时的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型
fallthrough 当Switch 程序块直接通往下一种情况而没有 Break 时的警告
path 在类路径、源文件路径等中有不存在的路径时的警告
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告
finally 任何 finally 子句不能正常完成时的警告
all 关于以上所有情况的警告
<!--[if !supportLists]-->2. <!--[endif]-->Hibernate的配置策略
Hibernate传统的配置方法是编写hibernate.cfg.xml文件和具体的bean实例的bean.hbm.xml配置文件,并且把该文件在hibernate.cfg.xml文件中作映射来实现的。我们要来维护这两个文件,如果POJO的实体类数量越多,那么我们需要维护的配置文件也就越多。Hibernate Annotation的出现树的我们只维护hibernate.cfg.xml成为可能。在这种新的策略下我们可以利用注释在POJO类中进行属性与数据库表的映射,并且在hibernate.cfg.xml中直接对bean类所在类路径进行映射即可。
<!--[if !supportLists]-->3. <!--[endif]-->Hibernate Annotation语法
@Entity --声明为一个实体bean
@Table(name="promotion_info") --为实体bean映射指定表(表名="promotion_info)
@Id --声明了该实体bean的标识属性
@GeneratedValue --可以定义标识字段的生成策略.
@Column(name="promotion_remark") --声明列(字段名="promotion_total") 属性还包括(length=200等)
@base(fetch=FrtchType.LAZY) --延迟获取,在创建实体bean时不会即时将这个属性从数据库中 读出,只有在实体bean这个属性第一次调用时获取相应值。当然默认的fetch属性是时将这个属性从数据库中读出的。
在对一个类进行注解时,可以选择对它的属性或者方法进行注解,根据选择,Hebernate的访问类型分别为field或者property.如果访问类型为property就要在getter()上注解,类型为field就在字段上进行注解声明。
具体应用实例:
package bean;
import javax.persistence.*;
@Entity
@Table(name="customer")
public class Customer {
@Id //声明了该实体bean的标识属性
//Hibernate 根据数据库给出一个合适的主键生成策略.
//AUTO--可以是identity类型的字段,或者sequence类型或者table类型,取决于不同的底层数据库
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="name") //将属性映射到列
private String cName;
@Column(name="age")
private int age;
@Column(name="email")
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return cName;
}
public void setName(String cName) {
this.cName = cName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
<!--[if !supportLists]-->4. <!--[endif]-->数据库表结构
id
name
age
1
benson
21
peng@sina.com
2
laura
22
lla@163.com
<!--[if !supportLists]-->5. <!--[endif]-->hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/book</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">MySql_hibernate</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 以下设置对象与数据库表格映像类别 -->
<mapping class="bean.Customer"/>
</session-factory>
</hibernate-configuration>
注意一下: <mapping class="bean.Customer"/>我们不再使用传统方式在该文件中映射bean.hbm.xml文件,而是直接映射bean的类文件。
<!--[if !supportLists]-->6.<!--[endif]-->JAVA文件
HibernateSessionFactory
package dao;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
//这里使用 AnnotationConfiguration 这也是与传统方式的区别
private static Configuration configuration = new AnnotationConfiguration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
//configuration.configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
public static synchronized Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
public static synchronized org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
public static Configuration getConfiguration() {
return configuration;
}
}
TestAnnotation
package main;
public class TestAnnotation {
/**
* @param args
*/
public static void main(String[] args) {
// 将持久化的物件
Customer user = new Customer();
user.setName("wangpeng55");
user.setAge(29);
user.setEmail("wang55@sohu.cn");
// 开启Session,相当于开启JDBC的Connection
Session session = HibernateSessionFactory.getSession();
// Transaction表示一组会话操作
Transaction tx= session.beginTransaction();
// 将对象映像至数据库表格中储存
session.save(user);
tx.commit();
HibernateSessionFactory.closeSession();
HibernateSessionFactory.getSessionFactory().close();
System.out.println("success!");
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pengpeng2395/archive/2008/09/02/2866801.aspx
发表评论
-
hibernate是否只需要一个commonDao?
2014-01-15 13:15 1825在开发中,经常遇到一个项目只有一个dao(即 ... -
hibernate缓存介绍
2013-02-28 10:12 1059Hibernate 中提供了两级Cache,第一级别的缓存 ... -
hibernate主键生成策略介绍
2013-02-28 10:10 1077Assigned Assigned方式由程序生成主键 ... -
Spring2.5.6+Struts2.1.6+Hibernate3.2升级到Spring3.1.3+Struts2.3.4+Hibernate3.6Final
2012-11-02 19:50 16261. Struts2.3.4相对于Struts2. ... -
hibernate原生sql封装,报错信息:could not find setter for rownum_
2012-10-25 11:03 18404报错信息:could not find setter for ... -
Spring事务配置的五种方式
2012-10-03 22:15 1147前段时间对Spring的事务配置做了比较深入的研究,在此之间 ... -
hibernate SQLQuery实践指南
2012-07-06 17:16 1160hibernate SQLQuery实践指南 两个表(实体) ... -
json hibernate延迟加载问题
2011-08-31 11:41 1114JsonConfig jsonConfig = new Jso ... -
解决a different object with the same identifier value was already associated with
2011-08-25 09:25 2041解决a different object with the s ... -
hibernate query和Criteria分页查询的区别
2011-08-19 09:55 1872Query Q = session.createQuery(& ... -
配置Hibernate二级缓存
2011-08-15 16:04 1006Hibernate二级缓存也称为进程级的缓存或SessionF ... -
hibernate一级缓存和二级缓存的区别
2011-07-04 09:36 1083缓存是介于应用程序和 ... -
org.hibernate.PersistentObjectException: detached entity passed to persist异常
2011-01-24 09:06 1733情形:用户注册,或则使用到 sessionFactory.ge ... -
数据库方言
2010-08-26 10:57 1485RDBMS 方言 DB2 org.hibernate. ... -
Java框架的下载地址
2010-08-26 10:15 1233hibernate的下载地址: http://sourcefo ... -
hibernate的timestamp类型处理
2010-08-05 13:19 1975数据库库表某字段是timestamp类型,而要对这个字段进行时 ... -
hibernate数据类型与OR映射
2010-08-05 13:16 13511、Hibernate 基本数据类型 Hibernate基 ... -
hql时间比较
2010-08-04 16:37 2598/** * 获取现在时间 * ... -
Ibatis关于null的处理
2010-07-12 12:29 3009使用Ibatis作为数据库持久层的人都有体会,Ibatis 对 ... -
hibernate分页
2010-06-30 15:34 1121public List<Content> find ...
相关推荐
通过不断改进实例并实践,我们可以更好地理解和掌握Hibernate Annotation的精髓,实现更高效、更便捷的Java持久化编程。在后续的学习笔记中,我们将继续探索更多关于Hibernate Annotation的实用技巧和高级特性。
在这个 demo 中,我们可能会看到一个简单的数据库脚本,用于创建与 Hibernate 实体类相对应的表。数据库脚本通常包括创建表的 SQL 语句,以及可能的索引和约束定义。 在整合 Spring 和 Hibernate 时,我们需要配置 ...
《Hibernate Annotation API详解》 Hibernate是一个流行的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。在Hibernate 3.3版本中,引入了Annotation API,这是一种...
### Hibernate Annotation 中文文档知识点概览 #### 一、创建注解项目 ##### 1.1 系统需求 在创建一个使用 Hibernate 注解的项目之前,需要满足一定的系统环境需求,例如支持 Java 的开发环境、JDK 版本、支持 ...
《Hibernate Annotations中文帮助文档》是针对Java开发人员的一份详细指南,主要讲解如何使用Hibernate ORM框架中的注解来实现数据库对象的映射。该文档涵盖了从基础到高级的各种概念,帮助开发者更高效地管理和操作...
### Hibernate Annotation 帮助文档知识点总结 #### 1. 创建注解项目 - **系统需求**:在开始创建一个支持 Hibernate 注解的项目之前,需要确保满足以下系统需求: - Java 开发环境(例如 JDK 1.8 或更高版本)。...
总之,Hibernate的注解使得对象关系映射变得简单直观。在实现基于外键的一对多双向关联时,理解注解的含义和作用至关重要,同时还需要考虑性能优化和潜在的问题,确保数据的正确性和一致性。通过阅读源码和实践,...
创建一个简单的User实体类,使用Hibernate Annotation进行注解: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ...
Hibernate注解是ORM的一种实现方式,它允许开发者直接在Java类和属性上使用注解,替代传统的XML配置文件来定义对象-关系映射。这使得代码更加简洁,易于维护。 1. 主键注解:`@Id`用于标记实体类中的主键字段,通常...
通过编写简单的HelloWorld程序,引入Hibernate和Annotation,创建第一个数据库操作实例,了解基本的Session和Transaction使用。 ### 第 7 课 建立 Annotation 版本的 HelloWorld 在此阶段,将HelloWorld示例转换为...
### Struts2+Spring2+Hibernate3+Annotation所需JAR包详解 在Java Web开发领域,Struts2、Spring2和Hibernate3是三个非常重要的框架,它们分别负责Web层、业务逻辑层和服务持久化层的功能实现。为了更好地整合这三...
标题:Hibernate Annotation Reference 描述:本文件为Hibernate注解的详尽参考指南,全面解析了如何在项目中利用Hibernate框架的注解功能进行实体映射、查询定义以及数据验证等高级操作。 ### 一、设置注解项目 ...
### Hibernate Annotation注解编程知识点详解 #### 一、概述与设置环境 - **概述**:Hibernate 是一个流行的 Java 持久层框架,它提供了一种面向对象的方式来处理数据库操作。Hibernate 支持多种元数据定义方式,...
这对于开发者来说非常方便,可以快速搭建基本的代码结构,避免手动编写无实际业务逻辑的简单实现类。通过在项目的pom.xml文件中配置这个插件,开发者可以指定要生成默认实现的接口,插件会在构建过程中自动完成这个...
在这个“Hibernate的Annotation版Hello world实例”中,我们将探讨如何利用Hibernate的注解(Annotation)功能来简化实体类的配置,并实现一个基本的数据操作。 首先,Hibernate注解是自Hibernate 3.2版本开始引入...
Hibernate Annotation几种关联映射 一对一(One-To-One) ...以上是整理的一点简单的几种映射,可参考EJB3.pdf中P111——P131,hibernate_annotation.pdf 第二章 在这里没有具体的例子,有很多内容还需要仔细查看文档。
本教程将深入探讨如何在Hibernate中使用注解(Annotation)进行配置,从而避免传统的XML配置文件。通过这种方式,我们可以更直观地将数据库表与Java实体类关联起来。 首先,让我们理解什么是Hibernate注解。...
**标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...