spring data jpa 定义全局接口BaseDao

本文介绍如何创建一个自定义的BaseDao接口及其实现BaseDaoImpl,通过继承JpaRepository和JpaSpecificationExecutor来复用Spring Data JPA的功能,并提供额外的自定义方法。此外,还展示了如何配置自定义的BaseDaoFactoryBean以便在项目中统一使用。
部署运行你感兴趣的模型镜像

原文来自:http://blog.youkuaiyun.com/yingxiake/article/details/51017797

好,现在我要搭一个项目,我想定义一个BaseDao,然后直接让其他模块的dao直接继承我这个BaseDao,BaseDao有通用的方法也有spring data jpa提供的便捷方法

那就新建一个BaseDao呗,这个BaseDao应该是继承JpaRepository,JpaSpecificationExecutor因为我们想用spring data jpa,然后你再定义自己一些常用方法,例如myMethod

@NoRepositoryBean
public interface BaseDao<T,ID extends Serializable> extends JpaRepository<T, ID>,JpaSpecificationExecutor<T> {

    void myMethod();

}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下来应该就是实现了

public class BaseDaoImpl<T,ID extends Serializable> extends SimpleJpaRepository<T, ID> implements BaseDao<T,ID>{

    private final EntityManager em; 

    public BaseDaoImpl(Class<T> domainClass, EntityManager em) {
        super(domainClass, em);
        this.em = em; 
    }


    @Override
    public void myMethod() {



    }

}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

继承于SimpleJpaRepository不单可以让我们获取操作数据库的EntityManager ,还可以实现JpaRepository,JpaSpecificationExecutor的方法,这样我们就可以只写我们自己方法的实现

接下来再定义下factory,他的作用是将我们的basedao的实现类扔给factorybean

public class BaseDaoFactory<S, ID extends Serializable> extends JpaRepositoryFactory {

    public BaseDaoFactory(EntityManager entityManager) {
        super(entityManager);
    }

    @SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
    @Override
    protected <T, ID extends Serializable> SimpleJpaRepository<?, ?> getTargetRepository(RepositoryMetadata metadata,
            EntityManager entityManager) {
        // TODO Auto-generated method stub
        return new BaseDaoImpl(metadata.getDomainType(), entityManager);
    }

    @Override
    protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
        // TODO Auto-generated method stub
        return BaseDao.class;
    }

}

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

然后再定义一个factorybean,接到factory之后,把factory扔了spring data jpa

public class BaseDaoFactoryBean<R extends JpaRepository<S, ID>, S, ID extends Serializable>
        extends JpaRepositoryFactoryBean<R, S, ID> {

    @SuppressWarnings("rawtypes")
    @Override
    protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
        // TODO Auto-generated method stub
        return new BaseDaoFactory(entityManager);
    }

}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

spring data jpa来接了,在配置文件配置自己定义的FactoryBean,这样就可以直接使用你的baseDao了

<jpa:repositories base-package="com.liuxg.**.dao"
        repository-impl-postfix="Impl" 
        query-lookup-strategy = "create-if-not-found"
        factory-class="com.liuxg.base.dao.BaseDaoFactoryBean"
        entity-manager-factory-ref="entityManagerFactory"
        transaction-manager-ref="transactionManager" >
    </jpa:repositories>
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后下次我们要用,就这样子用

public interface TaskDao extends BaseDao<Task,Long>{

}
 
  • 1
  • 2
  • 3

在service层,你就可以用spring data jpa的方法和自己定义的一些通用方法了,如果你还想在自己模块再定义一些方法,那参考 
http://blog.youkuaiyun.com/yingxiake/article/details/51017699 
然后我们就这么写

public interface TaskDao extends BaseDao<Task,Long>,TaskDaoCustom<Task, Long>{

}

 
  • 1
  • 2
  • 3
  • 4

然后,毕竟有一些东西,框架还是帮我们不了啊,太复杂的业务,想自己写操作数据库,想自己写sql原生语句,那咋办啊,亲,那就只能利用EntityManager了,利用jpa api直接自己干了,下次看看怎么用EntityManager自己干活了


您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

需求描述: 1.在本项目框架下,构建一个树形结构数据对象User。 包括增删改查,User对象应至少包含账号、密码、姓名、性别、生日、身份证号等信息。新增修改时应做必要的前端校验。 账号:必填,长度3~20位,只允许字母数字下划线,唯一 密码:必填,长度8到16位,只允许字母数字下划线 姓名:必填 性别:只能选择男女 生日:非必填,有效的日期格式 身份证:非必填 2.查询包括按重要属性筛选功能。至少包括账号、姓名、性别三项查询项。支持账号或姓名模糊查询。 3.查询需按创建时间逆序排序,最近创建者排名靠前 4.查询需要实现分页功能 5.可批量删除用户。所有删除操作前必须有提示确认框。 6.密码需密文存储,加密方式采用sha1加密。禁止明文显示。 规范: 1.必须遵循阿里巴巴JAVA开发手册(嵩山版) 2.前端页面jsp文件统一放在/src/main/webapp/WEB-INF/views/main目录 3.前端显示要求使用系统提供的bootstrap框架。 4.前端校验要求使用jquery-validation框架。 5.java代码组织规范: A.model要求继承自AbstractEntity,dao要求继承自BaseDao,service要求接口实现分开,分别继承BaseService和AbstractBaseServiceImpl B.controller要放在org.test.demo.user.web包 C.持久化操作应遵循JPA规范 参考: 阿里巴巴JAVA开发手册(嵩山版):https://edu.aliyun.com/certification/cldt02 bootstrap参考:https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html jquery-validate参考:https://www.runoob.com/jquery/jquery-plugin-validate.html
最新发布
12-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值