ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:114.79KB ,
资源ID:4397382      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4397382.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring与Jpa整合.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring与Jpa整合.docx

1、Spring与Jpa整合Spring与Jpa的整合使用概述本文主要基于Oracle的Scott用户下的表作为测试数据库。如果你尚未安装Oracle,也可以根据如下的表信息,在相应的数据库产品中进行创建。表结构主要的表,以EMP和DEPT为主DEPT表结构EMP表结构BONUS表结构SALGRADE表结构环境准备Maven设置在创建项目之前,可以对Maven进行一些必要的设置。如下,点击Browse浏览,设置setting.xml。在setting.xml中可以设置相应的Repository。如下创建Maven项目然后,就可以创建一个新的Maven项目,并在pom.xml中添加依赖。所依赖的ja

2、r包可以通过 查找。为了及时的获得spring或者hibernate的jar包。我们可能还需要在setting.xml文件中添加如下几个。以下是Spring的Maven Repository:For full releases: io.spring.repo.maven.release http:/repo.spring.io/release/ false For milestones: io.spring.repo.maven.milestone http:/repo.spring.io/milestone/ false And for snapshots: io.spring.repo.m

3、aven.snapshot http:/repo.spring.io/snapshot/ true 以下是Jboss的Maven RepositoryFor full releases: org.jboss.repo.maven.release https:/repository.jboss.org/nexus/content/repositories/release false And for snapshots: org.jboss.repo.maven.snapshot https:/repository.jboss.org/nexus/content/repositories/snap

4、shot/ true 接下来,引用相应的依赖,首先是spring。关于这一点,可以参考spring的参考手册。http:/docs.spring.io/spring/docs/4.1.0.BUILD-SNAPSHOT/spring-framework-reference/htmlsingle/#overview-maven-dependency-management。关于Hibernate的包引用,参考http:/hibernate.org/orm/documentation/getting-started/。其它依赖根据需要,逐一添加。以下提供Spring及Hibernate基本依赖: or

5、g.springframework spring-context 4.0.5.RELEASE commons-logging commons-logging org.springframework spring-context-support 4.0.5.RELEASE org.springframework spring-orm 4.0.5.RELEASE org.springframework spring-jdbc 4.0.5.RELEASE org.springframework spring-beans 4.0.5.RELEASE org.springframework spring

6、-aop 4.0.5.RELEASE org.springframework spring-webmvc 4.0.5.RELEASE org.springframework spring-web 4.0.5.RELEASE org.springframework spring-tx 4.0.5.RELEASE org.springframework spring-test 4.0.5.RELEASE org.springframework spring-expression 4.0.5.RELEASE org.springframework.data spring-data-jpa 1.6.0

7、.RELEASE org.slf4j jcl-over-slf4j 1.5.8 org.slf4j slf4j-api 1.5.8 org.slf4j slf4j-log4j12 1.5.8 log4j log4j 1.2.14 org.aspectj aspectjweaver 1.8.0 org.hibernate hibernate-entitymanager 4.3.5.Final javax.servlet javax.servlet-api 3.0.1 构建实体EMPEntityTable(name = EMP)public class Employee implements Se

8、rializable private static final long serialVersionUID = 1L; /* 雇员编号 */ Id Column(name = EMPNO) private Integer no; /* 雇员姓名 */ Column(name = ENAME, length = 10) private String name; /* 职位 */ Column(name = JOB, length = 9) private String job; /* 经理 */ ManyToOne JoinColumn(name = MGR) private Employee

9、manager; /* 员工 */ OneToMany(mappedBy = no) OrderBy(no ASC) private List employees; /* 雇佣日期 */ Column(name = HIREDATE) private Date hireDate; /* 工资 */ Column(name = SAL, precision = 7, scale = 2) private BigDecimal salary; /* 佣金 */ Column(name = COMM, precision = 7, scale = 2) private BigDecimal comm

10、ission; /* 部门 */ ManyToOne JoinColumn(name = DEPTNO) private Department department;DEPTpublic class Department implements Serializable private static final long serialVersionUID = 1L; /* 部门编号 */ Id Column(name = DEPTNO) private Integer no; /* 部门名称 */ Column(name = DNAME, length = 14) private String

11、name; /* 地址 */ Column(name = LOC, length = 13) private String location; public Integer getNo() return no; public void setNo(Integer no) this.no = no; public String getName() return name; public void setName(String name) this.name = name; public String getLocation() return location; public void setLo

12、cation(String location) this.location = location; Jpa实体的注解,需要注意以下几点:1、 必须要有一个无参的构造函数,如果你需要多个构造函数,那么这个无参的构造函数需要显示的指定,且它应该是protected或private。2、 枚举类型或者接口不能被指定为实体。3、 如果实体需要继承某个类的私有化持久状态(即拥有父类中标注有诸如Column的私有化属性),只需要在父类上标注MappedSuperclass即可。通常这样做的目的是,将一些表的公共字段部分抽取出来单独在一个类中声明,避免造成重复声明及类过度冗余。4、 如果实体类的主键是一个复

13、合主键,需要将作为复合主键的字段单独放在一个类里面。将这个复合主键类标注Embeddable,然后在实体类中引用这个复合主键类并标注EmbeddedId;或者跟一般的实体一样,在为主键的属性上标注Id,然后于实体类上标注IdClass指定复合主键类。具体如下示例Embeddable的形式Embeddablepublic class FeeKindPK implements Serializable private static final long serialVersionUID = -5793813579472602179L; /* 还款期数/贷款期限 */ Column(name = R

14、EPAY_PERIOD) private Integer repayPeriod; /* 合作机构编号 */ Column(name = MERCHANT_CODE, length = 100) private String merchantCode; /* 利费率 */ Column(name = FEE_KIND, length = 6) private String feeKind;EntityTable(name = VIEW_FEE_KIND)public class FeeKind implements Serializable private static final long

15、serialVersionUID = 1L; EmbeddedId private FeeKindPK pk; public FeeKindPK getPk() return pk; public void setPk(FeeKindPK pk) this.pk = pk; IdClass形式:public class LoanFileCheckPK implements Serializable private static final long serialVersionUID = 5884791330896732971L; private LoanApply loanApply;priv

16、ate Integer seqNo;EntityTable(name = LOAN_FILE_CHECK)IdClass(LoanFileCheckPK.class)public class LoanFileCheck implements Serializable private static final long serialVersionUID = 1L; /* 进件编号 */ Id ManyToOne JoinColumn(name = APPLICATION_NUMBER, foreignKey = ForeignKey(name = FK_FILE_CHECK_APPNUM) pr

17、ivate LoanApply loanApply; /* 序號 */ Id Column(name = SEQ_NO, columnDefinition = NUMBER(6,0) private Integer seqNo;需要注意的是,以下规则适用于复合主键类:1、 类的访问修饰符必须是public,必须有一个无参的公有的构造方法。2、 复合主键类必须被序列化,也就是实现Serializable接口。3、 重写hashCode和equals方法。4、 如果用IdClass的形式,主键类中的属性名称和类型必须和实体类中的属性名称和类型相同。5、 另外,如果实体类中在一个集合属性上引用One

18、ToMany的时候,可以用属性fetch=FetchType.LAZY表示集合是懒加载的,用mappedBy到实体类中的某个属性,表示由实体类的该属性来维护。标注OrderBy(“ , .”)来表示实体类下的该集合在加载时候的排序方式,可以有多个,用逗号隔开。如Employee类所示。持久层Repository接口Repositorypublic interface EmployeeRepository extends JpaRepository Repositorypublic interface DepartmentRepository extends JpaRepository 1、 我

19、们主要使用Spring Jpa实现对数据持久化的操作。使用Spring Jpa,只需要在接口中标注Repository,并声明需要使用到的接口方法,而不用真正的去实现它,因为Spring Jpa已经为我们提供了默认的接口实现类(SimpleJpaRepository)。2、 通过Repository注解表示该接口为数据持久化接口。并在Spring的配置文件中声明(需要引入jpa命名空间)来指定Repository所有的位置,这样它会自动被Spring容器扫描,初始化并管理。3、 一般地,Repository接口继承了JpaRepository。这个接口已经为我们提供了一些基本的常用的操作(增删

20、改查),比如通过主键获取实例findOne,获取所有的实例findAll等。详细请参考JpaRepository的API。现在,如果我们需要一个方法,根据指定的日期,查询出在这个日期之前入职的所有员工,那么我们只需要在EmployeeRepository中声明这样的一个方法: List findByHireDateLessThanEqual(Date hireDate);这样,在查询的时候,Spring Jpa就会自动为我们构建如下的jpql查询语句: Select e from Employee e where e.hireDate = ?1关于这一点,可以查看Spring Jpa的参考手册

21、,http:/docs.spring.io/spring-data/jpa/docs/1.6.0.RELEASE/reference/html/jpa.repositories.html 在这里仅列出方法中可使用的关键字:KeywordSampleJPQL snippetAndfindByLastnameAndFirstname where x.lastname = ?1 and x.firstname = ?2OrfindByLastnameOrFirstname where x.lastname = ?1 or x.firstname = ?2Is,EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals where x.firstname = 1?BetweenfindByStartDateBetween wher

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1