SqlSessionFactoryBuilder
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory。将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。在创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。SqlSessionFactory
通过SqlSessionFactory创建SqlSession;由于SqlSessionFactory是线程安全的,应该在应用执行期间都存在,所以在应用运行期间不要重复创建多次,建议使用单例模式。SqlSession
SqlSession是应用程序和持久层之间执行交互操作的一个单线程对象。SqlSession中提供了许多操作数据库的方法。
SqlSession是线程不安全的。
使用完SqlSession要确保在finally块中关闭它。原始dao接口开发
程序员需要写dao接口和dao实现类
dao接口
1
2
3
4
5public interface UserDao {
public User findUserById(int id) throws Exception;
public List<User> findUserByName(String name) throws Exception;
}
dao接口实现类
1 | public class UserDaoImpl implements UserDao{ |
测试代码
1 | public class Test_2 { |
总结原始dao开发问题
1.dao接口实现类方法中存在大量的模板方法。
2.调用SqlSession方法时传入参数硬编码。
3.由于SqlSession方法使用泛型,即使变量类型传入错误,在编译阶段也不会报错,不利于程序员开发。
mapper代理方法
程序员只需要mapper接口(相当于dao接口)
程序员还需要编写mapper.xml映射文件
程序员编写mapper接口需要遵循一些开发规范,Mybatis可以自动生成mapper接口实现类代理对象。
开发规范
在mapper.xml中namespace等于mapper接口地址
1
2
3
4
5<!--
namespace 命名空间,作用就是对sql进行分类化管理,理解为sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址
-->
<mapper namespace="mapper.UserMapper">mapper.java接口中的方法名和mapper.xml中statement的id一致
- mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
- mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。