最近想起来了数据增删改查的一些细节点操作,写出来做个记录吧
1.在增加查询或者修改数据时想默认添加一组数据的时候可以写下面的代码:
需求:只查询到state=1的数据
Specification<User> spec = new Specification<User>() {
// root:取当前对象的属性.as(属性中的类型) query:order,group cb:or and equles from
// User where state = 1
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
// TODO Auto-generated method stub
return cb.equal(root.get("state").as(Integer.class), 1);
}
};
List<User> userList = UserService.find(spec);//查询语句
2.修改了部分数据保存时,常规写法会导致其他没有修改的数据为null 使用下面的写法
//下面三段代码,可以避免修改后只修改自己修改了的数据,其他数据全为空,
//我们先查询数据在给其封装数据,只修改封装的数据,其他的都不会变化
User user = UserService.get(model.getId());先查询到要修改的数据的所有内容
user.setDept(model.getDept()); 再把修改后的数据赋值到这里面进行覆盖
user.getUserinfo().setName(model.getUserinfo().getName());
user.setState(model.getState());
UserService.saveOrUpdate(user); 最后调用修改方法修改即可
3.在通过对比数据后为某数据赋值;(一般写在service中)
需求:判断entity的id是否为新数据,如果为新数据给其的id赋值
UtilFuns.isEmpty(entity.getId()) :判断他是否为空。UtilFuns.isEmpty 的底层就是判断是否为空的,为空才会走这个方法
if(UtilFuns.isEmpty(entity.getId())){ // 判断修改或者新增
// user和userinfo的主键一致 为了一对一主键关联
String uid = UUID.randomUUID().toString();
entity.setId(uid);
entity.getUserinfo().setId(uid);
}else{
}
4.配置级联(需求:删除一个表的数据他后面与之关联的数据也会一起删除。)
1.需要在applicationContext.xml中配置文件
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
5.要想级联删除,新增 一对一的表格要在配置一对一关系是要写上这么一句
@OneToOne(cascade=CascadeType.ALL) cascade=CascadeType.ALL:代表级联保存和删除
6.在实现类中,,,多个实现类都有相同的话可以把相同数据重新设立一个类,让其他类继承他就是了,
但是其他实现类要继承这个类的话,这个类的有一个implements Serializable 为了让其他类把这个类的主页也继承上,还需要写上一段注解@MappedSuperclass。如果不写会找出只继承了数据而继承不来他的注解。