1.不久之前,我总结了一下hibernate框架的学习笔记,现在我们来学习一下另一个持久层框架Mybatis。
我觉得同样是学习持久层框架,个人觉得通过类比的方法学习是最好的,我们可以先学hibernate框架,或者你学习Mybatis框架也行,最重要的是学习的方法,不要分别去学,没有联系的去学,那么我觉得肯定很辛苦,或者你还有更好的方法,欢迎指教,如果我说的有不对的地方也欢迎指出来。
2.在学习之前,我会问一下什么时候会用到Mybatis框架,什么时候又去用hibernate框架?
首先我觉得hibernate是一个很优秀的持久层框架,它高度依赖对象,或者它是环绕着对象来设计的,他的思想非常的好,但是对于处理一些很复杂的级联关系会比较冗杂一下,因为它有自己的hql语句,但是Mybatis框架,我觉得对于一些复杂的级联关系处理起来会比较方便一些,因为它的设计理念就是面向sql的,虽然如此,但是还是个人喜欢吧,hibernate框架就像IOS系统,而Mybatis框架就像Android系统。
3.好了,闲话少说,下面来正式的介绍一下这款优秀的持久层框架---Mybatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
重点的词语就是(1)定制化SQL:因为他支持sql语句动态化(后面会介绍)
(2)存储过程
(3)高级映射
Mybatis框架的好处:
(1)几乎不用写复杂的jdbc代码,后面你用到的时候也会发现不用考虑去手动配置参数和结果集,这个我觉得很爽。
(2)MyBatis 可以对配置和原生Map使用简单的 XML 或注解
(3)可以将POJO普通的java对象映射成数据库中的记录
4.怎么得到Mybatis框架,并把它放进项目中去?
使用Mybatis框架非常的容易,只要去官网下载就行,我现在介绍的时候是Mybatis-3.4,先解压,只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
5.下面按照步骤来介绍使用Mybatis框架:
(1)在学习hibernate框架的时候我们知道,要使用hibernate框架首先要配置hibernate.cfg.xml配置文件,同样是持久层框架,Mybatis框架也是一样的,不过他的文件名
不一样,我通常把他命名为mybatis-config.xml文件。
下面我们来通过xml文件的结构来看看异同之处:
首先hibernate:(略过前面的命名空间的介绍)
<hibernate-configuration>
<session-factory>
<property name="" value=""></property>
<property name="" value=""></property>
.......
</session-factory>
<mapper />
</hibernate-configuration>
然后看看Mybatis的:
<configuration>
<!-- 这里可以配置常用的数据库连接,或者配置c3po数据库连接池-->
//这里也可以不用配置
<properties resource="属性配置文件">
</properties>
<!--为你要映射的类创建别名,后面在***Mapper.xml可以用到-->
<typeAliases>
<typeAlias alis="" type="POJO类的全名"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transcationManager type="JDBC"/>
<dataSource type="POOLED">
<property name="" value="">
.......
</dataSource>
</environment>
</environments>
<mappers>
<mapper></mapper>
</mappers>
</configuration>
是不是觉得很相似?认真的看一下那个标签,就会发现差不多了。
6.除了很重要的配置xml,是不是还有一个同样很重要的映射文件,hibernate的是*.hbm.xml,Mybatis的是***Mapper.xml.下面我们也区分一下:
首先是hibernate的:(在hibernate中一个实体类就要对应一个数据表,所以就是实体类到数据表的映射)
<hibernate-mapping>
<class name="类的全称" table="数据库的表名">
<id name="实体类的成员变量名" type="该属性的类型">
<column name="生成数据表的字段名"></column>
<generator class="主键生成策略" >
<property name="实体类的成员变量名" type="该属性的类型">
<column name="生成数据表的字段表" length="">
</property>
</id>
</class>
</hibernate-mapping>
然后看看Mybatis的:(命名空间一样忽略,mybatis的高度定制的sql对应实体类的增删改查)
所以它的更加简单:
<mapper namespace="实体类的全名加上Mapper例如:com.zqu.mybatis.dao.pojo.UserMapper" >
<!-- 然后就是定制你的sql语言了-->
<select id="这个select的唯一标识" parameterType="传入值的类型" resultType="返回值的类型">
</select>
下面的是例子
<select id="GetUserByID" parameterType="int" resultType="User">
select uid as "uid",uname as "uName",upwd as "uPassword" from `user` where uid=#{id}
</select>
</mapper>
7.讲完了这些下面就来说说,怎么获取Mybatis框架的SQLSessionFactory吧
同样要说的是hibernate框架的:
首先创建配置对象
Configuration config = newConfiguration().config();
接着创建服务注册对象
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties).buildServiceRegisty();
然后创建SessionFactory sessionFactory =config.buildSessionFactory(serviceRegistry);
然后得到Session会话
Session session =sessionFactory.getCurrentSession();这个要在hibernate.cfg.xml文件里配置或者
Session session =sessionFactory.openSession();这个一定要记得关闭。
然后是Mybatis的:
第一步定义xml文件所在的路径:
String resource = “mybatis-config.xml的具体路径”;
然后定义一个输入流对象接受调用resource类的方法
InputStream inputStream =Resource.getResourceAsStream(resource);
然后我们就可以创建SqlSessionFactory了
SqlSessionFactory sessionFactory = newSqlSessionFactorybuilder().build(inputStream);
最后我们可以得到会话Session
SqlSession session =sessionFactory.openSession().
这样我们就了解了Mybatis的基本构成了,下一篇,笔者将通过一个生动的实例来加深理解说明。