最近做項目用到了MyBatis,之前沒接觸過,本以爲它有多麼高深呢,結果看完之後才發現So Easy,因爲之前用過Hibernate,所以感覺它很容易理解。趕緊讓我們看看它到底是個什麼東西吧。
一、快速普及
1、是什麼
是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。
MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。
Mybatis實現了接口綁定,使用更加方便。
對象關係映射的改進,效率更高
MyBatis採用功能強大的基於OGNL的表達式來消除其他元素。
2、功能架構
3、執行流程
原理詳解:
MyBatis應用程序根據XML配置文件創建SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,用完之後關閉SqlSession。
二、代碼理解
1、業務邏輯層的調用
MyBatis一般應用於Dao層,所以我們從業務邏輯的調用開始看
/*
*用戶管理-業務邏輯實現
*/
@Service
public class UserSericerImp implements UserSericer{
//自動注入Dao層的用戶管理類
@Autowired
private UserDao ud;
//新增用戶
@Override
public long saveUser(UserMonitor um) {
// TODO Auto-generated method stub
return ud.saveUser(um);
}
//查詢所有用戶
@Override
public List<UserMonitor> listUser() {
// TODO Auto-generated method stub
List<UserMonitor> list = ud.listUser();
return list;
}
//更新用戶
@Override
public long upUser(UserMonitor um) {
// TODO Auto-generated method stub
return ud.upUser(um);
}
//刪除用戶
@Override
public long delUser(long id) {
// TODO Auto-generated method stub
return ud.delUser(id);
}
}
2、Dao層的接口
/*
*用戶管理-Dao層接口
*/
@Component("UserDao")
public interface UserDao {
/**
* login
*/
public UserMonitor login(UserMonitor um);
/**
* 新增用戶
* @param um
* @return
*/
public long saveUser(UserMonitor um);
/**
* 展示USER
*
*/
public List<UserMonitor> listUser();
/**
* 修改
* @param um
* @return
*/
public long upUser(UserMonitor um);
/**
* 刪除
* @param um
* @return
*/
public long delUser(long id);
}
3、Dao層實現
這裏需要注意的是,Dao層是通過xml配置文件實現的,而且裏邊的方法名一定不能重複(注意:即使在不同的xml文件中,方法名也不能重複)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!-- 開始配置, 對應的接口文件 -->
<mapper namespace="com.jiedaibao.fundmonitor.dao.mapper.UserDao">
<!-- 配置返回實體與表結構的對應關係 -->
<resultMap id="UserMonitor" type="com.jiedaibao.fundmonitor.dao.domain.UserMonitor"> <!-- 實體名稱及位置 -->
<!-- 主鍵 -->
<id column="id" property="id" jdbcType="INTEGER" />
<!-- 用戶名 -->
<result column="username" property="username" />
<!-- 密碼 -->
<result column="password" property="password" />
</resultMap>
<!-- 查詢所有用戶 -->
<select id="listUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor" resultMap="UserMonitor">
select id,username,password from t_user order by username
</select>
<!-- 添加新用戶 -->
<insert id="saveUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
<![CDATA[INSERT INTO t_user (username,password)
VALUES(#{username},#{password})]]>
</insert>
<!-- 更新用戶 -->
<update id="upUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
<![CDATA[UPDATE t_user ]]>
<set>
<if test="username != null and username != ''">
<![CDATA[username=#{username}]]>
</if>
<if test="password != null and password != ''">
<![CDATA[`password`= #{password}]]>
</if>
</set>
<where>
<![CDATA[ id=#{id}]]>
</where>
</update>
<!-- 刪除用戶 -->
<delete id="delUser" parameterType="com.jiedaibao.fundmonitor.dao.domain.UserMonitor">
<![CDATA[DELETE FROM t_user ]]>
<where>
<![CDATA[id=#{id}]]>
</where>
</delete>
</mapper>
說明:
id:這個xml中的id與接口中的方法名相匹配
parameterType:是傳入參數的類型,可以是String等常用類型,也可以是定義的實體
resultMap:是返回的結果集,本例子中的“UserMonitor”在開頭已經配置(即配置返回實體與表結構的對應關係)
4、實體
/*
* 用戶實體
*/
public class UserMonitor {
private Long id; //自增id
private String username;//用戶名
private String password; //密碼
}
總結:
我們現在只是簡單瞭解了一下MyBatis,在開發中完全可以快速上手了,但是其他如事務、緩存、存儲過程、動態sql、映射等,我們就不在介紹了,感興趣的朋友可以自己看看。