`
fackyou200
  • 浏览: 309653 次
  • 性别: Icon_minigender_1
  • 来自: 山西太原
社区版块
存档分类
最新评论

springside3里面的hibernate

 
阅读更多

springside3 里面的 mini-web 为例子来分析。


springside3里面的hibernate - ws_wishao - 炜少的博客
 

 

src/main/java 目录结构

springside3里面的hibernate - ws_wishao - 炜少的博客
 

 

src/test/java 目录结构

如果需要更换数据库的话,就要改 2 个文件即可。

springside3里面的hibernate - ws_wishao - 炜少的博客
 

 

application.properties 改数据库驱动,数据库源,数据库帐号密码,是否显示 SQL 语句等。

pom.xml 是添加数据库驱动包的。

Mini-web 项目用的是 h2 数据库,所以如果不需要更换数据库的话,把 mini-web 项目导入到 myeclipse 后再添加右击项目选中

springside3里面的hibernate - ws_wishao - 炜少的博客
 

 

就可以马上启动了。

Authority.java 权限实体类

Role.java 角色实体类

User.java 用户实体类

他们都继承了 IdEntity id 生成策略,里面有他们各自的一些属性,并且用 annotation 来创建各自的表。

User.java 为例

//声明当前pojo为实体Bean  

@Entity  

//表名与类名不相同时重新定义表名.  

@Table (name =  "ACCT_USER"

//默认的缓存策略.  

@Cache (usage = CacheConcurrencyStrategy.READ_WRITE) 

//字段非空且唯一, 用于提醒Entity使用者及生成DDL.   

@Column (nullable =  false , unique =  true

public  String getLoginName() { 

return  loginName; 

}   

//声明当前pojo为实体Bean @Entity //表名与类名不相同时重新定义表名. @Table(name = "ACCT_USER") //默认的缓存策略. @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) //字段非空且唯一, 用于提醒Entity使用者及生成DDL. @Column(nullable = false, unique = true) public String getLoginName() { return loginName; } 

 

事实上,你既可以保持字段的持久性(注释写在成员变量之上),也可以保持属性(注释写在 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.

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

" " 方:
@OneToMany --> mappedBy:"
" 方的关联属性( 被控方)
"
" 方:
@ManyToOne --> @JoinColumn
"" 方定义的外键字段.

如数据表定义外键如下:

FOREIGN KEY (classid) REFERENCES classes(id)

:

@JoinColumn(name="classid"

2.

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

附加说明:

mappedBy 相当于过去的inverse="true".
inverse=false
sideside 其实是指inversefalse 所位于的class 元素)端有责任维护关系,而inversetrue 端无须维护这些关系。

 

多对多注解

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

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

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

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

其中,

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

 

cascade fetch 使用说明:

Cascade

CascadeType.PERSIST (级联新建)
CascadeType.REMOVE 
(级联删除)
CascadeType.REFRESH
(级联刷新)
CascadeType.MERGE  
(级联更新)中选择一个或多个。
CascadeType.ALL

fetch 属性:

关联关系获取方式, 即是否采用延时加载。
LAZY
(默认值)采用延时加载,查询数据时,不一起查询关联对象的数据。而是当访问关联对象时才触发相应的查询操作,获取关联对象数据。
EAGER
:是在查询数据时,也直接一起获取关联对象的数据。

 

每个实体类的 DAO 都继承了 HibernateDAO ,而 HibernateDAO 也继承了 SimpleHibernateDAO ,在 SimpleHibernateDAO 里面 springside 给我们提供了很多简单的增删查改的方法

springside3里面的hibernate - ws_wishao - 炜少的博客
 

 

T 为实体类, PK 为实体类的主键,参数里若有 final String hql 则说明用 hql 语句做为参数。

例如

查询唯一用户:

// 获取用户

 

user = entityDao.findUniqueBy( "id" , user.getId());  
user = entityDao.findUniqueBy("id", user.getId());  

HQL 多条件查询:

// 获取用户列表

List<User> u = entityDao.find( "from User user where user.id=? and user.name=? " , user1.getId(), user1.getName());  

List<User> u = entityDao.find("from User user where user.id=? and user.name=? ", user1.getId(), user1.getName());  

分享到:
评论

相关推荐

    springside3

    《SpringSide 3:深入理解Hibernate关联关系API》 在Java开发中,SpringSide是一个优秀的开源项目,它为Spring框架提供了一种结构化、模块化的使用方式,极大地提高了开发效率。其中,SpringSide 3对Hibernate的...

    SpringSide的Hibernate封装

    SpringSide的Hibernate封装是针对Spring和Hibernate整合时的一种优化实践,旨在提高开发效率和代码的可维护性。它通过三层封装来实现对Hibernate操作的便捷和类型安全。 第一层是HibernateGenericDao,它是基于...

    springside3文档资料收录

    Spring对各种ORM框架如Hibernate、JPA有很好的支持,SpringSide3会讲解如何利用Spring Data Access层,进行数据库操作,包括事务管理、JdbcTemplate、HibernateTemplate的使用方法。 六、Spring测试 测试是保证代码...

    SpringSide3-core-3.3.4

    1. **模块化设计**:SpringSide3-core的核心模块采用了模块化的结构,包括了Spring MVC、Hibernate、Quartz等常见框架的集成,使得开发者可以按需选择,避免了过度依赖,提升了项目的可维护性和灵活性。 2. **配置...

    springside3源码及jar

    《深入解析springside3:源码与jar剖析》 springside3是一个基于Spring框架的轻量级Java开发工具集,它旨在简化企业级应用的开发过程,提供了一套完整的构建工具、最佳实践和代码示例。在本文中,我们将深入探讨...

    springside3与传统ssh区别

    ### Springside3与传统SSH(Struts + Spring + Hibernate)的区别 #### 1. 数据库设计 在数据库设计方面,Springside3采用了一种更为现代化的方法,这体现在其对实体对象、DAO对象的设计上。它更加侧重于利用Java ...

    springside3 完整项目实例

    《SpringSide3 完整项目实例详解》 SpringSide 是一个开源的 Java 开发框架,其版本3(SpringSide3)是基于 Spring Framework 的企业级应用开发平台,它旨在简化 Spring 的使用,提供清晰的实践指导,使得开发者...

    SpringSide3框架

    SpringSide3框架,SpringSide3框架SpringSide3框架SpringSide3框架

    springside3-core-3.2.2包

    springside3-core-3.2.2 

    springside3-core-3.0.4 源码

    3. **Hibernate支持**:HibernateModule提供了与Hibernate ORM的紧密集成,包括数据访问对象(DAO)的生成、事务管理等。这有助于开发者快速搭建数据库操作层,理解ORM的工作原理。 4. **IoC容器**:IoCModule展示...

    springside3-extension-3.3.4

    springside3-extension-3.3.4.jar

    springside3-core-3.3.4

    springside3-core-3.3.4.jar

    springside3-core-3.3.4.jar

    springside3-core-3.3.4.jar

    struts2+spring3+hibernate3+jquery+springside 做一个OA2

    标题 "struts2+spring3+hibernate3+jquery+springside 做一个OA2" 提供了一个综合的Web开发框架组合,用于构建一个办公自动化(OA)系统。这个系统基于以下技术栈: 1. **Struts2**: Struts2是一个Java Web MVC...

    springside3+ext源代码

    《SpringSide3+EXT源代码解析与应用》 SpringSide3是一个基于Spring框架的轻量级Java开发平台,旨在提供一套高效、规范的开发实践。它整合了多种流行的技术,如EXTJS、EXT2、Spring、JPA以及Hibernate和Struts2等,...

Global site tag (gtag.js) - Google Analytics