MyBatis框架
Mybatis框架
测试步骤
第一步:读取配置文件
第二部:创建SqlSessionFactory工厂
第三步:创建SqlSession
第四步:创建Dao接口的代理对象
第五步:执行dao中的方法
第六步:释放资源
使用注解配置
1. 移除配置的映射文件
2. 在主配置文件中将resource属性修改成class属性并提供注解的接口的全限定类名
3. 在接口中写上@select(“select * from student”)
使用方法
常规使用方法
书写主配置文件(指定主配置文件的路径)
书写映射文件
最后进行进行主类书写即可。
显然这样的方式过于繁琐,我们可以使用注解的方式
然后我们再主配置文件中将映射文件改成注解配置的格式
注意这里不是resources而是class了。
自己写接口实现
这里是让MyBatis帮我们实现了接口的实现类,,我们也可以自己实现这个接口 。
mapper中的namespace是为了区分不同域中的方法,有点类似java的包
id是为了找到具体的语句
然后主测试类中的创建代理对象就可以省略了
主测试类分析
InputStream in = Resources.getResourceAsStream("MybatisConfig.xml");
//绝对路径和相对路径一般在部署的时候不使用,
1. 使用类加载器,他只能读取类路径的配置文件
2. 使用ServletContext对象的getRealPath方法
// 创建SQLSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
构建者模式:将创建对象的细节隐藏,使用者直接通过方法即可拿到对象
// 使用工厂生产SQLSession对象
SqlSession sqlSession = factory.openSession();
工厂模式:解耦(降低类之间的依赖关系)
// 使用SQLSession创建Dao接口的代理对象
UserDao dao = sqlSession.getMapper(UserDao.class);
代理模式:不修改源码的基础上对已有方法增强
// UserDaoIml userDaoIml = new UserDaoIml(factory);
// List<User> dao = userDaoIml.findAll();
// 使用代理对象执行方法
List<User> all = dao.findAll();
自定义MyBatis分析
MyBatis在使用代理dao的方式实现增删改查做的事。
1.创建道理对象
2.在代理对象中调用selectList方法
连接数据库的信息,有了他们就能创建Connection对象。
有个这个配置信息,就有了映射的文件
这个文件有Sql语句,就能获取到PrepareStatement对象,还有封装的实体类的全限定类名。
读取配置文件:用到的是解析XML的技术,此处用的是dom4j解析。
- 根据所配置的文件信息创建Connection对象,注册驱动,获取连接
- 获取预处理对象PreparedStatement,此处需要Sql语句,con.preparedstatement(sql)
- 执行查询,ResultSet set = preparedStatement.executeQuery();
- 遍历结果集用于封装,这里根据映射文件对应的xml文件中的resultType中的信息可以使用反射创建对象,然后进行封装
- 将封装好的list进行返回
要想让上述方法执行,要提供两个信息
1.连接信息
2.映射信息:1执行的sql,2.封装结果的全限定类名。这两个信息组合起来封装为一个对象