您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)ssm框架中MyBatis怎么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
MyBatis介紹
1, MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)集。
2,MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的實體類映射成數(shù)據(jù)庫中的記錄。
MyBatis優(yōu)點
MyBatis是一個持久層的框架,它是對JDBC的封裝,要學(xué)好MyBatis,首要要對JDBC有一個較深的認(rèn)識,這里通過比對JDBC來對MyBatis有一個初步的認(rèn)識,即我們?yōu)槭裁匆褂肕yBatis。
使用JDBC操作數(shù)據(jù)庫存在一些問題,例如代碼冗余,需要寫很多重復(fù)的代碼,不便于維護(hù)等,MyBatis正是為解決這些痛點而誕生的。
下面對比幾種典型的場景
JDBC(問題)
1,數(shù)據(jù)庫連接,使用時就創(chuàng)建,不使用立即釋放,對數(shù)據(jù)庫進(jìn)行頻繁連接開啟和關(guān)閉,造成數(shù)據(jù)庫資源浪費,影響數(shù)據(jù)庫性能。
2,將sql語句硬編碼到Java代碼中,如果sql語句修改,需要重新編譯java代碼,不利于系統(tǒng)維護(hù)。
3,向preparedStatement中設(shè)置參數(shù),對占位符號位置和設(shè)置參數(shù)值,硬編碼在java代碼中,不利于系統(tǒng)維護(hù)。
4,從resutSet中遍歷結(jié)果集數(shù)據(jù)時,存在硬編碼,將獲取表的字段進(jìn)行硬編碼,不利于系統(tǒng)維護(hù)。
MyBatis(對策)
1,使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。
2,將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進(jìn)行重新編譯。
3,將sql語句及占位符號和參數(shù)全部配置在xml中。
4,將查詢的結(jié)果集,自動映射成java對象。
對比JDBC持久化的流程,MyBatis很多工作在配置文件中進(jìn)行設(shè)置,減少了很多代碼量,同時也使得代碼結(jié)構(gòu)更加清晰,維護(hù)起來也更加方便。
JDBC的工作流程
1,加載數(shù)據(jù)庫驅(qū)動
2,創(chuàng)建并獲取數(shù)據(jù)庫鏈接
3,創(chuàng)建jdbc statement對象
4,設(shè)置sql語句
5,設(shè)置sql語句中的參數(shù)
6,通過statement執(zhí)行sql并獲取結(jié)果
7,對sql執(zhí)行結(jié)果進(jìn)行解析處理
8,釋放資源
MyBatis的工作流程
1,配置mybatis的配置文件,SqlMapConfig.xml
2,通過配置文件,加載mybatis運行環(huán)境,創(chuàng)建SqlSessionFactory會話工廠。
3,通過SqlSessionFactory創(chuàng)建SqlSession。SqlSession是一個面向用戶接口(提供操作數(shù)據(jù)庫方法),實現(xiàn)對象是線程不安全的,建議sqlSession應(yīng)用場合在方法體內(nèi)。
4,調(diào)用sqlSession的方法去操作數(shù)據(jù)。如果需要提交事務(wù),需要執(zhí)行SqlSession的commit()方法。
5,釋放資源,關(guān)閉SqlSession
MyBatis的使用(簡單介紹)
編寫一個mapper接口和對應(yīng)的XML文件映射,將所有的SQL語句交給XML進(jìn)行管理。
在編寫mapper.xml(映射文件)和mapper.java需要遵循以下規(guī)范:
1,mapper.xml中namespace就是mapper.java的類全路徑。
2,mapper.xml中statement的id和mapper.java中方法名一致。
3,mapper.xml中statement的parameterType指定輸入?yún)?shù)的類型和mapper.java的方法輸入?yún)?shù)類型一致
4,mapper.xml中statement的resultType指定輸出結(jié)果的類型和mapper.java的方法返回值類型一致。
如下,舉例一個簡單的mapper的用法
mapper.java
public interface CommitMapper {
/**
* 新增評論
*/
public void addCommit(Commit commit) throws Exception;
/**
* 刪除評論
*/
public List<Commit> findCommitList(Integer commit_id) throws Exception;
}
mapper.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.amuxia.mapper.CommitMapper">
<select id="addCommit" parameterType="com.amuxia.pojo.Commit">
insert into
tb_commit
(
commit_content,
commit_user_id,
commit_goods_id
)
value
(
#{commit_content},
#{commit_user_id},
#{commit_goods_id}
) </select>
<select id="findCommitList" parameterType="integer"
resultType="com.amuxia.pojo.Commit">
select
c.commit_id,
c.commit_content
from
tb_commit c,
tb_user u,
tb_goods g
where
c.commit_user_id=u.user_id
and c.commit_id=g.id
and c.commit_id=#{commit_id} </select></mapper>
名詞解釋
1,parameterType:MyBatis中通過parameterType指定輸入的參數(shù)類型
2,resultType:MyBatis中通過resultType指定輸出的結(jié)果。
3,#{}:表示的是占位符,#{}接收的參數(shù)是輸入的參數(shù),類型可以是簡單類型、pojo、hashmap
#{}如果接收的是簡單類型的話,里面的值可以value或者其他名稱
#{}接收pojo對象,通過OGNL讀取對象中的屬性值,通過屬性.屬性的方式獲取。
4,selectOne:表示查詢出一條記錄,如果是使用selectone是可以實現(xiàn)的結(jié)果,selectList也是可以實現(xiàn)了(list中只有一個對象)
5,selectList:表示查詢出一個列表(多條記錄)進(jìn)行映射的。如果是使用selectOne是不可以實現(xiàn)的。
感謝各位的閱讀!關(guān)于“ssm框架中MyBatis怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。