Mybatis学习日记三(Mybatis开发dao的方法)
Mybatis开发dao的方法
·SqlSession的使用范围
1、SqlSessionFactoryBuilder
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory,将SqlSessionFactoryBuilder当成一个工具类使用,不使用单利管理,在需要创建工厂SqlSessionFactory的时候,只需要new一次SqlSessionFactoryBuilder即可。
2、SqlSessionFactory
通过SqlSessionFactory创建SqlSession,使用单利模式管理SqlSessionFactory(工厂一旦创建,就一直使用同一个实例)。当Mybatis和Spring整合之后,就会把会话工厂SqlSessionFactory交给Spring进行管理。
3、SqlSession
-SqlSession是一个面向用户(程序员)的接口
-SqlSession中提供了很多操作数据库的方法,如:selectOne()返回单个对象,selectList()返回多个对象
-SqlSession是线程不安全的,在SqlSession的实现类中,除了有接口中的方法(操作数据库的方法),还有数据域的属性。
-SqlSession最佳应用场景在方法体内,定义成局部变量使用。
·原始dao开发方法
1、程序员需要些dao接口和dao实现类,需要向dao实现类中注入会话工厂SqlSessionFactory,
在方法体内通过SqlSessionFactory创建SqlSession。
2、dao接口
3、dao接口实现类
-第一步,新建dao接口实现类,实现dao接口,使用构造方法的方式注入单例会话工厂
-第二步,实现dao接口的各个方法,在方法体内使用SqlSession
-测试代码:
4、原始dao开发的问题:
①dao的接口实现类方法存在的大量的模板方法,设想能否将类似代码提取出来,减少程序员工作量,提高代码复用性
②调用SqlSession方法时将statement的id硬编码了
③调用SqlSession方法时传入变量,由于SqlSession方法使用泛型,即使变量传入类型错误,编译阶段依然不报错,影响程序员开发效率。
·mapper代理方法
1、mapper代理方法实际操作步骤
(1)编写mapper.xml映射文件
(2)编写mapper接口,遵循开发规范之后mybatis可以自动生成mapper接口实现类代理对象
(3)开发规范:
- 在mapper.xml中namespace等于mapper接口的地址
-mapper接口的方法名必须和mapper.xml中statement的id一致
-mapper接口中方法的输入的参数类型必须和mapper.xml中statement中parameterType中的类型一致
-mapper接口中方法的返回值的参数类型必须和mapper.xml中statement中resultType中的类型一致
(4)SqlMapConfig.xml中加载mapper.xml配置文件
(5)测试代码
·本章小结
1、代理对象内部调用selectOnce或selectList
-如果mapper方法返回一个pojo对象(非集合对象),代理对象内部通过selectOne来查询数据库
-如果mapper方法返回一个pojo对象(集合对象),代理对象内部通过selectList来查询数据库
2、mapper接口方法参数只有一个是否影响系统的开发
系统框架汇中,dao层的代码是被业务层共用的,即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同业务方法的需求。
注意:持久层中方法的参数可以使用包装类型:map...,而service方法中不建议使用包装类型,因为不利于业务层的可扩展性。