常用的api
- sqlSessionFactoryBuilder
- 通过sqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
- 将SqlSessionFactoryBuilder当成一个工具类使用就可以,不需要使用单例管理SqlSessionFactoryBuilder
- 在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactory即可
- sqlSessionFactory
- 通过SqlSessionFactory创建SqlSession,使用单例模式进行管理(一个项目只需要使用一个SqlSessionFactory)
- 和spring整合后,可以通过spring配置实现单例
- SqlSession
- SqlSession是一个面向用户的接口
- SqlSession中提供了很多的操作数据库的方法:
- SqlSession是线程不安全的,在SqlSession中除了有接口中定义的方法,还有数据域属性
- SqlSession最佳的应用场合是在方法体内部,定义局部变量使用
原始方式dao开发方法(需要写dao接口和dao实现类)
- dao:
- 定义的接口
- 接口实现类:
- 定义的接口
- 映射配置文件还是使用User.xml
- 测试代码:
- ==原始dao开发存在的问题==
- dao接口的实现类中,有大量的模板方法(相同的代码)
- 调用到的sqlSession的 方法的statement的id被硬编码了
- sqlSession方法传入的第二个参数,由于使用的是泛型,没有约束,在编译阶段不能察觉到错误
mapper代理的方式(只需要写mapper接口)
- 编写mapper.xml映射文件
- namespace属性值:mapper接口的全路径地址
- namespace属性值:mapper接口的全路径地址
- 编写mapper接口(相当于dao接口)
- 接口中的方法名和mapper.xml映射配置文件的statement的id一致
- 接口中方法的输入参数类型和mapper.xml中的statement的parameterType属性定义的类型是一致的
- 接口中方法的返回值类型和mapper.xml中的statement的resultType属性定义的类型一致、
- 在sqlMapConfig.xml配置文件中引入映射配置文件mapper.xml
- mybatis可以自动生成mapper接口实现类代理对象
- 如果代理对象调用方法返回的是一个非集合对象,那么代理对象内部通过selectOne查询数据库
- 如果代理对象方法返回集合对象,代理对象内部通过selectList查询数据库
- 使用mapper代理的方式只能传入一个参数,可以通过包装类进行扩展
- 测试: