Spring Data JAP框架处理表关系的步骤:

1)确定表和表之间的关系

2)对应表创建实体类

3)在实体类配置注解关联关系

4)测试

一对一表关系的实现方案(主键关联:

1 在Customer实体类中添加属性CustomerExt类型,在CustomerExt实体类中添加属性Customer类型

2 并在属性上添加注释@OneToOne,代表是一对一

3 并在属性上添加@PrimaryKeyJoinColumn注解

小demo:

1)创建maven 工程(jar

2)导入依赖(pom.xml

    <properties><spring.version>4.2.4.RELEASE</spring.version><hibernate.version>5.0.7.Final</hibernate.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><c3p0.version>0.9.1.2</c3p0.version><mysql.version>5.1.6</mysql.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- junit单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- spring beg --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><!-- spring end --><!-- hibernate beg --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.1.Final</version></dependency><!-- hibernate end --><!-- c3p0 beg --><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>${c3p0.version}</version></dependency><!-- c3p0 end --><!-- log end --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.9.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.4.RELEASE</version></dependency><!-- el beg 使用spring data jpa 必须引入 --><dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>2.2.4</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>javax.el</artifactId><version>2.2.4</version></dependency><!-- el end --></dependencies>

3)整合框架(在src/main/resources下创建applicationContext.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"><!--1 员   dataSource  数据库连接池--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="root"/><property name="password" value="123456"/><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/springdatajpa9502"/></bean><!--2 工   工厂类对象--><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><!--配置数据源--><property name="dataSource" ref="dataSource"/><!--实体类的包扫描--><property name="packagesToScan" value="cn.zf.jpa.entity"/><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="showSql" value="true"/><property name="generateDdl" value="true"/><property name="database" value="MYSQL"/></bean></property></bean><!--3 是   事务配置--><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"/></bean><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--开启事物--><tx:method name="save*" propagation="REQUIRED"/><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="get*" read-only="true"/><tx:method name="find*" read-only="true"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="pointcut" expression="execution(* cn.zf.jpa.service.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/></aop:config><!--4 爹   dao的包扫描--><jpa:repositories base-package="cn.zf.jpa.dao" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
</beans>

4)创建实体(在src/main/java下创建实体类Customer和CustomerExt

Customer类:

package cn.zf.jpa.entity;// jpa的实体类
import javax.persistence.*;//配置实体类和数据库表的映射关系
@Entity
//@Table自动在数据库中创建该表 name属性的属性值是表名
@Table(name="cst_customer")
public class Customer {// 配置主键生成的策略(主键自增@GeneratedValue(strategy = GenerationType.IDENTITY)// 配置主键使用的字段@Id//@Column实体类与数据库字段名不一致时使用@Column(name="cust_id")private long custId;@Column(name="cust_name")private String custName;@Column(name="cust_source")private String custSource;@Column(name="cust_industry")private String  custIndustry;@Column(name="cust_level")private String custLevel;@Column(name="cust_address")private String custAddress;@Column(name="cust_phone")private String custPhone;/*在属性上添加@JoinColumnname:存外键字段referencedColumnName:对方表主键字段的名称(可以省略*///@JoinColumn(name="extid",referencedColumnName = "ext_id")//在属性上添加注释@OneToOne   代表是一对一@OneToOne@PrimaryKeyJoinColumnprivate CustomerExt customerExt;public CustomerExt getCustomerExt() {return customerExt;}public void setCustomerExt(CustomerExt customerExt) {this.customerExt = customerExt;}public long getCustId() {return custId;}public void setCustId(long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustSource() {return custSource;}public void setCustSource(String custSource) {this.custSource = custSource;}public String getCustIndustry() {return custIndustry;}public void setCustIndustry(String custIndustry) {this.custIndustry = custIndustry;}public String getCustLevel() {return custLevel;}public void setCustLevel(String custLevel) {this.custLevel = custLevel;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}public String getCustPhone() {return custPhone;}public void setCustPhone(String custPhone) {this.custPhone = custPhone;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custSource='" + custSource + '\'' +", custIndustry='" + custIndustry + '\'' +", custLevel='" + custLevel + '\'' +", custAddress='" + custAddress + '\'' +", custPhone='" + custPhone + '\'' +", customerExt=" + customerExt +'}';}
}

CustomerExt类:

package cn.zf.jpa.entity;import javax.persistence.*;//配置实体类和数据库表的映射关系
@Entity
//@Table自动在数据库中创建该表 name属性的属性值是表名
@Table(name="cst_customer_ext")
public class CustomerExt {// 配置主键生成的策略(主键自增@GeneratedValue(strategy = GenerationType.IDENTITY)// 配置主键使用的字段@Id//@Column实体类与数据库字段名不一致时使用@Column(name="ext_id")private long extId;private String memo;private String info;/*在属性上添加@JoinColumnname:存外键字段referencedColumnName:对方表主键字段的名称(可以省略*///@JoinColumn(name="custid")//在属性上添加注释@OneToOne   代表是一对一@OneToOne@PrimaryKeyJoinColumnprivate Customer customer;public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}public long getExtId() {return extId;}public void setExtId(long extId) {this.extId = extId;}public String getMemo() {return memo;}public void setMemo(String memo) {this.memo = memo;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}
}

5)测试:

CustomerDao接口代码:

/***  JpaRepository需要注意的  继承后里面的泛型*  第一个是实体类类型  第二个是该类主键的数据类型*/
public interface CustomerDao extends JpaRepository<Customer,Long> {}

CustomerExt接口代码:

/***  JpaRepository需要注意的  继承后里面的泛型*  第一个是实体类类型  第二个是该类主键的数据类型*/
public interface CustomerExtDao extends JpaRepository<CustomerExt,Long> {}

测试类代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDataJpaOneToOne {@Autowiredprivate CustomerDao customerDao;@Autowiredprivate CustomerExtDao customerExtDao;@Test@Transactional@Commitpublic void add(){//创建商品表对象Customer customer = new Customer();customer.setCustAddress("芬兰");customer.setCustName("极光");//创建拓展商品表对象CustomerExt customerExt = new CustomerExt();customerExt.setMemo("一月");customerExt.setInfo("芬兰一月极光");//配置对象的关联关系customer.setCustomerExt(customerExt);customerExt.setCustomer(customer);//把对象写入数据库customerDao.save(customer);customerExtDao.save(customerExt);}
}

over~

Spring Data JAP框架处理表关系的步骤(一对一主键关联相关推荐

  1. Spring Data JAP框架处理表关系的步骤(一对一外键关联

    Spring Data JAP框架处理表关系的步骤: 1)确定表和表之间的关系 2)对应表创建实体类 3)在实体类配置注解关联关系 4)测试 一对一表关系的实现方案(外键关联: 1 在Customer ...

  2. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  3. hibernate的一对一主键双向映射关系和外键双向映射关系(一)

    主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...

  4. Spring Data JPA实现多表的关联查询

    1.Spring Data JPA关系映射 对象关系映射(Object relational mapping)是指通过将对象状态映射到数据库列,来开发和维护对象和关系数据库之间的关系.它能够轻松处理( ...

  5. Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

    Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent  对一对多关系的处理以及在 Laravel Administra ...

  6. Spring认证中国教育管理中心-Spring Data Redis框架教程三

    原标题:Spring认证中国教育管理中心-Spring Data Redis框架教程三 10.15.支持类 Packageorg.springframework.data.redis.support提 ...

  7. Spring Data JPA 实现多表关联查询

    原文链接:https://blog.csdn.net/johnf_nash/article/details/80587204 多表查询在spring data jpa中有两种实现方式,第一种是利用hi ...

  8. SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建

    文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...

  9. 分库分表的 9种分布式主键ID 生成方案

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

最新文章

  1. 大工18秋《c c 语言程序设计》,大工18秋《毕业论文(设计)写作指导》在线测试1.txt...
  2. sudo及其配置文件sudoers
  3. 如何设置search parameter的默认operator
  4. spring技术小结
  5. group by用法多个字段_select的用法
  6. nagios监控mysql主从
  7. 虚函数virtual
  8. 知识点:计算机网络的 89 个核心概念
  9. Linux 更新 CPU microcode
  10. 部署Lync For 移动设备 一
  11. python支持多种编程范式吗_理解真格量化的Python编程范式
  12. TCP/IP常见英文缩写
  13. ARM7开发软件安装步骤
  14. 基于canvas图像处理的图片 灰色图像
  15. 推荐的前端开源项目CDN加速服务
  16. 机器学习读书笔记之决策树
  17. 鼠标悬停显示禁用图标
  18. 微软/谷歌浏览器之争落幕:Edge向Chrome认输了?
  19. 共享网络获取树莓派ip_从零开始:树莓派共享 WiFi 秒变无线热点(树莓派路由器...
  20. 网页突然乱码_网页中乱码怎么办?

热门文章

  1. Elasticsearch全文搜索引擎,从0到0.6
  2. 分数加法怎么用计算机算,加法分数计算器的运算符
  3. springboot生成 .docx的word文档
  4. [N32G45x]轻松几步将embOS移植到国民N32G45X上
  5. 小强的HTML5移动开发之路(5)——制作一个漂亮的视频播放器
  6. 黑马程序员—[.Net就业薪资] 四个班100%就业,.Net学科称霸黑马
  7. 计算机博士一年看多少篇文献,科学网—博士生真的需要一天看20篇文献吗? - 喻海良的博文...
  8. [GitHub开源]Android自定义View实现微信打飞机游戏
  9. Mac如何安装双系统
  10. java装修装饰公司订单管理系统ssm框架