springdata_多表关系中的一对一__小案例

一、创建maven工程,引入依赖,设置配置文件

依赖和配置文件的设置可以参考,之前的博客《springdata__jpa》

二、创建实体类

1.customer类

package cn.dzl.jpa.entity;

import javax.persistence.*;

@Entity@Table(name = "cust_customer")public class Customer {    //设置主键自增策略    @GeneratedValue(strategy = GenerationType.IDENTITY)    @Id    private long custId;    private String custName;    private String custSource;    private String  custIndustry;    private String custLevel;    private String custAddress;    private String custPhone;

    @PrimaryKeyJoinColumn//主键关联    @OneToOne(cascade = CascadeType.ALL)//设置联级关联,效果是,两个有关联的表,可以单独地改变其中一个表    private CustomerExt ext; //该字段表明关联的是哪个表对象

    public CustomerExt getExt() {        return ext;    }

    public void setExt(CustomerExt ext) {        this.ext = ext;    }

    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;    }

    @Override    public String toString() {        return "Customer{" +                "custId=" + custId +                ", custName=‘" + custName + ‘\‘‘ +                ", custSource=‘" + custSource + ‘\‘‘ +                ", custIndustry=‘" + custIndustry + ‘\‘‘ +                ", custLevel=‘" + custLevel + ‘\‘‘ +                ", custAddress=‘" + custAddress + ‘\‘‘ +                ", custPhone=‘" + custPhone + ‘\‘‘ +                ‘}‘;    }}

2.CustomerExt类
package cn.dzl.jpa.entity;

import javax.persistence.*;

@Entity@Table(name = "customer_ext")public class CustomerExt {    @Id//该注解在哪一个字段上,哪个字段就是主键    @GeneratedValue(strategy = GenerationType.IDENTITY)//设置主键为自增状态    private long extId;    private String memo;    private String info;    @PrimaryKeyJoinColumn//该注解表明两个表之间是主键关联    @OneToOne//两个表之间的关系是一对一    private 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;    }

    @Override    public String toString() {        return "CustomerExt{" +                "extId=" + extId +                ", memo=‘" + memo + ‘\‘‘ +                ", info=‘" + info + ‘\‘‘ +                ‘}‘;    }}

三、创建dao接口(一定要继承JpaRepository<实体类型,主键类型>)

1.CustomerDao
package cn.dzl.jpa.dao;

import cn.dzl.jpa.entity.Customer;import org.springframework.data.jpa.repository.JpaRepository;

public interface CustomerDao extends JpaRepository<Customer,Long> {}

2.CustomerExtDao
package cn.dzl.jpa.dao;

import cn.dzl.jpa.entity.CustomerExt;import org.springframework.data.jpa.repository.JpaRepository;

public interface CustomerExtDao extends JpaRepository<CustomerExt,Long> {}

四、测试类OneToOne
package cn.dzl;

import cn.dzl.jpa.dao.CustomerDao;import cn.dzl.jpa.dao.CustomerExtDao;import cn.dzl.jpa.entity.Customer;import cn.dzl.jpa.entity.CustomerExt;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.annotation.Commit;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class OneToOne {    @Autowired    CustomerDao customerDao;    @Autowired    CustomerExtDao customerExtDao;    @Test    //更改数据库,需要用到事物    @Transactional    //提交    @Commit    public void addCustomer(){        //创建customer对象        Customer customer = new Customer();        customer.setCustName("丁老大");        customer.setCustAddress("北京");        //创建customerExt对象        CustomerExt customerExt = new CustomerExt();        customerExt.setInfo("今天心情不错");        customerExt.setMemo("打球去");        //设置对象关联关系        customer.setExt(customerExt);        customerExt.setCustomer(customer);        //调用dao层方法保存到数据库中        customerDao.save(customer);//        customerExtDao.save(customerExt);    }}


原文地址:https://www.cnblogs.com/Hubert-dzl/p/11665058.html

时间: 2024-11-06 13:22:50

springdata_多表关系中的一对一__小案例的相关文章

DUBBO+Zookeeper在Centos7中本地搭建及小案例

环境: 1.centos7 2.jdk-7u76-linux-x64.tar.gz 2.tomcat:apache-tomcat-7.0.59.tar.gz 3.zookeeper-3.4.6.tar.gz 4.dubbo-admin-2.5.3.war 具体的流程: 第一步:安装jdk,并且配置环境变量(*) xshell5命令: 1.解压jdk: tar xvf jdk-7u76-linux-x64.tar.gz 1 2.提取权限: chmod–R 777 /usr/local/java/j

一对多的表关系 查询出一对一的显示

创建2张表  Table_A 和 Table_B  关系是一对多,   表Table_A.Id = Table_B.aId CREATE TABLE [dbo].[Table_A]( [Id] [char](36) NULL, [column1] [nvarchar](50) NULL, [column2] [nvarchar](50) NULL) ON [PRIMARY] CREATE TABLE [dbo].[Table_B]( [Id] [char](36) NULL, [aId] [ch

PHP中代理函数调用的小案例

简单写一个小例子就明白了 例:在文本框内输入字符串并用逗号隔开,然后点击提交会自动消除逗号拼接在一起. 像这样 点击提交过去返回12345 这个小例子就用到代理函数调用,先说一下这个函数名 call_user_func_array(); call_user_func_array('要调用的函数名','调用的值'); 先写提交表单: <form method=post action="test.php"> 输入一个字符串,用逗号隔开: <input type="

关于js中的事件委托小案例

需求:页面上有一个按钮,和一个空的ul,要求点击按钮,会给ul中动态添加li元素,然后,点击动态添加的元素,在控制台上输出,这是第几个元素 <ul> </ul> <button>点击增加</button> var ul = document.querySelector('ul'); var btn = document.querySelector('button'); //动态添加元素 btn.addEventListener('click',functio

2019.09.24学习整理 数据库的字段操作、多表关系、外键

目录 字段操作 多表关系 外键 一对一 无级联关系 有级联关系 一对多 多对多 数据库的字段操作.多表关系.外键 字段操作 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 modify x char(4) default ''; alter table tf1 change y m char(4) default ''; #增加 mysql>: alter table

Hibernate多表关系配置——一对一关系映射

两个对象之间是一对一的关系,如Person-IdCard 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联 唯一外键关联 外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系: 1.实体对象 1.1 Person实体对象 package demo.entity; /** * 人实体 * @author Don * @date:日期:2

Hibernate中的一对一映射关系

Hibernate中的一对一映射关系有两种实现方法(一对一关系:例如一个department只能有一个manager) I使用外键的方式 步骤:1在一对一关联的持久化类中互相添加对方对象属性,   例如在department中添加private manager manager属性:   department代码如下: package com.atguigu.hibernate.one2one.foreign; public class Department { private Integer d

表关系(一对一,一对多,多对多)

可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的. 在一个关系型数据库中,利用关系可以避免多余的数据.例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名.出版日期和出版社.您也可能保存有关出版社的信息,诸如出版社的电话.地址和邮政编码.如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码. 更好的方法是将有关出版社的信息在单独的表,publ

058:表关系之一对一

表关系之一对一应用场景: 比如一个用户表和一个用户信息表.在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的.如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做UserInfo.但是用户表User和用户信息表UserInfo就是典型的一对一了. 实例代码如下: # models.py文件内容: class User(models.Model): username = models.CharField(max_length=