知识大全 Hibernate Annotations 实战介绍
Posted 数据库
篇首语:无私是稀有的道德,因为从它身上是无利可图的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate Annotations 实战介绍相关的知识,希望对你有一定的参考价值。
Hibernate Annotations 实战介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
从 hbm xml 到 Annotations 下面让我们先看一个通常用 hbm xml 映射文件的例子 有 个类 HibernateUtil java 也就是 Hibernate文档中推荐的工具类 Person java Test java 测试用的类 都在test hibernate 包中 每个类的代码如下:HibernateUtil:
package test hibernate; import hibernate HibernateException; import hibernate Session; import hibernate SessionFactory; import hibernate cfg Configuration; public class HibernateUtil public static final SessionFactory sessionFactory; static try sessionFactory = new Configuration() nfigure() buildSessionFactory(); catch (HibernateException e) // TODO Auto generated catch block e printStackTrace(); throw new ExceptionInInitializerError(e); public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); public static Session currentSession() throws HibernateException Session s = session get(); if(s == null) s = sessionFactory openSession(); session set(s); return s; public static void closeSession() throws HibernateException Session s = session get(); if(s != null) s close(); session set(null);
Person:
package test hibernate; import java util LinkedList; import java util List; /** * */ @SuppressWarnings( serial ) public class Person implements java io Serializable // Fields private Integer id; private String name; private String sex; private Integer age; private List list = new LinkedList(); // Collection accessors public List getList() return list; public void setList(List list) this list = list; /** default constructor */ public Person() /** constructor with id */ public Person(Integer id) this id = id; // Property accessors public Integer getId() return this id; public void setId(Integer id) this id = id; public String getName() return this name; public void setName(String name) this name = name; public String getSex() return this sex; public void setSex(String sex) this sex = sex; public Integer getAge() return this age; public void setAge(Integer age) this age = age;
Test:
/* * Created on * @author */ package test hibernate; import java sql SQLException; import hibernate FlushMode; import hibernate HibernateException; import hibernate Session; import hibernate Transaction; public class Test public static void main(String [] args) Session s = HibernateUtil currentSession(); Transaction tx = s beginTransaction(); // Person p = (Person) s load(Person class ); // System out println(p getName()); Person p = new Person(); p setAge( ); p setName( icerain ); p setSex( male ); s save(p); s flush(); /* Person p = (Person) s get(Person class new Integer( )); System out println(p getName()); p setName( ice ); s saveOrUpdate(p ); s flush(); Person p = (Person) s get(Person class new Integer( )); System out println(p getName()); s delete(p ); */ mit(); try System out println(p getName()); catch (Exception e) // TODO Auto generated catch block e printStackTrace(); HibernateUtil closeSession();
hibernate cfg xml 配置文件如下 利用mysql 数据库
<?xml version= encoding= UTF ?>
<hibernate configuration>
<session factory>
<property name= nnection driver_class > gjt mm mysql Driver</property>
<property name= nnection password >你的数据库密码</property>
<property name= nnection url >jdbc:mysql://localhost/数据库名</property>
<property name= nnection username >用户名</property>
<property name= hibernate dialect > hibernate dialect MySQLDialect</property>
<property name= show_sql >true</property>
<property name= hibernate transaction factory_class > hibernate transaction JDBCTransactionFactory</property>
<property name= hibernate transaction auto_close_session >false</property>
<property name= hibernate hbm ddl auto >update</property>
<mapping resource= test/hibernate/annotation/Person hbm xml />
</session factory>
</hibernate configuration>
其中 配置了<property name= hibernate hbm ddl auto >update</property>属性 自动导入数据库ddl 生产的ddl sql语句如下
create table person (id integer not null auto_increment name varchar( ) sex varchar( ) age integer person integer primary key (id))
alter table person add index FKC E B C A C (person) add constraint FKC E B C A C foreign key (person) references person (id)
而Person hbm xml 文件如下:
<?xml version= ?>
<hibernate mapping>
<class name= test hibernate Person table= person >
<id name= id type= integer >
<column name= id />
<generator class= native ></generator>
</id>
<property name= name type= string >
<column name= name />
</property>
<property name= sex type= string >
<column name= sex />
</property>
<property name= age type= integer >
<column name= age />
</property>
<bag name= list cascade= all >
<key column= person ></key>
<one to many class= test hibernate Person />
</bag>
</class>
</hibernate mapping>
下面让我们看看利用 Hibernate Annotations 如何做 只要三个类 不再需要 hbm xml配置文件:
还要把用到的两个jar文件 放入的类路径中 具体如何做 请参考 Hibernate Annotations 中文文档
HibernateUtil java 也就是 Hibernate文档中推荐的工具类 Person java 一个持久化的类 Test java 测试用的类 都在test hibernate annotation 包中 每个类的代码如下:
HibernateUtil
package test hibernate annotation; import hibernate HibernateException; import hibernate Session; import hibernate SessionFactory; import hibernate cfg AnnotationConfiguration; import hibernate cfg Configuration; public class HibernateUtil public static final SessionFactory sessionFactory; static try sessionFactory = new AnnotationConfiguration() //注意: 建立 SessionFactory于前面的不同 addPackage( test hibernate annotation ) addAnnotatedClass(Person class) nfigure() buildSessionFactory(); //new Configuration(nfigure() buildSessionFactory(); catch (HibernateException e) // TODO Auto generated catch block e printStackTrace(); throw new ExceptionInInitializerError(e); public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); public static Session currentSession() throws HibernateException Session s = session get(); if(s == null) s = sessionFactory openSession(); session set(s); return s; public static void closeSession() throws HibernateException Session s = session get(); if(s != null) s close(); session set(null);
Person:
package test hibernate annotation; import java util LinkedList; import java util List; import javax persistence AccessType; import javax persistence Basic; import javax persistence Entity; import javax persistence GeneratorType; import javax persistence Id; import javax persistence OneToMany; import javax persistence Table; import javax persistence Transient; /** * */ @SuppressWarnings( serial ) @Entity(access = AccessType PROPERTY) //定义该类为实体类 @Table //映射表 public class Person implements java io Serializable // Fields private Integer id; private String name; private String sex; private Integer age; private List list = new LinkedList(); // Constructors /** default constructor */ public Person() /** constructor with id */ public Person(Integer id) this id = id; // Property accessors @Id public Integer getId() return this id; public void setId(Integer id) this id = id; @Basic public String getName() return this name; public void setName(String name) this name = name; @Basic public String getSex() return this sex; public void setSex(String sex) this sex = sex; @Basic public Integer getAge() return this age; public void setAge(Integer age) this age = age; @Transient //由于本例不打算演示集合映射 所有声明该属性为 Transient public List getList() return list; public void setList(List list) this list = list;
注意该实体类中的属性都使用了默认值
Test java 代码同上
不需要了 hbm xml 映射文件 是不是简单了一些 给人认为简化了一些不是主要目的 主要是可以了解一下 EJB 的持久化机制 提高一下开发效率才是重要的
好了 本例就完了 感觉怎么样了 欢迎你来批批
PS:
生成的数据库表 和 程序执行后的 数据库情况如下
mysql> describe person;+ + + + + + +| Field | Type | Null | Key | Default | Extra |+ + + + + + +| id | int( ) | NO | PRI | NULL | auto_increment || name | varchar( ) | YES | | NULL | || sex | varchar( ) | YES | | NULL | || age | int( ) | YES | | NULL | || person | int( ) | YES | MUL | NULL | |+ + + + + + + rows in set ( sec)
mysql> select * from person;+ + + + + +| id | name | sex | age | person |+ + + + + +| | icerain | male | | NULL |+ + + + + + row in set ( sec)
cha138/Article/program/Java/ky/201311/28051相关参考
Hibernate高级查询实战 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大家知道在Hibe
Hibernate高级查询实战[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 《取TOP结
Hibernate高级查询实战[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大家知道在H
Groovy编程—Annotations的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 从
知识大全 用Java Annotations管理对象生命周期
用JavaAnnotations管理对象生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘要
TAPI指标如何运用于实战?TAPI指标怎样运用于实战?TAPI指标的实战技巧是什么?TAPI指标的实战技巧TAPI指标的构造比较简单,其实战技巧也主要集中在TAPI曲线与TAPIMA曲线的交叉情况及
知识大全 Hibernate3.1与Hibernate3.2
Hibernate3.1与Hibernate3.2 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
OBV指标的实战技巧是什么?OBV指标的实战技巧有哪些?相对于其他指标而言,OBV指标的研判最好是使用于上市两年并且上市以来一直下跌的新股,OBV指标的实战技巧主要集中在OBV曲线的形态及运行方向的方
PSY指标实战技巧有哪些?PSY指标的实战技巧是什么?PSY指标的实战技巧。PSY指标的实战技巧在以钱龙为代表的股市分析软件上,PSY指标是由2根或以上曲线组成,这样也会象RSI、BIAS、WR等指标
使用DMI指标如何在实战中操作?如何在实战操作中使用DMI指标呢?
使用DMI指标如何在实战中操作?如何在实战操作中使用DMI指标呢?第一,当DMI指标中ADX的数值低于+DI的数值时,特别是低于20以下时,所有的指标显示的买入卖出信号都是无效信号。此外ADXR的数值