前一段的时间我们详细的讲述了SSH框架中的Spring--Struts2--Hibernate三种框架,即Spring的IOC容器负责管理各个类的bean(一般为单例)、事务的管理和面向切面编程;Struts主要是负责控制前台页面--后台Java程序之间通过Action类和值栈数据传递,用OGNL对象导航图语言在JSP页面中进行读取;Hibernate主要是负责在Java程序中和数据库之间的数据交换,主要是其hbm.xml文件的映射文件。
今天我们开始讲一讲Hibernate的类似语言框架Mybatis。
1.原声的JDBC API访问的问题
① 用一个取一个,不用则关闭,会造成数据库资源的浪费。解决方法:使用数据库连接池。
② 在为preapredStatement设置参数、编写SQL、对ResultSet中遍历结构集这三个时刻都进行了硬编码,所谓硬编码就是将一些内容写死了,不可更改和替代。这样当我们需求改变时,就需要修改Java代码并重新编译,不利于系统重新维护。
解决方式:我们将SQL语句、SQL参数的占位符、查询结果的结果集自动映射为对象等内容都配置在一个xml文件中,这样当需求改变时,只需修改xml中的内容而不需修改Java代码,从而也就不必修改Java代码重新编译了。(能写在配置文件中的东西尽量不要写在Java代码中)
2.mybatis框架的描述
① mybatis是一个持久层的框架
② 他可以让程序员将主要的精力放在SQL上,通过mybatis提供的映射方式,自由灵活的生成满足需求的SQL。
③ mybatis可以将向preparedStatement的输入参数自动映射成SQL语句中的占位符--输入参数,将查询结果灵活映射成Java对象--输出查询。
3.mybatis的原理
和Hibernate一样,Mybatis也是拥有一个框架的配置文件sqlSessionMap.xml,同时他也有一个sqlSessionFactory和sqlSession,分别对应Hibernate中的hibernate.cfg.xml和sessionFactory和session。这三者的功能及其内容和Hibernate的三者基本上一模一样。
我们需要注意的是:在mybatis的底层,使用一个叫做MappedStatement来对操作数据库的行为进行封装的,包括输入参数,SQL语句,输出结果类型等。