欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

主要有以下注意事項:

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

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

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

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

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

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

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

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

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

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

使用mapper映射代理開發(fā),這個屬性就顯得尤為重要,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(映射接口所在的路徑)。滿足第二個規(guī)則。

編寫映射接口類的方法

package mapper;

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

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

}

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

用list集合存儲結(jié)果集。滿足第三個規(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標簽下顎resource屬性,內(nèi)容為映射配置文件的路徑:mapper/UserMapper.xml

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

當然你的映射配置文件較多時直接用packge標簽把整個mapper包直接加載進來(包掃描)

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

編寫測試類調(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 {     //單元測試不能要static
        //mybatis框架都在xml配置文件中加載配置文件
        //從 XML 文件中構(gòu)建 SqlSessionFactory 的實例
        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接口的實現(xiàn)方法
        System.out.println(users);

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

    }
}

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

如下面的映射文件的配置,那么如何調(diào)用有多個參數(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();  //默認public關(guān)鍵字修飾
List<User> selectById(int id);
List<User> selectMore(int id,String name);

mybatis的參數(shù)傳遞:

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    Kotlin lateinit與by lazy案例詳解

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

    java中的常用集合類整理

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

    解決Weblogic部署war找不到spring配置文件的問題

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

    淺談hibernate中懶加載禁用操作

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

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

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

最新評論