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

来源:互联网 发布:java 按键监听 编辑:程序博客网 时间:2024/06/05 17:44

搭建好框架后对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类型进行删除,仿照查询方法写就行了。

阅读全文
0 0
原创粉丝点击