发表于: 2017-12-30 01:23:52

2 492


本次写日报的时间晚了,拖到十二点以后写了,导致日期变成第二天了。

今天完成的内容:编写DAO,并用mapper代理的方法实现。

1、首先 根据所实现的需求编写DAO接口:

2、修改xml文件的部分配置,主要是命名的规范问题:

先编写“CategoryMapper.xml”:


这里要注意一点就是findByName的方法,返回的是一个装有Category的List,但是CategoryMapper.xml中对应的resultType类型是Category,这里要注意,resultType指定的是单个返回结果的类型,也就是一条记录的类型,即Category,但是这个findByName是返回很多Category,所以返回值是List<Category>。mybatis会自动根据返回值类型去调用不同的方法,如下:

如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne来查询数据库 

如果mapper方法返回一个集合对象,代理对象内部通过selectList来查询数据库



此外,要遵循四个开发规范:

在xxxMapper.xml中,使namespace等于对应接口的地址(完全限定名)

xxxMapper.xml中statement的id要和对应接口的方法名一致

xxxMapper.xml中statement的parameterType指定的类型和对应接口中方法的注入参数类型一致

xxxMapper.xml中resultType指定的类型和对应接口中方法的返回值类型一致(没有就是void)


然后加上新的xml文件的路径到全局配置中:

<mapper resource="mapper/CategoryMapper.xml"/>

在“mybatis-config.xml”文件的<mappers></mappers>间加上即可


3. 使用junit在测试类中进行单元格测试:


在测试的时候我发现了几个问题:

1.org.apache.ibatis.executor.ExecutorException异常,解释为No constructor found in com.xiuzhenyuan.model.Category matching 

然后我在被映射对象Category中加了一个无参构造方法就OK了

2.org.apache.ibatis.binding.BindingException异常的问题。

这个问题我百度了一下,找到了答案,是因为我违反了上述第二条开发规范,打错了一个字符。当然还可能由其他原因导致,可以参照:

http://blog.csdn.net/ppppfly/article/details/46847299

3.关于代理的思考,为什么使用Mybatis的时候不需要Impl类?在《Java编程思想》里面是这样子解释的:

其实代理这种设计模式,和Java面向接口的设计思想很有关系,通过解耦的方式使得代码更加灵活。


明天要学的东西:继续学习Mybatis


今天的收获:掌握了原始DAO的开发方法,稍微熟悉了用mybatis链接数据库。




返回列表 返回列表
评论

    分享到