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

解讀Mapper與Mapper.xml文件之間匹配的問題

 更新時間:2023年01月09日 16:58:40   作者:實習(xí)生dc  
這篇文章主要介紹了解讀Mapper與Mapper.xml文件之間匹配的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mapper與Mapper.xml文件之間匹配問題

這里我們做一個實例

user實體類

public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String phone;

數(shù)據(jù)庫user表

在這里插入圖片描述

userMapper.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="wdc.dao.UserMapper">
    <resultMap id="BaseResultMap" type="wdc.pojo.User">
        <!-- column為數(shù)據(jù)庫字段名  property 為實體類字段名-->
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="user_name" property="username" jdbcType="VARCHAR"/>
        <result column="user_password" property="password" jdbcType="VARCHAR"/>
        <result column="user_email" property="email" jdbcType="VARCHAR"/>
        <result column="user_phone" property="phone" jdbcType="VARCHAR"/>

    </resultMap>
    <!-- 這里 id 是數(shù)據(jù)庫字段名 #{id}是實體類字段名,sql語句后面不加封號-->
    <select id="selectUser" parameterType="java.lang.Integer" resultMap="BaseResultMap">
         select *from USER where id=#{id}
    </select>
    <!--此sql用于登錄查詢
    #{username} 是對應(yīng)mapper接口文件中 @Param注解中的參數(shù)名(防止mapper之間不匹配)-->
    <select id="login" parameterType="java.lang.String" resultMap="BaseResultMap">
        select *from user where user_name=#{username} and user_password=#{password}
    </select>
</mapper>

從上面不難看出,我們使用了resultMap作為映射集,目的是為了使得 實體類user 中的字段與數(shù)據(jù)庫中的字段進行匹配。

而在查詢中我們選擇 使用結(jié)果集resultMap來進行數(shù)據(jù)映射

  <!-- 這里 id 是數(shù)據(jù)庫字段名 #{id}是實體類字段名,sql語句后面不加封號-->
  <select id="selectUser" parameterType="java.lang.Integer" resultMap="BaseResultMap">

而在另一個查詢中,我們在編寫sql語句時,使用了對應(yīng)userMapper文件中,@Param所對應(yīng)的參數(shù)名

 <!-- #{username} 是對應(yīng)mapper接口文件中 @Param注解中的參數(shù)名(防止mapper之間不匹配)-->
   <select id="login" parameterType="java.lang.String" resultMap="BaseResultMap">
       select *from user where user_name=#{username} and user_password=#{password}
   </select>

這里也是為了防止mapper 文件與 xml文件之間匹配出現(xiàn)異常。

userMapper

package wdc.dao;

import org.apache.ibatis.annotations.Param;
import wdc.pojo.User;

public interface UserMapper {
    User selectUser(int id)throws Exception;
    //    登錄
    //    @Param中的參數(shù)名,對應(yīng).xml文件中sql語句#{}中的參數(shù)名(防止mapper之間不匹配)
    User login(@Param("username") String username, @Param("password") String password)throws Exception;
}

這里我們重點解釋一下

@Param注解

這里我們應(yīng)該,采用#{}的方式把@Param注解括號內(nèi)的參數(shù)進行引用

對應(yīng)的是使用方法,上述代碼中明確標(biāo)出。

這里我們也可以不使用@Param注解,前提是數(shù)據(jù)庫字段與實體類字段一一對應(yīng),例如 數(shù)據(jù)庫命名為user_name,而我們的實體類就應(yīng)該使用 駝峰命名 userName,這樣就可以使mybatis將查詢的結(jié)果自發(fā)的進行一一對應(yīng)填充置user 對象中。

但是由于此案例,數(shù)據(jù)庫字段和實體類字段之間的命名方式,使得mybatis 從數(shù)據(jù)庫中查出的字段,不能正常的識別和對應(yīng)正確的實體類字段,于是,我們需要使用@Param注解來指明,我們所要引用的參數(shù)的名稱,方便再mapper.xml文件中,采用#{}的方式把@Param注解括號內(nèi)的參數(shù)進行引用,

這樣會更方便代碼的閱讀,也便于避免一些未知錯誤的發(fā)生。

測試

關(guān)于對象判空,和空指針異常(NullPointer)

@Test
    public void testLogin() throws Exception{
        ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:config/spring-mybatis.xml");
        UserMapper userMapper = (UserMapper) ac.getBean("userMapper");
        User user = null;

            user = userMapper.login("張","123");
            if(user == null)
                System.out.println("沒數(shù)據(jù)");
            else
                System.out.println(user);


    }

這里測試登錄接口后我們發(fā)現(xiàn),當(dāng)沒有數(shù)據(jù)返回時,我們可以直接 使用  user==null 的方式來對 對象進行判空。

而當(dāng)我們在此代碼中,直接將異常使用 try catch 捕捉時,我們發(fā)現(xiàn),當(dāng)對象 user 為空時,控制臺并不會報出異常。

而當(dāng)我們在調(diào)用 user對象的toSring方法時,則會出現(xiàn)NullPoint的空指針異常

小結(jié):

導(dǎo)致mapper 與xml之間出現(xiàn)不匹配的原因主要有:

  • 1. mapper 文件中 方法名與 xml 中查詢語句id 進行匹配
  • 2. mapper 文件中 參數(shù)類型,與xml 文件中的參數(shù)類型匹配
  • 3. mapper 文件中 返回值類型,與xml文件中的 返回值類型匹配
  • 4. XML 文件的 namespace 指定的路徑與 相應(yīng)的實體類對應(yīng)
  • 5. mapper 文件 和xml文件不在同一個包下的,要在配置文件中,將兩個文件的包同時進行掃描

還有一些較為簡單的異常不一一例舉,但說明相應(yīng)原因以供參考:

  • 6. 數(shù)據(jù)庫密碼填寫錯誤
  • 7. 數(shù)據(jù)庫服務(wù)未開啟
  • 8. 數(shù)據(jù)庫路徑 以及亂碼問題

jdbc.url=jdbc:mysql://localhost:3306/blog?characterEncoding=utf-8

Mapper和Mapper.xml的關(guān)系

Category.java

CategoryMapper.java 

這是mapper接口,面向接口編程的思想還是很重要的。也是本次博文最重要的部分。

接口定義有以下特點:

  • Mapper 接口方法名和 CategoryMapper.xml 中定義的每個 sql 的 id 同名。
  • Mapper 接口方法的輸入?yún)?shù)類型和 CategoryMapper.xml 中定義的 sql 的parameterType 類型相同。
  • Mapper 接口的返回類型和 CategoryMapper.xml 中定義的 sql 的 resultType 類型相同

CategoryMapper.xml 

1.xml文件的namespace要寫成mapper接口的路徑。

2.sql的id和mapper中的方法名要對應(yīng)起來,比如下面,mapper中方法名為add,insert的sql標(biāo)簽id也要為add

總結(jié)

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

相關(guān)文章

  • Java泛型 <T> T、 T、<T>的用法小結(jié)

    Java泛型 <T> T、 T、<T>的用法小結(jié)

    T在Java泛型中,被稱作類型變量, 有的方法返回值是<T> T,有的是T,區(qū)別在哪里,本文主要介紹了Java泛型 <T> T、 T、<T>的用法小結(jié),具有一定的參考價值,感興趣的可以了解下
    2023-12-12
  • spring boot + jpa + kotlin入門實例詳解

    spring boot + jpa + kotlin入門實例詳解

    這篇文章主要介紹了spring boot + jpa + kotlin入門實例詳解 ,需要的朋友可以參考下
    2017-07-07
  • mybatis-plus返回查詢總記錄數(shù)方式

    mybatis-plus返回查詢總記錄數(shù)方式

    這篇文章主要介紹了mybatis-plus返回查詢總記錄數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java中Iterator迭代器的簡單理解

    Java中Iterator迭代器的簡單理解

    這篇文章主要介紹了Java中Iterator迭代器的簡單理解,Iterator接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Iterator主要用于迭代訪問Collection中的元素,因此Iterator對象也被稱為迭代器,需要的朋友可以參考下
    2024-01-01
  • Spring?Boot?整合持久層之MyBatis

    Spring?Boot?整合持久層之MyBatis

    在實際開發(fā)中不僅僅是要展示數(shù)據(jù),還要構(gòu)成數(shù)據(jù)模型添加數(shù)據(jù),這篇文章主要介紹了SpringBoot集成Mybatis操作數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Spring?Cloud?Gateway編碼實現(xiàn)任意地址跳轉(zhuǎn)

    Spring?Cloud?Gateway編碼實現(xiàn)任意地址跳轉(zhuǎn)

    這篇文章主要介紹了Spring?Cloud?Gateway編碼實現(xiàn)任意地址跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Spring?Data?JPA注解Entity使用示例詳解

    Spring?Data?JPA注解Entity使用示例詳解

    這篇文章主要為大家介紹了Spring?Data?JPA注解Entity使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java獲取當(dāng)前時間戳案例詳解

    Java獲取當(dāng)前時間戳案例詳解

    這篇文章主要介紹了Java獲取當(dāng)前時間戳案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java實現(xiàn)斗地主之洗牌發(fā)牌

    Java實現(xiàn)斗地主之洗牌發(fā)牌

    這篇文章主要為大家詳細介紹了Java實現(xiàn)斗地主之洗牌發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • java實現(xiàn)鏈表反轉(zhuǎn)

    java實現(xiàn)鏈表反轉(zhuǎn)

    這篇文章主要為大家詳細介紹了java實現(xiàn)鏈表反轉(zhuǎn),分別通過迭代法、遞歸法實現(xiàn)java鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論