前面的增、删、改、查程序,基本上套路都是一样,先加载配置文件SqlMapConfig.xml创建SqlSessionFactoryBuilder对象,然后使用SqlSessionFactoryBuilder对象得到SqlSessionFactory对象,接着使用SqlSessionFactory对象获取到sqlSession对象;通过sqlSession对象来操作数据库,操作完成后释放资源,如果是新增、修改、删除操作还需要在释放资源前提交会话。这些例子的实现过程中也有大量重复的模板代码可以提炼后简化。
首先,我们的SqlSessionFactory在应用中能够复用,应该实现为一个单例模式,只需要一个就好了。
其次,我们的SqlSessionFactoryBuilder用来创建SqlSessionFactory这个单例工厂类,它实现为一个工具类(静态)类就好了。
最后,我们的sqlSession类,它是面向开发用户的,它提供了操作数据库的方法和数据域(输入输出),因此它本身是线程不安全,通常它需要放在方法内或定义为局部变量使用。
原始的dao层开发方法指的是需要程序员写dao接口和dao接口的实现类。
首先,我们创建新的源码包,如下:
在这个包中,我们创建客户的接口,注意这里只有接口,还没有实现,对于中大型团队开发,提供接口后就可以让接口调用方使用了。
接下来,我们来写接口的实现类。在接口实现类中,首先要实现接口中的4个方法;其次,我们需要在实现类的构造函数里向dao实现类注入SqlSessionFactory,这样,实现类的方法中就能获得sqlSession后操作数据库。接口的实现和前面记录的增删改查逻辑是类似的,但是代码量和重复的模板方法少了很多,程序结构上也清晰了很多。
接着,我们开始验证我们这种方法的效果,首先创建一个test.MyBatis.dao的源文件夹,如下:
在接口实现类CustData上新建一个JuniTest case如下:
下一步选择要测试的4改方法,注意要勾选测试初始化方法setUp(),点击确定即可。
然后,我们的测试类定义了一个sqlSessionFacotry的成员变量,并在setUp()方法中通过配置文件初始化这个工厂类,后面具体的测试方法中,使用CustDao的接口方法直接调用并输出接口即可。
具体测试方法的执行结果和之前的预期一致,这里不再贴图了。
从上面的dao层开发可以看出,相比之前的增删改查实现,确实清晰、简单了很多,但原始dao开发方法,接口实现类方法中存在大量的模板方法可考虑提取出来减少工作量;调用sqlSession方法时将statement的id硬编码,不便于扩展;调用sqlSession方法时,由于参数值泛型,传参即使错误也无法在编译阶段中发现。如何彻底解决这些问题将在后续使用Mapper代理的方法中介绍。
领取专属 10元无门槛券
私享最新 技术干货