From Hibernate To Mybatis (一)

前言

新公司新项目的持久层用到了Mybatis,在此之前的一两年我一直使用的是Hibernate,关于这两个框架的争议一直存在,有人说Hibernate过于臃肿效率低于Mybatis,也有人说Hibernate优化做的好效率一样很棒,其实我还是认为各有优势的,比如Hibernate的API可以让我们无视数据库移植,HQL也简化了SQL,但Mybatis的灵活性确实略高于Hibernate,只要不是用JDBC,这些个框架整体上应当都是差不多的,无非就是用的好用的坏的问题。刚进公司那阵鸿洋曾经告诉过我,会Hibernate的话学Mybatis也就是几个小时的事情,看来确实如此,不管是整体的架构或者使用方法上都是同出一辙,本篇blog是我学习Mybatis的第一篇,所以就写一个简单的CRUD,当然我的这一系列blog还有一个特点就是会不断和hibernate做比较,一边总结回顾Hibernate,一边学习记录Mybatis。

初识MyBatis

首先看一下Mybatis的工程结构,

给我的第一感觉就是轻量级,jar包只需要2个,并无任何依赖,那么再来看看Hibernate的工程结构,

相比之下,孰“轻”孰“重”一目了然。再具体观察一下包的结构,不难发现Mybatis下有一个mappers包,里面放的是xml文件,没学过应该也听说过Mybatis的SQL语句是独立写在配置文件中的,并且正是写在这些mapper.xml文件中的,这个后面再细说。不管哪个框架自然应当有一个整体的配置文件,就像Hibernate中的hibernate.cfg.xml一样,我们来看看Mybatis的mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ""><configuration><typeAliases><typeAlias alias="User" type="com.wl.entity.User" /></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb2" /><property name="username" value="root" /><property name="password" value="11fit" /></dataSource></environment></environments><mappers><mapper resource="com/wl/mappers/user_mapper.xml" /></mappers></configuration>

基本上和Hibernate的配置方法完全一致,数据源、mapper文件(hbm文件),唯独需要注意的一点是这里配置了一个<typeAliases>,这个配置也很好理解,就是为我们的实体Bean配置了一个别名,在后面的mapper.xml中如果需要引入User的话我们就不用带包名了,否则必须写完整的包名+类名。

下面重点内容就是实体类和mapper文件,在Hibernate中,我们的实体类必然会有一个映射文件(hbm.xml)或映射注解(@Entity @Table)相对应,它们声明了我们实体Bean的属性和数据库字段的对应方式、数据类型等等,而在Mybatis中,依旧如此,并且除了这些,Mybatis还将SQL语句也放进了这种配置文件中。下面我们就看看user_mapper.xml这个配置文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"""><mapper namespace="com.wl.entity.UserMapper"><!–通过<resultMap>映射实体类属性名和表的字段名对应关系 –><resultMap type="User" id="userResultMap"><!– 用id属性来映射主键字段 –><id property="id" column="userId" /><result property="name" column="userName" /><result property="pwd" column="userPwd" /><result property="birthday" column="userBorn" /></resultMap><select id="selectUserByID" parameterType="int" resultMap="userResultMap">select * from t_user where userId = #{id}</select><insert id="insertUser" parameterType="User" useGeneratedKeys="true"keyProperty="userId">insert into t_user(userName,userPwd,userBorn)values(#{name},#{pwd},#{birthday})</insert><delete id="deleteUser" parameterType="int">delete from t_user whereuserId = #{id}</delete><update id="updateUser" parameterType="User">update t_user set userName= #{name} where userId = #{id}</update></mapper>首先来整体看一下,最上面的<resultMap>的配置非常类似于Hibernate中hibernate-mapping的配置,随便找一个Hibernate的hbm文件来看看:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"""><hibernate-mapping package="com.wl.entity"><class name="IDCard" table="t_id_card"><id name="id" column="card_id"><generator class="native" /></id><property name="number" /><many-to-one name="person" column="pid" unique="true"></many-to-one></class></hibernate-mapping>就微笑着同清风合力染绿大地,这样才算善待生命,不负年华。

From Hibernate To Mybatis (一)

相关文章:

你感兴趣的文章:

标签云: