首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

annotation(诠释)版本的hibernate

2012-11-17 
annotation(注释)版本的hibernate?annotation(注释)版本的hibernate,相比xxxx.hbm.xml那种方法,这种显然简

annotation(注释)版本的hibernate

?

annotation(注释)版本的hibernate,相比xxxx.hbm.xml那种方法,这种显然简单得多了,用得也多。

1.首先看看hibernate.cfg.xml的不同之处,

<session-factory>

<mapping?resource="com/bjsxt/hibernate/Student.hbm.xml"/>

<!--昨天学的.xml配置hibernate方法,得在这里声明映射的XML资源-->

<mapping?class="com.bjsxt.hibernate.Teacher"/>

<!--而今天学的这种annotation方法,则得加的是映射类-->

</session-factory>

2.Teacher类

package?com.bjsxt.hibernate;

?

import?javax.persistence.Entity;

import?javax.persistence.Id;

?

@Entity?????????????

//注释一下。注意这里的entiy是javax.persistence的entiy,导入相关的包注意不要导入错了。

//可以在entity下加这句来确定表名@Table(name="teacher")??

public?class?Teacher?{

private?int?id;

private?String?name;

private?String?title;

@Id???//?主键就是注释为@Id?

public?int?getId()?{

return?id;

}

//这些一般的property可以不用@注释出来,除非那些多对一、一对多的关系,那些后面学,如果方法名和属性名不同,则要用@column(name='xxx数据库里面的名称'),一般不建议这样。

public?void?setId(int?id)?{

this.id?=?id;

}

public?String?getName()?{

return?name;

}

public?void?setName(String?name)?{

this.name?=?name;

}

public?String?getTitle()?{

return?title;

}

public?void?setTitle(String?title)?{

this.title?=?title;

}

}

?

3.依旧写个测试类

Teacher?t?=?new?Teacher();

t.setId(1);

t.setName("t1");

t.setTitle("middle");

SessionFactory?sessionFactory?=?new?AnnotationConfiguration().configure().buildSessionFactory();

Session?session?=?sessionFactory.getCurrentSession();

session.beginTransaction();

session.save(t);

session.getTransaction().commit();

?

?

4.木有啦,测试!Ok

?

?

?

*。常用的hibernate?annotation标签如下,- -用到可以查:

@Entity??????????????--注释声明该类为持久类。将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的,要用下面的Transient来注解.


@Table(name="promotion_info")??????--持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名.
@Id--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。?
@GeneratedValue???--定义自动增长的主键的生成策略.?
@Transient?????????????--将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错.?
@Temporal(TemporalType.TIMESTAMP)--声明时间格式?
@Enumerated?????????--声明枚举?
@Version????????????????--声明添加对乐观锁定的支持?
@OneToOne????????????--可以建立实体bean之间的一对一的关联?
@OneToMany??????????--可以建立实体bean之间的一对多的关联?
@ManyToOne??????????--可以建立实体bean之间的多对一的关联?
@ManyToMany????????--可以建立实体bean之间的多对多的关联?
@Formula???????????????--一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)?
@OrderBy???????????????--Many端某个字段排序(List)

?

?

?

*。Hibernate和SQL中经常见到column是字段名,例如你往学生数据库中插入学生信息表,组成学生信息表中的的学号啊姓名啊性别啊那些就是column字段。

?

?

*。在hibernate.cfg.xml中,还有个要注意的就是hbm2ddl,DDL(Data?Definition?Language,数据库模式定义语言),就是hibernate自动转换为DDL语言的类型。选择create,那么每次都要drop掉然后再create新的数据,选择update则会每次都更新数据而不是删掉直接再来。一般是update。

<!--?Drop?and?re-create?the?database?schema?on?startup?-->

????????<property?name="hbm2ddl.auto">update</property>

?

?

?

这是上上周学的,自己小小整理了一下,忘记放出来了。。。

项目文件也给上,mysql的数据库名是hibernate,表名运行后自动生成。。。

项目采用的是JUNTI的测试方法。

1 楼 jsyzthz08 2012-07-23   我想问下,数据库里面每个自动的描述,比如name的数据库字段描述可以是“姓名”。这个如果在注解中如何去实现? 2 楼 moshowgame 2012-07-23   jsyzthz08 写道我想问下,数据库里面每个自动的描述,比如name的数据库字段描述可以是“姓名”。这个如果在注解中如何去实现?
@Table(name="table_person") //在class上面可以指定表名,该类对应什么表
public class Person{
@Column(name = "pname", length = 100,unique = true) //在属性上面可以指定数据库字段,并且长度、是否唯一等等
private string name;
......
} 3 楼 jsyzthz08 2012-07-27   moshowgame 写道jsyzthz08 写道我想问下,数据库里面每个自动的描述,比如name的数据库字段描述可以是“姓名”。这个如果在注解中如何去实现?
@Table(name="table_person") //在class上面可以指定表名,该类对应什么表
public class Person{
@Column(name = "pname", length = 100,unique = true) //在属性上面可以指定数据库字段,并且长度、是否唯一等等
private string name;
......
}
我是要找字段属性的描述注解的标签,比如数据库中user表中的username的描述属性应该是“用户名”,就是这个“用户名”我改怎么在注解上添加。 4 楼 moshowgame 2012-07-27   jsyzthz08 写道moshowgame 写道jsyzthz08 写道我想问下,数据库里面每个自动的描述,比如name的数据库字段描述可以是“姓名”。这个如果在注解中如何去实现?
@Table(name="table_person") //在class上面可以指定表名,该类对应什么表
public class Person{
@Column(name = "pname", length = 100,unique = true) //在属性上面可以指定数据库字段,并且长度、是否唯一等等
private string name;
......
}
我是要找字段属性的描述注解的标签,比如数据库中user表中的username的描述属性应该是“用户名”,就是这个“用户名”我改怎么在注解上添加。


可以用用@DiscriminatorColumn标签:

[size=xx-large]@DiscriminatorColumn(name="用户名", discriminatorType=STRING, length=100)
private string username;
[/size]

热点排行