Hibernate注解使用以及Spring整合

Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合

在过去几年里,Hibernate不断发展,几乎成为Java数据库持久性的事实标准。它非常强大、灵活,而且具备了优异的性能。在本文中,我们将了解如何使用Java 5 注释来简化Hibernate 代码,并使持久层的编码过程变得更为轻松。

传统上,Hibernate的配置依赖于外部XML 文件:数据库映射被定义为一组XML 映射文件,并且在启动时进行加载。

在最近发布的几个Hibernate版本中,出现了一种基于Java 5 注释的更为巧妙的新方法。借助新的Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。

即利用hibernate注解后,可不用定义持久化类对应的*.hbm.xml文件,直接以注解方式写入在持久化类中来实现。

Hibernate annotation使用了ejb JPA的注解,所以,下面安装配置hibernate annotation 环境时,需要导入ejb的包。许多网上的资料都是jpa hibernate annotation方面的资料。(2)

安装Hibernate Annotation

第一步,

环境与jar包:

要使用Hibernate Annotation,您至少需要具备Hibernate 3.2和Java 5。可以从Hibernate 站点下载Hibernate 3.2 和Hibernate Annotation库。除了标准的Hibernate JAR 和依赖项之外,您还需要Hibernate Annotations .jar 文件

(hibernate-annotations.jar)、Java 持久性API (lib/ejb3-persistence.jar)。

添加hibernate3.2.jar,hibernate-annotations- 3.3.0.jar,

hibernate-commons-annotations.jar和ejb3-persistence.jar 。这样就可以使用hibernate的annotation了。

如果您正在使用Maven,只需要向POM 文件添加相应的依赖项即可,如下所示:

...

org.hibernate

hibernate

3.2.1.ga

org.hibernate

hibernate-annotations

3.2.0.ga

javax.persistence

persistence-api

1.0

获取Hibernate 会话工厂。尽管无需惊天的修改,但这一工作与使用Hibernate Annotations 有所不同。您需要使用AnnotationConfiguration 类来建立会话工厂:

sessionFactory = new AnnotationConfiguration().buildSessionFactory();

第三步,

尽管通常使用 元素来声明持久性类,您还是需要在Hibernate 配置文件(通常是hibernate.cfg.xml)中声明持久性类:

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"https://www.360docs.net/doc/7717541697.html,/hibernate-configuration-3.0.dtd">

近期的许多Java 项目都使用了轻量级的应用框架,例如Spring。如果您正在使用Spring 框架,可以使用

AnnotationSessionFactoryBean 类轻松建立一个基于注释的Hibernate 会话工厂,如下所示:

class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFa ctoryBean">

org.hibernate.dialect.DerbyDialect create

...

com.onjava.modelplanes.domain.PlaneType

com.onjava.modelplanes.domain.ModelPlane

...

com.onjava.modelplanes.domain.*

(3)

hibernate Annotation标签的使用:

[1]

1.带注释的持久性类也是普通POJO,它们只是具备了持久性注释的普通POJO 。

2.事实上,您既可以保持字段的持久性(注释写在成员变量之上),也可以保持属性(注释写在getter方法之上)的持久性。

3.常用的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)

1.2

Hibernate 能够出色地自动生成主键。Hibernate/EBJ 3 注释也可以为主键的自动生成提供丰富的支持,允许实现各种策略。

其生成规则由@GeneratedValue设定的.这里的@id和@GeneratedValue都是JPA的标准用法, JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出.

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.

TABLE:使用一个特定的数据库表格来保存主键。

SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。

IDENTITY:主键由数据库自动生成(主要是自动增长型)

AUTO:主键由程序控制。

在指定主键时,如果不指定主键生成策略,默认为AUTO。

@Id

相当于

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

identity:

使用SQL Server 和MySQL 的自增字段,这个方法不能放到Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和SQL Server 中很常用)。

Oracle就要采用sequence了.

同时,也可采用uuid,native等其它策略.(相关用法,上网查询)

[2]

第一个持久性类

@Entity

@Table(name="T_MODEL_PLANE")

public class ModelPlane implements Serializable {

@Id

@Column(name="PLANE_ID")

@GeneratedValue(strategy=GenerationType.AUTO) //注解于属性中

/*

对于oracle想使用各自的Sequence,设置如下:

@GeneratedValue(strategy =

GenerationType.AUTO,generator="PROMOTION_SEQ")

@SequenceGenerator(name="PROMOTION_SEQ",sequenceName="PROMOTION_ SEQ")

另外:

对于自动增长后,在数据表中的相应字段,要设置字段为auto_increment.

*/

private Long id;

private String name;//注解写于getter方法之上.请见下.

//DATE - java.sql.Date

//TIME - java.sql.Time

//TIMESTAMP - java.sql.Timestamp

@Temporal(TemporalType.TIMESTAMP)

@Column(name="start_time")

private Date startTime;

//显示0 隐藏1

public static enum DisplayType {显示,隐藏}

@Enumerated(value = EnumType.ORDINAL)//ORDINAL序数

private DisplayType displayType = DisplayType.显示;

//1.sql语句中的字段和表名都应该和数据库相应,而不是类中的字段,

//若带有参数如la.id= id,这个=id才是类中属性

//2.操作字段一定要用别名

@Formula(select COUNT(la.id) from largess la)

private int count;

//注解于方法中

@Column(name="PLANE_ID", length=80, nullable=true) //较详细定义public String getName() {

return name;

}

public void setName(String name) {

https://www.360docs.net/doc/7717541697.html, = name;

}

其它的setter,getter省略......

}

该内容将映射到下表中:

CREATE TABLE T_MODEL_PLANE

(

PLANE_ID long,

PLANE_NAME varchar

其它字段省略...

)

默认情况下,Hibernate 会将持久类以匹配的名称映射到表和字段中。例如,下例中,若不用注解,则会映射到如下一表中:

CREATE TABLE MODELPLANE

(

ID long,

NAME varchar

其它字段省略...

)

[3]

一对多注解:

1.

在一对多注解中,会用到:

"一"方:

@OneToMany --> mappedBy:"多"方的关联属性(被控方)

"多"方:

@ManyToOne --> @JoinColumn,"多"方定义的外键字段.

如数据表定义外键如下:

FOREIGN KEY (classid) REFERENCES classes(id)

则:

@JoinColumn(name="classid")

2.

在双向关联中,有且仅有一端作为主体(owner)端存在:主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedNy属性进行声明。mappedBy的值指向另一主体的关联属性。例子中,mappedBy的值为classes。

附加说明:

mappedBy相当于过去的inverse="true".

inverse=false的side(side其实是指inverse=false所位于的class元素)端有责任维护关系,而inverse=true端无须维护这些关系。

3.

cascade与fetch使用说明:

Cascade

CascadeType.PERSIST (级联新建)

CascadeType.REMOVE (级联删除)

CascadeType.REFRESH (级联刷新)

CascadeType.MERGE (级联更新)中选择一个或多个。

CascadeType.ALL

fetch属性:

关联关系获取方式,即是否采用延时加载。

LAZY(默认值)采用延时加载,查询数据时,不一起查询关联对象的数据。而是当访问关联对象时(如:getStudnets()时)才触发相应的查询操作,获取关联对象数据。

EAGER:是在查询数据时,也直接一起获取关联对象的数据。

package oneToMany;

import java.util.Set;

import javax.persistence.*;

/*

注意导入时,是导入:import javax.persistence.*;

非导入org.hibernate的相关类:import org.hibernate.annotations.Entity;

*/

@Entity

@Table(name="classes")

public class Classes implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int id;

private String name;

@OneToMany(cascade=CascadeType.ALL,mappedBy="classes")

private Set students;

//getter,setter省略

}

package oneToMany;

import javax.persistence.*;

@Entity

@Table(name="student")

public class Student implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int sid;

private String sname;

//若有多个cascade,可以是:{CascadeType.PERSIST,CascadeType.MERGE} @ManyToOne(cascade={CascadeType.ALL})

@JoinColumn(name="classid") //student类中对应外键的属性:classid private Classes classes;

//getter,setter省略

}

public class TestOneToMany {

/*

CREATE TABLE student ( --要定义外键!!!!!!!

`sid` double NOT NULL auto_increment,

`classid` double NULL,

`sname` varchar(255) NOT NULL,

PRIMARY KEY (sid),

INDEX par_ind (classid),

FOREIGN KEY (classid) REFERENCES classes(id) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB

*/

public static void main(String[] args) throws SQLException

{

try

{

SessionFactory sf = new

AnnotationConfiguration().configure().buildSessionFactory();

Session session=sf.openSession();

Transaction tx=session.beginTransaction();

/*

因为mappedBy是定义在classes中,即classes类不负责维护级联关系.即维护者是student.所以,

1.要将clsses的数据,赋给student,即用student的setClasses()方法去捆定class数据;

2.在进行数据插入/更新session.save()/session.update()时,最后操作的是student.

*/

Classes classes=new Classes();

classes.setName("access");

Student st1=new Student();

st1.setSname("jason");

st1.setClasses(classes);

session.save(st1);

Student st2=new Student();

st2.setSname("hwj");

st2.setClasses(classes);

session.save(st2);

https://www.360docs.net/doc/7717541697.html,mit();

/*

输出如下:

Hibernate: insert into classes (name) values (?)

Hibernate: insert into student (classid, sname) values (?, ?)

Hibernate: insert into student (classid, sname) values (?, ?)

*/

/*

因为一端维护关系另一端不维护关系的原因,我们必须注意避免在应用中用不维护关系的类(class)建立关系,因为这样建立的关系是不会在数据库中存储的。

如上的代码倒过来,则插入时,student的外键值为空.如下:

*/

// Student st1=new Student();

// st1.setSname("jason");

// session.save(st1);

//

// Student st2=new Student();

// st2.setSname("hwj");

// session.save(st2);

//

// Set students=new HashSet();

// students.add(st1);

// students.add(st2);

//

// Classes classes=new Classes();

// classes.setName("access");

// classes.setStudents(students);

// session.save(classes);

/*

输出如下:

Hibernate: insert into student (classid, sname) values (?, ?)

Hibernate: insert into student (classid, sname) values (?, ?)

Hibernate: insert into classes (name) values (?)

*/

}

catch(HibernateException e)

{

e.printStackTrace();

}

}

}

[4]

多对多注解:

在多对多注解中,双方都采用@ManyToMany.

其中被控方,像一对多注解中设置一样,也要设置mappedBy.

其中主控方,不像一对多注解那样,采用@joinColumn,而是采用@joinTable.如下:

@JoinTable(name="j_student_course" ,joinColumns={@JoinColumn(name="sid") },inverseJoinColumns={@JoinColumn(name="cid")})

其中,

如上所说,mappedBy,相当于inverse="true".所以,在@joinTable中的inverseJoinColumns中定义的字段为mappedBy所在类的主键.

joinColumns定义的字段,就是当前类的主键.

@Entity

@Table(name="jcourse")

public class Jcourse {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int cid;

private String cname;

@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=F https://www.360docs.net/doc/7717541697.html,ZY ,mappedBy="courses")

private Set students;

//setter,getter省略....

}

@Entity

@Table(name="jstudent")

public class Jstudent {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private int sid;

private String sname;

@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=F etchType.EAGER)

//inverseJoinColumns中对应的id为以下属性course的对应id.

@JoinTable(name="j_student_course" ,joinColumns={@JoinColumn(name="sid ")},inverseJoinColumns={@JoinColumn(name="cid")})

private Set courses;

//setter,getter省略....

}

public class Test {

public static void main(String[] args) {

try

{

SessionFactory sf = new

AnnotationConfiguration().configure().buildSessionFactory();

Session session=sf.openSession();

Transaction tx=session.beginTransaction();

Jcourse course=new Jcourse();

course.setCname("jason-english");

session.save(course); //先各自保存.

Jcourse course2=new Jcourse();

course2.setCname("herry-english");

session.save(course2);

Set courses=new HashSet();

courses.add(course);

courses.add(course2);

Jstudent student=new Jstudent();

student.setSname("jason");

student.setCourses(courses);

session.save(student);// 要用非mapby定义的类(studet)来作为主者(会控制级联关

系),一对多,多对一也一样道理.

//可以尝试反过来.

https://www.360docs.net/doc/7717541697.html,mit();

}

catch(HibernateException e) {

e.printStackTrace(); }

}

}

Spring考试

1. (单选题)下列关于Spring配置文件的说法不正确的是 o A. Spring默认是读取/WEB-INF/配置文件 o B. Spring的配置文件可以配置在类路径下,并可以重命名,但是需要在文件中指定 o C. 把文件放到src目录下,Spring也可以读到 o D. 可以通过在中的进行指定 Spring配置文件 正确答案:C 把文件放到src目录下,需要在web。xml里设置 contextConfigLocation /WEB-INF/classes/ 可以让spring读到 2. (单选题)下列关于Spring特性中IoC描述错误的是 o A. IoC就是指程序之间的关系由程序代码直接操控 o B. 所谓“控制反转”是指控制权由应用代码转到外部容器,即控制权的转移 o C. IoC将控制创建的职责搬进了框架中,从应用代码脱离开来 o D. 使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC 容器会根据XML配置数据提供给它

正确答案:A IOC是来完成相互依赖的对象的创建、协调工作。 3. (单选题)下列关于Spring的装配模式(default-autowire)描述不正确的是 o A. Spring中,至少有两种装配模式,按“类型”和“名字” o B. Spring中默认是按名字进行装配的 o C. 可以用default-autowire=”byType”配置按类型装配 o D. 一旦在一个Spring配置文件中配置了default-autowire=”byType”,其它的配置文件也是按此种装配方式进行装配 正确答案:D 在标签中指定default-autowire属性,那么对于子标签 如果没有单独的设置autowire属性,那么将采用父标签 的default-autowire属性的模式,如果单独设置了autowire 属性,则采用自己的模式 4. (单选题)下列选项关于Spring的核心机制——依赖注入的描述正确的是 o A. 所谓依赖注入就是明确地定义组件接口,独立开发各个组件,然后根据组件间的依赖关系组装运行的设计开发模式 o B. Spring不负责管理bean之间的关系 o C. 节点有可选的子节点,用于注入bean的属性 o D. 在Spring的配置文件中,使用来创建Bean的实例 正确答案:B Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用java语言的反射功能实例化Bean并建立Bean之间的依赖关系。spring的ioc容器在完成这些底层工作的基础上,还提供了bean实例缓存,生命周期管理,bean实例代理,事件发布,资源装载等高级服务 5.

企业信息化如何进行资源整合

企业信息化如何进行资源整合 2010-07-06 13:45:52来源: e-works作者: 无跟贴0条 分享到: QQ空间新浪微博开心网人人网 在全球化和信息化的今天,信息的不对称性导致了企业的规模不同,人于人之间的地位不同,如何能让更多的信息为你所用是一个企业,一个人成功与否的关键,那么如何来汇聚更多的信息呢?如何利用更多的信息来帮助你决策呢? 1、平台的搭建是集中资源的基础保障 “得平台者得天下,平台为王”,其中的道理也是显而易见的。中国政府就是一个管理着960万平方公里的资源的平台,国美、苏宁这样的大卖场、大平台管理着几乎全球所有家电的销售,我们的企业有什么理由不建立一个自己的平台来管理和充分利用企业的资源呢?对制造企业而言,从订单的接受到产品交付以及售后服务,都需要一个平台来支撑,来管理,来统一调度资源,来支撑企业的持续发展,甚至于商业模式的改变。这样的平台就是ERP 系统。 企业的发展最重要的就是资源的合理配置和利用。第一:企业的资源包括人力资源、财力资源、信息资源,老板对企业的资源是否清楚是合理配置的前提。第二:实时的企业信息是决策者正确利用和配置资源的根本保障。试想,如果决策者都不知道企业现在的科研进度、生产进度以及核心人员的能力状况,试问决策者如何给你调配充分合理的资源?第三:企业信息化平台是领导决策利用的最可信的工具。所有的生产要素都是靠人来组织的,人是整个过程的核心元素,但是,人是感性的,人性是自私的,在某种情况下人是不可靠的。所以,ERP平台的透明性和流程化在企业管理中有着不可替代的作用,是决策者必不可少的工具。 2、企业信息化平台应该是高可用性、高集成性的管理平台 企业处于不同的阶段有不同的战略规划、盈利模式、管控模式。搞清楚企业的真实需求、发展瓶颈以及现阶段迫切需要解决的问题,决定企业是否实施信息化,那些方面先信息化,企业信息化集成度。 我国古代著名的军事理论家孙子说过:“夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎?吾以此观之,胜负见矣。”,意思就是说开战之前就预见能够取胜的,是因为筹划周密,胜利条件充分;开战之前就预见不能取胜的,是因为筹划不周,胜利条件不足。筹划周密、条件充分就能取胜;筹划疏漏、条件不

springMVC详解以及注解说明

springMVC详解以及注解说明 基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置Bean、装配Bean 的功能,您可以使用基于注释的Spring IoC 替换原来基于XML 的配置。本文通过实例详细讲述了Spring 2.5 基于注释IoC 功能的使用。 概述 注释配置相对于XML 配置具有很多的优势: ? 它可以充分利用Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用JPA 注释配置ORM 映射时,我们就不需要指定PO 的属性名、类型等信息,如果关系表字段和PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过Java 反射机制获取。 ? 注释和Java 代码位于一个文件中,而XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。 因此在很多情况下,注释配置比XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。在这篇文章里,我们将向您讲述使用注释进行Bean 定义和依赖注入的内容。 Spring2.5的注释 Spring 2.5 提供了AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor这四个主要的关于Annotation 的BeanPostProcessor。 我们可以使用 来方便地、一次性的声明者四个BeanPostProcessor。 1.Autowired... 提供对Spring 特有的Autowired 和Qualifier 注释。

Spring的HibernateDaoSupport类详解

HibernateDaoSupport: (创建一个子类对象的时候,会先创建一个父类对象)。 当LogDAOImpl继承HibernateDaoSupport的时候,程序执行报错,原因是必须要注入SessionFactory或者HibernateTemplate。因为HibernateDaoSupport是abstract类,所以无法生成HibernateDaoSupport对象来实现注入;那我们只能生成其子类LogDAOImpl的对象,在调用HibernateDaoSupport类中的set方法进行注入,但这个方法还是不行,因为HibernateDaoSupport类中的set方法为final方法。总之,我们无法使用annotation方式在HibernateDaoSupport中注入SessionFactory或者HibernateTemplate。,那么我们的LogDAOImpl类就不能使用annotation的方式生成了,我们只能(暂且,以后会有其他方法)在beans.xml中进行注入如下: 使用这种方式进行注入,我们又会有另外一个问题:假如现在有很多的DAO的实现需要继承HibernateDaoSupport,那么我们在beans.xml文件中就需要配很多的,这样仅配置文件就非常庞大了。 到现在,我们已经知道了HibernateDaoSupport怎么使用了。 使用上面的方法直接继承HibernateDaoSupport比较复杂,现在介绍一种简便的方法:我们可以把DAO抽象处理,写一个抽象类,让它去继承HibernateDaoSupport,如下: 如下修改beans.xml文件,将sessionFactory注入给它:

Hibernate学习入门教程

Hibernate学习入门教程 开发环境搭建 [日期:2015-08-11] 来源:Linux社区作者:doctorJoe [字体:大中小] 其实一两个月前就在了解Hibernate方面的知识了,但一直以来,都没有好好的总结,而且一直使用的是myeclipse,感觉有些傻瓜式的操作就可以搭建起Hibernate的开发环境,但这样一点都不好,没有理解到Hibernate到底是怎么配置的,所以你今天特使用Eclipse来一步一步搭建Hibernate的开发环境,下面,正式进入正题。 在Hibernate中开启日志https://www.360docs.net/doc/7717541697.html,/Linux/2015-07/120499.htm Hibernate+JUnit测试实体类生成数据库表https://www.360docs.net/doc/7717541697.html,/Linux/2015-07/120161. htm Hibernate整体理解https://www.360docs.net/doc/7717541697.html,/Linux/2014-07/104405.htm Hibernate的映射机制https://www.360docs.net/doc/7717541697.html,/Linux/2014-12/110265.htm 新建一个web项目,名字就随便吧,你喜欢什么名字就什么吧,这是我的截图。

引入hibernate的依赖jar包,我使用的是hibernate-release-4.3.10.Final,下载好后解压,打开压缩包下的lib目录下的require文件夹,这是hibernate的所以来的必须的jar包,接下来,在刚才新建的项目里新建一个libs文件夹,将刚才的所说的jar包copy进去,另外,由于我们需要连接MySQL数据库以及使用JUnit测试,将所需的mysql-connector-java-5.0.8-bin.jar和junit-4.5.jar两个jar包引用进去,关于这些jar包,可以在网上搜索。接下来,就是把这些jar 包添加到编译环境中去,选中libs下的jar包,右击选择Build Path –>Add to Build Path,这样就把依赖jar包成功添加进去了。 继续往下,我们需要配置最重要的hibernate配置文件hibernate.cfg.xml以及进行日志处理的log4j.properties属性文件:打开上一步解压后的hibernate文件夹,打开project—>etc文件夹,将该文件夹下的hibernate.cfg.xml和log4j.properties文件拷贝到项目的src文件夹下,打开hibernate.cfg.xml文件,将session-factory标签中的内容替换成如下的内容: 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;

为什么要进行信息资源整合

为什么要进行信息资源整合 信息资源整合是指将某一范围内的,原本离散的、多元的、异构的、分布的信息资源通过逻辑的或物理的方式组织为一个整体,使之有利于管理、利用和服务。我们也可以这样来理解信息资源整合,就是把分散的资源集中起来,把无序的资源变为有序,使之方便用户查找信息、方便信息服务于用户。这也是广义的信息资源整合概念,它包含了信息采集、组织、加工以及服务等过程。 为什么要进行信息资源的整合? 整合究竟要解决什么问题? 这主要源于网络信息资源的激增,资源的种类越来越丰富,数据库和信息资源检索系统越来越多,检索方式、检索手段各式各样。造成了数据冗余、相互关联程度低,大量的信息孤岛出现,同时用户的检索负担也日益加重。因此,需要有一种手段把这些信息集中、整序、关联起来,把检索系统集成起来,使用户知道到哪里可以找到所需要的信息,怎样去查找这些信息,如何筛选检索结果,这就是信息资源整合的最终目的。 信息资源的整合方法、途径和手段多种多样,但一般来说包括三个层面:其一是数据层(又称资源层) ,即把有关信息资源集中为一体;第二是操作层(又称服务层或中间层) ,即通过软件或平台对有关信息资源进行统一利用;第三是系统层(又称应用层) ,即包含数据内容、软件系统以及基础设置的全面整合。信息服务部门需要根据自己的信息资源、应用系统状况以及硬件基础设施来确定整合层次和实施方案。 信息资源整合原则 信息资源整合是一个系统工程,如何在理论的指导和经验的驱使下,使信息资源的整合工程做到最优。还需要我们在数据整合工程的实施过程中遵循如下原则。 整体性原则 整体性又称完整性,就是在信息资源整合工程中要保持信息资源对象完整与全面。完整性主要体现在这样几个方面。 (1)根据服务的主要对象或服务目标,保证整合资源内容的和学科的完整性; (2)确保信息资源是一个整体,并不一定要求在物理上是一个整体,但需要将分布资源有机关联,揭示数据对象间的内在关系,在逻辑上形成一个整体; (3)用户界面的统一,即实现一站式检索; (4)系统功能的全面性,即要求整合后的资源系统能够涵盖原子系统的所有功能。 科学性原则 科学性原则主要是指对整合工程进行全面规划,科学论证,切忌匆忙上马,不宜随意凑合,要保证整合的合理性、科学性和规范化。具体在实施过程中要注意。 (1)资源选择的科学性,根据自己的服务对象和财力合理的规划、购买和自建资源,不能盲目求多,浪费人力财力; (2)整合资源组织的科学性,建立各类资源间的多重关联,科学地组织它们,将有限的资源产生出最大的知识和信息量; (3)整合后的系统在交互接口上的科学性,这个交互包括数据处理过程的后台交互,也包括用户和检索系统的交互,交互的科学性主要体现在处理接口的无缝连接,处理过程简洁快速,检索界面的方便有效。 层次性原则

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.360docs.net/doc/7717541697.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.

企业信息资源整合与生存战略

企业信息资源整合与生存 战略 Ting Bao was revised on January 6, 20021

企业信息资源整合与生存战略 资源是企业未来生存战略的第二大因素。企业生存管理专家、企业未来生存管理理论创始人邓正红认为,企业未来生(本文来自博锐邓正红专栏)存是可控的,其中,环境是基础,资源是保证,文化是导向。企业未来生存就在于把握环境变化之“势”,在资源和企业文化之间求得平衡。企业在环境、资源和文化之间由平衡效应所产生的思维结果就是企业战略,企业战略开启企业未来生存之路。邓正红企业未来生存管理理论强调,在企业生存力及其形成过程中,企业资源潜力和企业资源整合力二者缺一不可。企业若缺乏一定数量与质量的资源,则企业资源整合力就显得无用武之地,企业也便有“巧妇难为无米之炊”的无奈;反之,企业资源再雄厚、再优越,资源潜力再大,若缺乏足够的资源(本文来自博锐邓正红专栏)配置力的激活和放大,也只能处于休眠状态,无法形成现实的竞争力。特别是对人力资源而言,若不能有效激发其积极性、自觉性与创造性,不能协调好各种人际关系,其结果就不仅仅是资源潜力难以发挥的问题了,它还会因为企业成员之间的有害冲突与矛盾而引起内耗,轻则增加企业的内耗成本,重则危及企业的生存。与企业资源潜力相比,企业资源整合力在企业生存力及其形成过程中的地位与作用更为重要与关键。特别是在科学技术(尤其是信息技术)飞速发展、物质生产力日益发达、市场机制和体系渐趋成熟和完善,以及社会文明与教育水平不断进步与提高的今天,企业要获得和拥有一定数量较高禀赋的(本文来自博锐邓正红专栏)相关资源并非难事,难的是如何有效激活和放大这些资源的潜力。换言之,当今企业缺乏的不是资源本身,而是资源整合力。按照新木桶原理,最缺乏的就是最关键的,如何提高资源整合力已愈来愈成为当今企业能否构建和提升其生存力的核心和关键。从邓正红对企业未来生存管理的研究来看,企业未来生存必经三个阶段,即以活得下为主导的环境生存阶段,以活得好为主导的基本生存阶段,以活得久为主导的核心生存阶段,这三个阶段分别对应三种生存境界,就是环境生存、物质生存、精神生存。企业如果只图现在活得下,就只要集中精力应对环境变化就行了;企业如果还想活得好些,就需要以充足的资源为保证,但资源不是无限(本文来自博锐邓正红专栏)的,需要不断地创新、整

spring的@Transactional注解详细用法

spring的@Transactional注解详细用法 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! spring的@Transactional注解详细用法Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API 提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用提供比其他事务API如JTA更简单的编程式事务管理API与spring数据访问抽象的完美集成事务管理方式spring支持编程式事务管理和声明式事务管理两种方式。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。显然声明式事务管理要优于编程式事务管理,这正是spring

数据信息资源整合研究与实践 周虹霞

数据信息资源整合研究与实践周虹霞 发表时间:2019-07-19T12:33:23.247Z 来源:《基层建设》2019年第12期作者:周虹霞 [导读] 摘要:随着信息技术的飞速发展,各类数据、信息资源急速膨胀,由于数据标准规范不统一、兼容性等各方面的问题,导致大量数据信息形成“信息孤岛”,不能及时有效的融合共享,使信息的开放利用、服务社会大打折扣。 中国国家博物馆北京 100006 摘要:随着信息技术的飞速发展,各类数据、信息资源急速膨胀,由于数据标准规范不统一、兼容性等各方面的问题,导致大量数据信息形成“信息孤岛”,不能及时有效的融合共享,使信息的开放利用、服务社会大打折扣。鉴于此,本文根据当前国家博物馆数据信息资源管理的现状,就解决信息资源整合、共享进行一些可行的研究。 关键词:数据信息;资源整合;元数据 前言 数据信息资源整合过程中最为常见、最为突出的就是数据兼容性问题。由于数据信息的来源和形成环境不一致,数据格式没有统一的标准,数据信息不能集中起来,容易形成“孤岛”,最终导致数据信息资源共享困难,进而影响其利用效果。 1数据信息资源整合途径 1.1统一资源管理软件平台 借助一款适合自身工作环境及情况的信息管理软件是一个较好的途径。长期以来,各单位依据自身的行业习惯、操作规程等条件自主建设软件是造成数据信息不兼容的主要原因之一。信息管理软件的数据库结构、设计模式、实现方法等都不一样,那么要避免数据库不兼容,采用统一的软件管理平台,无疑是最直接有效的办法。但是实施的难度较大,需要统一部署。随着信息技术、网络技术的发展,利用专网统一部署或统一软件平台,采用分布式系统来解决数据信息资源的兼容问题具有一定的可行性。 1.2统一数据格式标准 如果软件平台无法统一,可以尝试建立统一的数据库系统和接口及相关数据标准。数据库是数据资源与应用软件的基础支撑。虽然不同软件使用的数据库结构不一样,但各数据库之间的数据共享和导入、导出还是比较容易实现的。模式化存储数据信息的数据库结构,规范、统一数据字段、命名规范等细节,使得在数据库层面基本保持一致,预留标准统一的数据接口,那么即使软件在数据处理层面、操作层面和视觉层面有再大的差异,对数据信息的共享、利用、整合也不会带来很大影响。统一数据库格式标准对数据信息的利用和兼容性问题处理有着不可替代的作用,能给整合数据信息资源带来非常大的便捷。 1.3统一转换方式 统一转换方式对于解决数据信息兼容性问题有自身的优势,但也有一定的弊端,具有较大的风险性。因为这种方式具有依赖性,它依附于第三方软件,如果第三方软件出现问题,那么就会出现全盘崩溃的局面,会使我们陷入被动的局面,因而在使用中需要更加妥善的管理,并作出相应的灾害预案处置安排。 2数据信息资源现状 国家博物馆信息化建设过程中产生了大量的基础数据资源,数据涵盖国博业务相关的藏品、展览、科研、教育、考古、财务、人员等各方面,资源类型包括多媒体信息、文档信息、数值信息及其他类型。这些数据信息资源存储在各个应用系统中,分散管理。因此,有必要建立统一数据信息资源中心,实现国博信息资源共享和统一数据交换,提供统一的数据展现分析服务,以此提高业务水平和工作效率,为领导管理决策提供数据支撑。 2.1信息类型需求 根据对国博业务管理需求分析及应用领域界定,国博信息化建设对信息资源的需求可以分为基础业务信息、基本统计信息、动态信息、公众信息、服务信息、其他信息5类。 2.2数据资源整体规划 将国博数据资源按不同功能可划分为三大区域,分别是应用业务数据区域、管理数据区域和系统数据区域。 (1)业务数据:主要包括OA数据、邮箱数据、图片影像等多媒体数据、文档及各业务应用系统产生的数据等。 (2)管理数据:包括国博信息化管理所需的标准规范数据、决策分析数据等。 (3)系统数据:包括元数据、基础信息数据、信息资源目录数据。 3信息资源库建设 国博建设综合业务服务平台对应用系统进行整合,其中包含建设信息资源库系统平台。该平台的建设是在系统整合过程中对结构化与非结构化数据的收集、访问、管理、交换和集成,为各相对独立的业务应用(系统)的数据提供了统一的WEB入口和数据协同,它包括以下方面: (1)结构化数据集成:就是处理多个数据源多数据库之间的数据移动。采用的主要数据处理技术有数据复制、数据聚合和接口集成。 (2)非结构化数据包括图像、文档、网页和媒体等,它们的集成包括非结构化数据的管理、检索、分类、转换、共享、存档等多个方面。 3.1数据库设计 数据库及其应用的性能和调优建立在良好的数据库架构设计基础上。本项目建设应结合国博信息化资源的建设现状和未来发展,进行信息资源数据库的统一设计,包括数据库安全设计与用户权限设计、数据库管理和维护设计。 本系统后台数据库为关系型数据库ORACLE。在数据库开发过程中,要遵循数据库工程的方法和标准,尽可能减少反复。要有阶段性的规范化文档。要加强数据库日志管理,及时检查用户操作日志严防非法登陆。采用防病毒、防火墙、入侵检测等手段防止数据库信息泄露和损坏。加强数据库审计功能,设定审计规则并加强设计检查。 3.2元数据管理 元数据是描述数据库内数据的结构和建立方法的数据,重要的元数据包括数据源结构、目标数据库结构、数据转换规则等,应根据系统总体元数据标准进行元数据提取和著录,形成各共享数据集的元数据应用方案。数据库建设中,可将其按用途的不同分为三类,技术元

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类,并且编写映射文件。

基于注解的Spring AOP的配置和使用

基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中(也即是说,这些非业务类横切于业务类),但这些代码往往是重复,复制——粘贴式的代码会给程序的维护带来不便,AOP就实现了把这些业务需求与系统需求分开来做。这种解决的方式也称代理机制。 先来了解一下AOP的相关概念,《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下: ?切面(Aspect):官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext 中来配置。 ?连接点(Joinpoint):程序执行过程中的某一行为,例如,UserService.get 的调用或者UserService.delete抛出异常等行为。 ?通知(Advice):“切面”对于某个“连接点”所产生的动作,例如,TestAspect 中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如ServiceAspect。?切入点(Pointcut):匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定。 ?目标对象(Target Object):被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。 ?AOP代理(AOP Proxy):在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。 强制使用CGLIB代理需要将 的 proxy-target-class属性设为true。 通知(Advice)类型: ?前置通知(Before advice):在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在 里面使用元素进行声明。例如,TestAspect中的doBefore方法。

中文版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. 翻译说明

Spring注解详解

Spring注解详解 目录 一、注解说明 (2) 1.使用简化配置 (2) 2.使用Bean定义注解 (2) 3.Spring支持以下4种类型的过滤方式: (2) 二、注解介绍 (2) 1.@Controller (3) 2.@Service (3) 3.@Autowired (4) 4.@RequestMapping (4) 5.@RequestParam (5) 6.@ModelAttribute (6) 7.@Cacheable和@CacheFlush (7) 8.@Resource (7) 9.@PostConstruct和@PreDestroy (8) 10.@Repository (8) 11.@Component(不推荐使用) (8) 12.@Scope (8) 13.@SessionAttributes (9) 14.@InitBinder (9) 15.@Required (9) 16.@Qualifier (10)

一、注解说明 1.使用简化配置 将隐式地向Spring容器注册以下4个BeanPostProcessor: AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor 2.使用Bean定义注解 如果要使注解工作,则必须配置component-scan,实际上不需要再配置annotation-config。base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。还允许定义过滤器将基包下的某些类纳入或排除。 3.Spring支持以下4种类型的过滤方式: 1)注解org.example.SomeAnnotation将所有使用SomeAnnotation注解的类过滤出来 2)类名指定org.example.SomeClass过滤指定的类 3)正则表达式com.kedacom.spring.annotation.web..*通过正则表达式过滤一些类 4)AspectJ表达式org.example..*Service+通过AspectJ表达式过滤一些类 二、注解介绍 注解种类: 1)@Controller 2)@Service 3)@Autowired 4)@RequestMapping 5)@RequestParam 6)@ModelAttribute

马士兵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")

相关文档
最新文档