若依系统作为经典的后台管理框架,凭借基础功能完备的优势成为许多开发者的首选,但在技术迭代与个性化需求适配方面逐渐显现短板。尤其是 springDataJPA 作为简化数据访问层开发的利器,其高效的 CRUD 操作、灵活的查询构造能力,深受追求开发效率的团队青睐,而原生若依系统缺乏对这一技术的原生支持,导致开发者需额外投入大量时间进行定制化改造,不仅延长项目周期,还可能引入潜在的兼容性问题。

ElementAdmin 精准洞察这一行业痛点,在保留若依系统核心优势的基础上,完成了从技术底层到功能体验的全面升级,重点实现了 springDataJPA 的深度集成。这意味着开发者无需再进行复杂的适配工作,可直接基于 ElementAdmin 快速搭建支持 springDataJPA 的后台系统,借助其强大的 ORM 映射能力,大幅减少数据访问层代码编写,让开发重心聚焦于核心业务逻辑。无论是简单的数据查询还是复杂的多表关联操作,都能通过简洁的 API 实现,开发效率提升看得见。

除了突破性的 springDataJPA 支持,ElementAdmin 的技术实力更是无可挑剔。采用 Vue3、ElementPlus、Vite、Pinia、Sass 最新技术栈,搭配组合式 API 开发模式,不仅运行速度更快、性能更稳定,还能完美适配现代前端开发的技术需求。系统支持完整的登录鉴权、Token 获取与刷新机制,模块化的开发架构让代码结构清晰,加上详细的源码注释,即使是新手也能快速上手,轻松实现二次开发。

如果你还在为若依系统不支持 springDataJPA 而烦恼,还在为陈旧技术栈导致的开发低效而焦虑,不妨试试 ElementAdmin 带来的全新体验。

现在访问演示地址 https://www.eleadmin.cn

上代码:

pom.xml 添加jpa依赖

 <!-- Spring Data JPA -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>2.5.15</version>
            </dependency>

把项目中所有的 mytatis 实现类都进行修改,我拿一个方法举例

public interface ISysDeptService
{
    /**
     * 查询部门管理数据
     * 
     * @param dept 部门信息
     * @return 部门信息集合
     */
    public List<SysDeptDto> selectDeptList(SysDeptDto dept);

    /**
     * 查询部门树结构信息
     * 
     * @param dept 部门信息
     * @return 部门树信息集合
     */
    public List<TreeSelect> selectDeptTreeList(SysDeptDto dept);

    /**
     * 构建前端所需要树结构
     * 
     * @param depts 部门列表
     * @return 树结构列表
     */
    public List<SysDeptDto> buildDeptTree(List<SysDeptDto> depts);

    /**
     * 构建前端所需要下拉树结构
     * 
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildDeptTreeSelect(List<SysDeptDto> depts);

    /**
     * 根据角色ID查询部门树信息
     * 
     * @param roleId 角色ID
     * @return 选中部门列表
     */
    public List<Long> selectDeptListByRoleId(Long roleId);

    /**
     * 根据部门ID查询信息
     * 
     * @param deptId 部门ID
     * @return 部门信息
     */
    public SysDeptDto selectDeptById(Long deptId);

    /**
     * 根据ID查询所有子部门(正常状态)
     * 
     * @param deptId 部门ID
     * @return 子部门数
     */
    public int selectNormalChildrenDeptById(Long deptId);

    /**
     * 是否存在部门子节点
     * 
     * @param deptId 部门ID
     * @return 结果
     */
    public boolean hasChildByDeptId(Long deptId);

    /**
     * 查询部门是否存在用户
     * 
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkDeptExistUser(Long deptId);

    /**
     * 校验部门名称是否唯一
     * 
     * @param dept 部门信息
     * @return 结果
     */
    public boolean checkDeptNameUnique(SysDeptDto dept);

    /**
     * 校验部门是否有数据权限
     * 
     * @param deptId 部门id
     */
    public void checkDeptDataScope(Long deptId);

    /**
     * 新增保存部门信息
     * 
     * @param dept 部门信息
     * @return 结果
     */
    public int insertDept(SysDeptDto dept);

    /**
     * 修改保存部门信息
     * 
     * @param dept 部门信息
     * @return 结果
     */
    public int updateDept(SysDeptDto dept);

    /**
     * 删除部门管理信息
     * 
     * @param deptId 部门ID
     * @return 结果
     */
    public int deleteDeptById(Long deptId);
}
/**
     * 查询部门管理数据
     * 
     * @param dept 部门信息
     * @return 部门信息集合
     */
    @Override
    @DataScope(deptAlias = "d")
    @Transactional(readOnly = true)
    public List<SysDeptDto> selectDeptList(SysDeptDto dept)
    {
        Specification<SysDept> spec = (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            
            if (dept.getDeptId() != null) {
                predicates.add(cb.equal(root.get("deptId"), dept.getDeptId()));
            }
            if (dept.getParentId() != null) {
                predicates.add(cb.equal(root.get("parentId"), dept.getParentId()));
            }
            if (StringUtils.isNotEmpty(dept.getDeptName())) {
                predicates.add(cb.like(root.get("deptName"), "%" + dept.getDeptName() + "%"));
            }
            if (StringUtils.isNotEmpty(dept.getStatus())) {
                predicates.add(cb.equal(root.get("status"), dept.getStatus()));
            }
            // 默认不查询删除的数据
            predicates.add(cb.equal(root.get("delFlag"), "0"));
            
            return cb.and(predicates.toArray(new Predicate[0]));
        };
        
        // 获取分页参数
        PageDomain pageDomain = PageUtils.getPageDomain();
        
        if (pageDomain != null && pageDomain.getPageNum() != null && pageDomain.getPageSize() != null) {
            // 使用 JPA 分页
            int pageNum = pageDomain.getPageNum() - 1;
            int pageSize = pageDomain.getPageSize();
            
            Pageable pageable = PageRequest.of(pageNum, pageSize);
            Page<SysDept> page = deptRepository.findAll(spec, pageable);
            
            // 设置总数到 ThreadLocal
            JpaPageUtils.setPageInfo(page);
            
            return page.getContent().stream()
                    .map(jpa -> EntityConverter.convert(jpa, SysDeptDto.class))
                    .collect(Collectors.toList());
        } else {
            // 不分页查询
            return deptRepository.findAll(spec).stream()
                    .map(jpa -> EntityConverter.convert(jpa, SysDeptDto.class))
                    .collect(Collectors.toList());
        }
    }

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐