最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

使用mybatis的代理開發(fā),不僅可以用來管理冗多的xml配置文件,還可以解決硬編碼,傳遞多個(gè)參數(shù),簡化執(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的映射配置文件的路徑要一一對應(yīng)。

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

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

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

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

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

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

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

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

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

使用mapper映射代理開發(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ī)則。

編寫映射接口類的方法

package mapper;

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

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

}

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

用list集合存儲結(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)來(包掃描)

如果時(shí)直接把包導(dǎo)入的話,就不是/來展現(xiàn)目錄的層級了,而是.來體現(xiàn)。如util.chapter.mapper。實(shí)現(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 的實(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,可以通過@param注解更改key的名稱,value保留參數(shù)的值,通過更改后的key名稱獲取參數(shù)。當(dāng)只有一個(gè)參數(shù)時(shí)就不用了。

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Java Calendar類的使用總結(jié)實(shí)例

    Java Calendar類的使用總結(jié)實(shí)例

    這篇文章主要介紹了Java Calendar類的使用總結(jié)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 深入理解JAVA 備忘錄模式

    深入理解JAVA 備忘錄模式

    這篇文章主要介紹了JAVA 備忘錄模式的的相關(guān)資料,文中示例代碼非常細(xì)致,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷回滾功能

    Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷回滾功能

    本文介紹了如何在Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷回滾功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 最新評論

    安陆市| 土默特左旗| 深州市| 小金县| 班玛县| 元谋县| 西乌珠穆沁旗| 临沭县| 德令哈市| 石家庄市| 射阳县| 鹤峰县| 射阳县| 六安市| 高淳县| 华池县| 泰安市| 正定县| 理塘县| 台南县| 于都县| 普宁市| 库尔勒市| 武宣县| 奎屯市| 余干县| 裕民县| 阿城市| 东丰县| 梅河口市| 宝山区| 丰镇市| 连州市| 揭阳市| 永福县| 常山县| 宁河县| 湖口县| 新宁县| 三亚市| 广宁县|