(crm笔记1-7)搭建好框架后对dao层进行功能扩充

本文介绍在已搭建好的框架基础上,如何逐步完善DAO层的功能,包括新增update和find方法,并通过测试确保功能正确。

搭建好框架后对dao层进行功能扩充



在搭建好框架后,因为搭建框架时候只使用了一个方法进行测试,现在已经测试框架是成功的,所以需要重新编写其他的增删改查等方法。

之前写的方法只是保存也就是增加。现在把查询和修改等等补全。
直接在testSysUserGroupDao.java中增加测试方法,逆着进行方法的补全。



1.添加update方法



    @Test
    public void testUpdate() {
        ISysUserGroupDao sysUserGroupDao = (ISysUserGroupDao) ctx.getBean(ISysUserGroupDao.SERVICE_NAME);
//插入数据
        SysUserGroup sysUserGroup = new SysUserGroup();
        sysUserGroup.setId(5);
        sysUserGroup.setIncumbent("更新销售部");
        sysUserGroup.setName("李四");
        sysUserGroup.setPrincipal("张三");
        sysUserGroup.setRemark("no remark");

        sysUserGroupDao.update(sysUserGroup);
    }

这里会报错,因为在sysUserGroupDao.update(sysUserGroup);中没有update这个方法,所以进入到ICommonDao层,添加update接口,

void update(T entity);



增加后,在CommonDaoImpl实现类中增加update的实现方法:

    @Override
    public void update(T entity) {
        super.getHibernateTemplate().update(entity);
    }



运行测试成功!



2.添加find方法



添加查询方法有点复杂,因为查询一般是通过id查询,而数据库中的id一般有很多中存储方式,integer,String ,long等等类型,下面解决这个问题:

利用Serializable,这个类型兼容很多中数据类型



同样先写测试类,逆向进行方法的补全:

    @Test
    public void testFindSysUserGroupById() {
        ISysUserGroupDao sysUserGroupDao = (ISysUserGroupDao) ctx.getBean(ISysUserGroupDao.SERVICE_NAME);
//插入数据
        Serializable id=1;//使用这个类型可以涵盖多种数据类型进行查询

        SysUserGroup sysUserGroup= sysUserGroupDao.findObjectById(id);
        System.out.println(sysUserGroup.toString());
    }



这里需要补全的方法有:

findObjectById(id)



所以在ICommonDao中添加:

T findObjectById(Serializable id);



实现类中添加:

    @Override
    public T findObjectById(Serializable id) {
        if(id==null){
            throw new RuntimeException("您要查找的id不能为空");
        }
        return (T)this.getHibernateTemplate().get(entityClass,id);
    }



这里需要输入一个entityClass,而这个类需要进行反射获取父类的类型,获取方式为:

        ParameterizedType type= (ParameterizedType) classzz.getGenericSuperclass();     
        Class entityClass = (Class) type.getActualTypeArguments()[0];



所以编写一个工具类,在com.huiyu.crm.util包中添加:GenericClass
目的用来获取父类的泛型类型

    public static Class getGenericClass(Class classzz) {

        ParameterizedType type= (ParameterizedType) classzz.getGenericSuperclass();     
        Class entityClass = (Class) type.getActualTypeArguments()[0];
        return entityClass;
    }



然后在CommonDaoImpl.java实现类中调用这个方法即可;
定义一个私有对象:

private  Class entityClass = GenericClass.getGenericClass(this.getClass());


把这个entity传给findObjectById方法即可。 这样就可以在测试类中查询需要的id数据,如果查询需要在控制台显示出查询的数据



需要在javabean中对应的bean类添加toString方法。

    @Override
    public String toString() {
        return "SysUserGroup [id=" + id + ", remark=" + remark + ", name="
                + name + ", principal=" + principal + ", incumbent="
                + incumbent + "]";
    }



其他删除功能也是类似,把相同的id作为serializable类型进行删除,仿照查询方法写就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值