九.Spring 实体管理器

一.
实体管理器:实体与数据库间桥梁,可把实体持久化到数据库,也可把数据库记录打包为实体。
这里写图片描述
基础映射:
dao层类 UserRepositoryImpl,spring配置文件通过其后缀知道它与接口UserRepository关系。在UserRepositoryImpl中注入一个

@PersistenceContext
    private EntityManager entityManager;
@Transactional
    public void add(User user) {
        entityManager.persist(user);

    }

add:entityManager.persist(user);
update:find(User.class, user.getId()),修改实体属性,返回实体
addOrUpdate:.merge(user)
delete:remove
高级映射:
一对一:Person对address,Person的address_id(外键)对应address的aid(主键)

@OneToOne(cascade={CascadeType.REFRESH,CascadeType.REMOVE},fetch=FetchType.LAZY)

一对多
depart:did ,name
depart_employee:depart_id ,employ_id
employee:eid, name

    @OneToMany
    @JoinTable(name = "depart_employee", 
        joinColumns = @JoinColumn(name = "depart_id",referencedColumnName="did"), 
        inverseJoinColumns = @JoinColumn(name = "employee_id",referencedColumnName="eid"))
    private List<Employee> employees;

另一种方法
在多端加一列:depart_id
配置:

class Depart2
@OneToMany
    @JoinColumn(name="depart_id",referencedColumnName="id")
    private List<Employee2> employee2s;

多对多:
student:sid,age,gender,height,name
teacher_student:teacher_id,student_id
teacher:tid,age,gender,height,name

class Teacher :
 @ManyToMany 
    @JoinTable(name = "teacher_student", 
        joinColumns = @JoinColumn(name = "teacher_id",referencedColumnName="tid"), 
        inverseJoinColumns = @JoinColumn(name = "student_id",referencedColumnName="sid"))
    private List<Student> students;
class Student:
@ManyToMany(mappedBy = "students") 
    private List<Teacher> teachers; 

实体映射:单一表策略,连接表策略,每个类策略

类策略不浪费空间,效率高:
book,phone都继承了父类item,子类父类的主键不重复

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Item {
/*  @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) */

  @Id   
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "ItemGenerator")
  @TableGenerator(name = "ItemGenerator",table="pk_generator",
                    pkColumnName="gen_name",
                    valueColumnName="gen_value",
                    pkColumnValue="item_pk",
                    initialValue=0,
                    allocationSize=1)
    private Long id; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值