映射关系注解

Hibernate 关系映射注解

1.映射策略

  • 外键关联:两个表的关系利用一方的id关联在另一个表中。

  • 表关联:两个表的关系单独定义一个表中通过一个中间表来关联。

2.映射关系

  • 一对一:一个人一张身份证
  • 一对多:一个人出版了多本书
  • 多对多:老师和学生

3.映射相关注解

3.1. 关系声明
  • OneToOne 一对一
  • OneToMany 一对多
  • ManyToOne 多对一
  • ManyToMany 多对多
3.2. 级联操作 Cascade
  • PERSIST 级联保存
  • REMOVE 级联删除
  • REFRESH 级联刷新(查询)
  • MERGE 级联更新合并
  • ALL 级联所有操作

4.实例

4.1.OneToOne

people表

@Entity
@Data
public class People {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;

    /**
     * 默认会把one一方的主键关联
     */
    @OneToOne
    private IdCard idCard;
}

IdCard表

@Entity
@Data
public class IdCard {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String num;
}

表一对一  people-idcard

4.1.OneToMany

drug表

@Entity
@Data
public class Drug {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String price;

    private String num;
}

patient表

@Entity
@Data
public class Patient {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;//患者姓名

    private Integer age;//年龄

    /**
     * 表关联一对多
     * 一个患者对应多种药
     * 外键关联 字段为patient_id 外键在drug表中
     */
    @OneToMany(cascade = {CascadeType.ALL})
    @JoinColumn(name="patient_id")
    private List<Drug> drugs;
}

表一对多  drug-patient

4.3.ManyToOne

drugA表

@Entity
@Data
public class DrugA {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String price;

    private String num;

    /**
     * 默认会把one一方的主键关联
     */
    @ManyToOne
    private PatientA patientA;
}

patientA表

@Entity
@Data
public class PatientA {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;//患者姓名

    private Integer age;//年龄
}

参考一对多

4.3.ManyToMany

teacher表

@Entity
@Data
public class Teacher {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;//

    private Integer age;//

    /**
     *表关联
     */
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "teacher_student", joinColumns = @JoinColumn(name = "student_id"),inverseJoinColumns = @JoinColumn(name = "teacher_id"))
    private List<Student> students;
}

student表

@Entity
@Data
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;
}

外表关联
表多对多  teacher-student

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 是一款流行的持久层框架,它通过 XML 配置文件或注解的方式来定义 SQL 语句和映射关系。以下是一个简单的 MyBatis 映射关系示例: 1. 定义实体类 ```java public class User { private int id; private String username; private String password; // getter and setter } ``` 2. 定义映射文件 在映射文件中,我们定义了 SQL 语句以及实体类属性和数据库中字段的映射关系。 ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.entity.User"> select * from user where id = #{id} </select> </mapper> ``` 在这个映射文件中,我们使用了`select`标签来定义查询语句,其中`resultType`属性指定了查询结果对应的实体类。`#{id}`示使用占位符来动态传入参数。 3. 定义 Mapper 接口 ```java public interface UserMapper { User getUserById(int id); } ``` 在 Mapper 接口中,我们定义了与映射文件中 SQL 语句相对应的方法,方法名和参数必须与映射文件中的定义一致。然后,我们可以使用 MyBatis 提供的 SqlSessionFactory 来获取 SqlSession 对象,从而执行 SQL 查询。 ```java SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.getUserById(1); ``` 以上就是一个简单的 MyBatis 映射关系示例。在实际应用中,我们可以通过映射文件和 Mapper 接口来定义复杂的 SQL 语句和实体类属性与数据库字段之间的映射关系

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值