亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatis使用mapper代理開(kāi)發(fā)方式

 更新時(shí)間:2024年10月19日 09:50:11   作者:xvwen  
使用MyBatis代理開(kāi)發(fā)模式時(shí),需要注意定義與映射配置文件同名的接口類,確保namespace屬性與接口路徑一致,接口方法名和映射文件中的id名稱相同,返回類型保持一致,在mybatis-config.xml中配置映射文件路徑,保證結(jié)構(gòu)一致,可通過(guò)注解@Param傳遞多個(gè)參數(shù)

mapper代理開(kāi)發(fā)規(guī)則

使用mybatis的代理開(kāi)發(fā),不僅可以用來(lái)管理冗多的xml配置文件,還可以解決硬編碼,傳遞多個(gè)參數(shù),簡(jiǎn)化執(zhí)行sql的優(yōu)點(diǎn)。

主要有以下注意事項(xiàng):

  1. 定義與映射的配置文件(UserMapper.xml)同名的接口類,并且要在同一目錄下。
  2. 映射文件中的namspace屬性為接口類的路徑。
  3. 在接口類中實(shí)現(xiàn)映射的配置文件方法時(shí),方法名和映射文件的id屬性的名稱一樣。返回?cái)?shù)據(jù)類型也一樣。
  4. mybatis-config.xml的映射配置文件的路徑要一一對(duì)應(yīng)。

對(duì)上面有疑惑的可以看我之前的文章 mybatis基礎(chǔ)。

創(chuàng)建mapper目錄結(jié)構(gòu)和映射接口類

根據(jù)上面的規(guī)則來(lái)具體實(shí)現(xiàn),在java目錄下創(chuàng)建mapper軟件包,將UserMapper接口放在該目錄下。

在resources下創(chuàng)建mapper目錄,將隱射配置文件放在該目錄下。

可以下載mybatisX插件將兩者聯(lián)系起來(lái)。

maven目錄結(jié)構(gòu)下,java和resources編譯后在同一目錄下,他們里面的包也是。

所以滿足規(guī)則但是層級(jí)結(jié)構(gòu)必須一樣。

當(dāng)然也可以直接將xml放在java目錄下的mapper包中即和UserMapper在一起,就不需要考慮其他問(wèn)題了。滿足第一個(gè)規(guī)則。

修改映射配置文件的namespace屬性

使用mapper映射代理開(kāi)發(fā),這個(gè)屬性就顯得尤為重要,UserMapper接口(映射接口類)和UserMapper.xml

(映射配置文件)的聯(lián)系都是產(chǎn)生于namespace屬性。

<?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="mapper.UserMapper">
        <select id="selectAll" resultType="model.User">
            select * from user
        </select>

        <select id="selectById" resultType="model.User">
            select  * from user where id=#{id}
        </select>
</mapper>

將namespace的內(nèi)容由test(自定義)改為mapper.UserMapper(映射接口所在的路徑)。滿足第二個(gè)規(guī)則。

編寫(xiě)映射接口類的方法

package mapper;

import model.User;
import java.util.List;

public interface UserMapper {
    List<User> selectAll();  //默認(rèn)public關(guān)鍵字修飾,selectAll對(duì)應(yīng)xml的id屬性

}

前面我們知道xml配置文件的id屬性本身時(shí)一個(gè)方法,可以看作mybatis將其封裝為一個(gè)resultSet(jdbc)的結(jié)果集,接口的作用主要是繼承該方法并處理結(jié)果集。

用list集合存儲(chǔ)結(jié)果集。滿足第三個(gè)規(guī)則

修改mybatis-config.xml的映射配置文件的路徑

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
      <!--連接配置->
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
 	<!--mappper映射路徑-->
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

要修改的只有mapper標(biāo)簽下顎resource屬性,內(nèi)容為映射配置文件的路徑:mapper/UserMapper.xml

這是我的目錄結(jié)構(gòu)每個(gè)人的不一樣。

當(dāng)然你的映射配置文件較多時(shí)直接用packge標(biāo)簽把整個(gè)mapper包直接加載進(jìn)來(lái)(包掃描)

如果時(shí)直接把包導(dǎo)入的話,就不是/來(lái)展現(xiàn)目錄的層級(jí)了,而是.來(lái)體現(xiàn)。如util.chapter.mapper。實(shí)現(xiàn)規(guī)則四。

編寫(xiě)測(cè)試類調(diào)用方法

package mybatis;
import mapper.UserMapper;
import model.User;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {

    @Test
    public void method() throws IOException {     //單元測(cè)試不能要static
        //mybatis框架都在xml配置文件中加載配置文件
        //從 XML 文件中構(gòu)建 SqlSessionFactory 的實(shí)例
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;

        inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //從 SqlSessionFactory 中獲取 SqlSession
        SqlSession session = sqlSessionFactory.openSession();


        //執(zhí)行sql
        //List<User> users=session.selectList("test.selectAll");
        //System.out.println(users);

        //mapper代理執(zhí)行sql
        UserMapper userMapper=session.getMapper(UserMapper.class);
        List<User> users= userMapper.selectAll();  //UserMapper接口的實(shí)現(xiàn)方法
        System.out.println(users);

        //釋放資源
        session.close();

    }
}

注意要導(dǎo)入javabean和映射接口類。使用代理和不使用的區(qū)別。

如下面的映射文件的配置,那么如何調(diào)用有多個(gè)參數(shù)的方法呢?

配置文件xml

<select id="selectAll" resultType="model.User">
	select * from user
</select>

<select id="selectById" resultType="model.User">
    select  * from user where id=#{id}
</select>

<select id="selectmore" resultType="model.User">
    select * from user where id =#{id} and username=#{username}
</select>

映射接口類

List<User> selectAll();  //默認(rèn)public關(guān)鍵字修飾
List<User> selectById(int id);
List<User> selectMore(int id,String name);

mybatis的參數(shù)傳遞:

當(dāng)傳遞多個(gè)不同類型的參數(shù)時(shí)mybatis將參數(shù)封裝為map集合,并默認(rèn)有key,可以通過(guò)@param注解更改key的名稱,value保留參數(shù)的值,通過(guò)更改后的key名稱獲取參數(shù)。當(dāng)只有一個(gè)參數(shù)時(shí)就不用了。

javabean的參數(shù)類型:可以直接使用,對(duì)象的屬性名和參數(shù)占位符保持一致即可,上面使用的reultType手勢(shì)javabean對(duì)象,位置對(duì)應(yīng)就可以了。

Map集合 :map的鍵和參數(shù)占位符一致也直接使用。

(上面的數(shù)據(jù)類型可以直接傳遞,位置對(duì)應(yīng)即可)

array,list當(dāng)數(shù)據(jù)類型都要加注解@param。

實(shí)際上sql的占位符會(huì)接收該方法傳遞的參數(shù),mybatis是將參數(shù)封裝為一個(gè)map集合,占位符的名稱就是key,但是系統(tǒng)默認(rèn)的key并不是,需要用@param將默認(rèn)的key改為占位符的名稱就可以了。

具體操作就是@param中的值與xml文件的占位符一致就可以了,緊跟著就是參數(shù)了。調(diào)用也是按位置傳參。

所有數(shù)據(jù)類型的都可以用注解@Param來(lái)傳參(P大寫(xiě))。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Java中的dozer對(duì)象轉(zhuǎn)換問(wèn)題

    關(guān)于Java中的dozer對(duì)象轉(zhuǎn)換問(wèn)題

    Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個(gè)對(duì)象復(fù)制到另一個(gè)對(duì)象,這篇文章主要介紹了Java中的dozer對(duì)象轉(zhuǎn)換的操作方法,需要的朋友可以參考下
    2022-08-08
  • 超詳細(xì)解析Spring Bean的創(chuàng)建過(guò)程

    超詳細(xì)解析Spring Bean的創(chuàng)建過(guò)程

    這篇文章主要揭秘了Spring Bean的創(chuàng)建過(guò)程,文中通過(guò)代碼示例和圖文結(jié)合的方式解析的超級(jí)詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • Mybatis利用分頁(yè)插件PageHelper快速實(shí)現(xiàn)分頁(yè)查詢

    Mybatis利用分頁(yè)插件PageHelper快速實(shí)現(xiàn)分頁(yè)查詢

    如果你也在用MyBatis,建議嘗試該分頁(yè)插件,這一定是最方便使用的分頁(yè)插件,這篇文章主要給大家介紹了關(guān)于Mybatis利用分頁(yè)插件PageHelper快速實(shí)現(xiàn)分頁(yè)查詢的相關(guān)資料,PageHelper是一個(gè)Mybatis的分頁(yè)插件,負(fù)責(zé)將已經(jīng)寫(xiě)好的sql語(yǔ)句,進(jìn)行分頁(yè)加工,需要的朋友可以參考下
    2021-08-08
  • spring aop實(shí)現(xiàn)接口超時(shí)處理組件的代碼詳解

    spring aop實(shí)現(xiàn)接口超時(shí)處理組件的代碼詳解

    這篇文章給大家介紹了spring aop實(shí)現(xiàn)接口超時(shí)處理組件,文中有詳細(xì)的實(shí)現(xiàn)思路,并通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Spring攔截器中注入Bean失敗解放方案詳解

    Spring攔截器中注入Bean失敗解放方案詳解

    這兩天遇到SpringBoot攔截器中Bean無(wú)法注入問(wèn)題。下面介紹關(guān)于SpringBoot攔截器中Bean無(wú)法注入的問(wèn)題解決方案,感興趣的朋友一起看看吧
    2022-06-06
  • Kotlin lateinit與by lazy案例詳解

    Kotlin lateinit與by lazy案例詳解

    這篇文章主要介紹了Kotlin lateinit與by lazy案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • java中的常用集合類整理

    java中的常用集合類整理

    本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于java中List集合及其實(shí)現(xiàn)類的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來(lái)學(xué)習(xí)一下吧,希望能給你帶來(lái)幫助
    2021-06-06
  • 解決Weblogic部署war找不到spring配置文件的問(wèn)題

    解決Weblogic部署war找不到spring配置文件的問(wèn)題

    這篇文章主要介紹了解決Weblogic部署war找不到spring配置文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2021-07-07
  • 淺談hibernate中懶加載禁用操作

    淺談hibernate中懶加載禁用操作

    這篇文章主要介紹了淺談hibernate中懶加載禁用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析

    java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析

    這篇文章主要介紹了java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論