在Iava编码领域中,涌现了许多优秀的框架,Struts工作在web层、Hibernate、MyBatis工作在数据访问层,Spring工作在业务层。这些框架都需要提供配置信息,以便框架能够运行,那么首要的问题就是要让框架知道配置内容是什么。在MyBatis编程中,Resouces工具能够读取配置文件的内容,但并不分析内容。
in=Resources.getResourceAsStream(configFile);
Resources类的getResourceAsStream方法能够在类路径中查找文件,并返回读取此文件内容的输入流。在Resources类的帮助下。sqlSessionFactoryBuilder类能够分析配置文件的内容,根据配置文件信息MyBatis框架的初始化工作。
SqlSessionFactoryBuilder builder=new sqlSessionFactoryBuilder();
sessionFactory=builder.build(in);
首先需要实例化SqlSessionFactoryBuilder对象,再调用其build方法完成初始化,初始化的结果就是获取了SqlSessionFactory对象。
SqlSessionFactory类是典型的工厂类,主要责任就是创建SqlSession对象,在前面的叙述中,了解到在匹配文件中需要配置数据源(数据库连接池),可以把SqlSessionFactory理解为连接池对象的另一种表现形式,内部的连接对象即是 SqlSession 对象。SqlSession 对象通过 SqlSessionFactory 的 openSession 方法获得。
session=sessionFactory.openSession();
SqlSession 接口则是数据交互的核心 API,它提供了两种方式与数据库进行交互。
第一种方式就是前面 TestMybatis 中使用的方式,通过 getMapper 方法获得数据访问对象(Dao 实现类对 象),这种方式并不需要编程实现 Dao 接口,MyBatis 通过字节码生成的方式自动生成 Dao 接口实现类。
IMemberMapper mdao=session.getMapper(IMemberMapper.class);
int n =mdao.countAll();
第二种方式是采用 MyBatis 3 之前的编码方式。
int n=session.selectOne("com.wmj.dao.IMemberMapper.countAll");
SqlSession 提供了一些列的查询方法,单个数据查询使用 selectOne 方法,多个数据查询使用 selec tList 方法,这些方法的第一个参数均是映射文件中查询语句的定位字符串,由映射文件 namespace 和语句 id 组成,namespace 和 id 之间用句点“.”符号连接。在 MyBatis 3 推出之后,推荐使用第一种方式来完成数据存 取操作。
综上所述,使用 MyBatis 编程实现数据访问,关键步骤如下:
1) 编写 MyBatis 配置文件 mybatis-config.xml
2) 编写接口映射文件 XxxMapper.xml 文件
3) 使用 Resources 工具类读取 mybatis-config.xml 配置文件
4) 实例化 SqlSessionFactoryBuilder 对象并调用 build 方法初始化 MyBatis 框架
5) 通过 SqlSessionFactory 打开 SqlSession 会话对象
6) 使用 SqlSession 对象的数据操作方法完成数据操作
7) 关闭 SqlSession 会话对象
MyBatis执行原理