本文讲述java 使用注解的方式达到数据的持久化方法
数据持久化
数据查询
数据到DB的映射(ORM)框架完成,如:Hibernate、iBatis、TopLink
one to one 1对1的数据对应关系,举个例子一个会员有基本信息,住址信息。但是一个会员只有一个基本信息,一个住址信息。这里的基本信息表和住址表就是onetoone 的关系
一、建立会员实体类
@Entity // name phone 唯一 @Table(name = "tb_member",uniqueConstraints = {@UniqueConstraint(columnNames = {"name","phone"})}) public class MemberEntity extends BaseEntity<Long> { /** * 会员名 */ @Column(name = "name") // 默认会自动用变量名、可省略 private String name; /** * 手机号 */ @Column(name = "phone") private String phone; /** * 会员年龄 */ @Column(name = "age") private int age; // 通过注解的方式告诉框架 这个是one to one 的关系 @OneToOne @JoinColumn(name="address_id") private AddressEntity address; // ... getter & setter function }
在需要建立关系的地方使用onetoone 注解标注 一个关系映射实体。通过joincolum标注外键字段(address_id 见名知意,就是地址表的主键id)
关于@onetoone @joincolum 注解大家可以去看看他们的源码属性。它们只是一种解释性语法。
二、建立地址实体类
@Entity @Table(name="tb_member_address") public class AddressEntity extends BaseEntity<Long> { /** * 会员地址 */ @Column(name="address") private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
OneToOne的被关联实体类就很简单啦,和普通的Entitiy 没啥区别
如上关系已经完全建立,接下来测试一下。
三、save
1、先保存地址实体获得其DB分配的id
2、保存会员实体将保存的地址实体赋值给会员实体即可(注解已经帮我们建立好了关系)
保存地址实体 // 这个就一个接口类 /* public interface AddressEntityRepository extends BaseRepository<AddressEntity,Long> { }*/ @Autowired private AddressEntityRepository addressEntityRepository; public AddressEntity save(){ AddressEntity addressEntity = new AddressEntity(); addressEntity.setAddress("**市-**市"); addressEntity = addressEntityRepository.save(addressEntity); return addressEntity; }
保存会员实体 // service 实现了如上的save()方法 @Autowired private AddressEntityService addressEntityService; public void save(){ AddressEntity addressEntity = addressEntityService.save(); MemberEntity memberEntity = new MemberEntity(); memberEntity.setName("aaa"); memberEntity.setAge(10); memberEntity.setPhone("11111111111"); memberEntity.setAddressEntity(addressEntity); memberEntityRepository.save(memberEntity); }
会员表
会员地址信息表
四、search
public MemberEntity search(){ String jql = "select a from MemberEntity a where a.name=?1"; return memberEntityRepository.findOne(jql,"aaa"); }
查询结果: