项目学习

项目学习

1.部门(所有子部门的查询)   递归

/**
 * findByPid
 * @param id
 * @return
 */
List<Dept> findByPid(Long id);
public List<Long> getDeptChild(List<Dept> deptList) {
    List<Long> list = new ArrayList<>();
    deptList.forEach(dept -> {
                if (dept!=null){//这里还可以添加限制
                    List<Dept> depts = deptService.findByPid(dept.getId());
                    if(deptList!=null && deptList.size()!=0){
                        list.addAll(getDeptChild(depts));
                    }
                    list.add(dept.getId());
                }
            }
    );
    return list;
}



    public List<Long> getDeptChildren(List<Dept> deptList) {
        List<Long> list = new ArrayList<>();
        deptList.forEach(dept -> {
                    if (dept!=null && dept.getEnabled()){
                        List<Dept> depts = deptService.findByPid(dept.getId());
                        if(deptList!=null && deptList.size()!=0){
                            list.addAll(getDeptChildren(depts));
                        }
                        list.add(dept.getId());
                    }
                }
        );
        return list;
    }

2.缓存Redis

Spring使用Cache、整合Ehcache        https://blog.csdn.net/weixin_30239339/article/details/95456815

springboot(7)集成缓存技术之Redis https://blog.csdn.net/zhaocuit/article/details/84030055

 

3.懒加载与级联操作

3.1@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)//三种与5种

3.2@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段. 
fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存 
cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新删除 

3.3   cascade属性的可能值 https://blog.csdn.net/qq_32953079/article/details/53858728

3.4   fetch = FetchType.EAGER  https://blog.csdn.net/sunqing0316/article/details/43852501

3.5   Hibernate延迟加载策略, 也就是用到的时候才去加载.这样可以提高一些性能.

Hibernate的lazy loading 采用了一个HibernateSession来管理session,它的逻辑是每进行一次数据库操作,就开新的session,操作完成后立即关闭该session。这样做的好处是可以严格关闭session,避免菜鸟级的错误,但是并不推荐这么做。因为这不适合lazy loading,也不适合跨方法的事务。

比如在我们的应用中,user->article 形成一对多的映射,User 中有一个包含 article 的List。

在User中,有多个属性:name,password,phone等,还有一个 List 类型的 articleList。当我们对 article 使用 lazy laoding 的时候,hibernate会在获得 User 对象的时候,仅仅返回 name,password,phone 等基本属性,当你访问 articleList 的时候,它才会从数据库中提取 articleList 需要的数据,这就是所谓lazy laoding。但是在我们的系统中,session是被立即关闭的,也就是在读取了name,password,phone等基本属性后,session 已经 close了,再进行 lazy loaiding 就会有异常。

3.6  spring data  jpa  多对多关系  

https://www.cnblogs.com/hhhshct/p/9492741.html   spring data jpa关联查询(一对一、一对多、多对多)

https://www.cnblogs.com/xwgcxk/p/9712153.html      Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题

https://www.jianshu.com/p/3258bc2b2d26   Spring Data JPA中常见的关系映射之一对多关系

 

3.7级联

https://www.cnblogs.com/fuzhihong0917/p/6653847.html   Hibernate 一对一、一对多、多对多注解mappedBy属性的总结

oneToone级联添加 (Spring  Data  Jpa):

1.控制层处理
BankCardEntry bankCardEntry=user.getBankCardEntry();
bankCardEntry.setUser(user);
bankCardRepository.save(bankCardEntry);
return userMapper.toDto(userRepository.save(user));
2.实体写法(两边级联)

user实体

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "BANK_ID")
private BankCardEntry bankCardEntry;

bankCardEntry实体

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;

 

 

@Override//jpa分页使用
public Object queryAll(Pageable pageable) {
    Page p=projectRepository.findAll(new Specification<ProjectEntry>() {
        @Override
        public Predicate toPredicate(Root<ProjectEntry> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
            Predicate predicate = cb.conjunction();
            predicate = cb.and(predicate, cb.notEqual(root.get("status"), "8"));
            return predicate;
        }
    }, pageable);
    return  p;
}

 

https://blog.csdn.net/qq373223330/article/details/91527768      一些优秀·的项目

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值