Mybatisday02

<meta charset="utf-8">

特殊情況示栗:

修改實體類

package com.neusoft.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * @author Eric Lee
 * @date 2020/9/3 09:45
 */
public class User  implements Serializable {

    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userBirthday=" + userBirthday +
                ", userSex='" + userSex + '\'' +
                ", userAddress='" + userAddress + '\'' +
                '}';
    }
}

image

我們運行 findAll() 查詢結(jié)果如下

image

查出上面結(jié)果的原因是數(shù)據(jù)庫字段與實體類沒有對應(yīng), usename可以封裝原因是window系統(tǒng)mysql數(shù)據(jù)不區(qū)分大小寫

解決方案1查詢時候起別名

<!--        查詢所有-->
 <select id="findAll" resultType="com.neusoft.domain.User">
            select id as userId, username as userName, sex as userSex , birthday as userBirthday, address as userAddress from  user
  </select>

解決方案2 使用resultMap

<!--    配置查詢結(jié)果的列名和實體屬性名的對應(yīng)關(guān)系-->
<!--    id 給定一個唯一標(biāo)識砂心, 是給select標(biāo)簽引用用的-->
<!--    type是指 實體類的全限定類名-->
    <resultMap id="userMap" type="com.neusoft.domain.User">
<!--        id標(biāo)簽 主鍵字段的對應(yīng)-->

        <id property="userId" column="id"></id>
<!--       result標(biāo)簽 用于指定非主鍵  , column是數(shù)據(jù)庫中列名-->
<!--        property 用于指定實體類屬性名名稱-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>

完整的IUserDao.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.neusoft.dao.IUserDao">

<!--    配置查詢結(jié)果的列名和實體屬性名的對應(yīng)關(guān)系-->
<!--    id 給定一個唯一標(biāo)識柬泽, 是給select標(biāo)簽引用用的-->
<!--    type是指 實體類的全限定類名-->
    <resultMap id="userMap" type="com.neusoft.domain.User">
<!--        id標(biāo)簽 主鍵字段的對應(yīng)-->

        <id property="userId" column="id"></id>
<!--       result標(biāo)簽 用于指定非主鍵  , column是數(shù)據(jù)庫中列名-->
<!--        property 用于指定實體類屬性名名稱-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>

<!--&lt;!&ndash;        查詢所有&ndash;&gt;-->
<!--        <select id="findAll" resultType="com.neusoft.domain.User">-->
<!--            select id as userId, username as userName, sex as userSex , birthday as userBirthday, address as userAddress from  user-->
<!--        </select>-->
    <!--        查詢所有-->
<!--    <select id="findAll" resultType="com.neusoft.domain.User">-->
    <select id="findAll" resultMap="userMap">
            select * from  user
        </select>
<!--&lt;!&ndash;        通過id進行查詢&ndash;&gt;-->
<!--        <select id="findById" parameterType="INT" resultType="com.neusoft.domain.User">-->
        <select id="findById" parameterType="INT" resultMap="userMap">
            select * from user where id = #{uid}
        </select>

<!--        保存用戶-->
<!--    savaUser-->
    <insert id="savaUser"  parameterType="com.neusoft.domain.User">
--         配置保存時獲取插入id keyColumn數(shù)據(jù)庫中的列名 keyProperty實體類
        <selectKey keyColumn="id" keyProperty="userId" resultType="INT">
            select  last_insert_id();
        </selectKey>
        insert into user (username, birthday, sex, address)
         values (#{userName},#{userBirthday} ,#{userSex},#{userAddress})
    </insert>

<!--    更新用戶-->
    <update id="updateUser" parameterType="com.neusoft.domain.User">
        update user set username = #{userName},birthday=#{userBirthday},
        sex=#{userSex}, address=#{userAddress} where id = #{userId}
    </update>
<!--刪除用戶-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user  where id = #{id}
    </delete>

<!--    根據(jù)姓名進行模糊查詢-->
<!--    <select id="findByName" parameterType="java.lang.String" resultType="com.neusoft.domain.User">-->
    <select id="findByName" parameterType="java.lang.String" resultMap="userMap">
        select * from user where username like #{username};
    </select>
<!--    查詢總記錄數(shù)-->
    <select id="findTotal" resultType="java.lang.Integer">
        select count(*) from user;
    </select>

</mapper>

面試題 #{} 與${} 區(qū)別

{} 表示一個占位符號

通過#{}可以實現(xiàn) preparedStatement 向占位符中設(shè)置值方椎,自動進行 java 類型和 jdbc 類型轉(zhuǎn)換聂抢,

{}可以有效防止 sql 注入。 #{}可以接收簡單類型值或 pojo 屬性值棠众。 如果 parameterType 傳輸單個簡單類型值琳疏,#{}括號中可以是 value 或其它名稱。

[圖片上傳失敗...(image-947738-1599438087294)]

{}可以將 parameterType 傳入的內(nèi)容拼接在 sql中且不進行 jdbc 類型轉(zhuǎn)換闸拿, [圖片上傳失敗...(image-82ec10-1599438087294)]

{}括號中只能是 value

在sqlmapconfigure.xml中配置參數(shù)別名

    <typeAliases>
<!--        單個類起別名-->
<!--        <typeAlias type="com.neusoft.domain.User" alias="user"></typeAlias>-->
<!--        配置起別名的包 當(dāng)指定之后空盼, 該包下的實體類都會注冊別名,并且類名就是別名新荤,不區(qū)分大小寫-->
        <package name="com.neusoft.domain"/>
    </typeAliases>

對應(yīng)的IUserDao.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.neusoft.dao.IUserDao">

<!--    配置查詢結(jié)果的列名和實體屬性名的對應(yīng)關(guān)系-->
<!--    id 給定一個唯一標(biāo)識揽趾, 是給select標(biāo)簽引用用的-->
<!--    type是指 實體類的全限定類名-->
    <resultMap id="userMap" type="user">
<!--        id標(biāo)簽 主鍵字段的對應(yīng)-->

        <id property="userId" column="id"></id>
<!--       result標(biāo)簽 用于指定非主鍵  , column是數(shù)據(jù)庫中列名-->
<!--        property 用于指定實體類屬性名名稱-->
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>

<!--&lt;!&ndash;        查詢所有&ndash;&gt;-->
<!--        <select id="findAll" resultType="com.neusoft.domain.User">-->
<!--            select id as userId, username as userName, sex as userSex , birthday as userBirthday, address as userAddress from  user-->
<!--        </select>-->
    <!--        查詢所有-->
<!--    <select id="findAll" resultType="com.neusoft.domain.User">-->
    <select id="findAll" resultMap="userMap">
            select * from  user
        </select>
<!--&lt;!&ndash;        通過id進行查詢&ndash;&gt;-->
<!--        <select id="findById" parameterType="INT" resultType="com.neusoft.domain.User">-->
        <select id="findById" parameterType="INT" resultMap="userMap">
            select * from user where id = #{uid}
        </select>

<!--        保存用戶-->
<!--    savaUser-->
    <insert id="savaUser"  parameterType="user">
--         配置保存時獲取插入id keyColumn數(shù)據(jù)庫中的列名 keyProperty實體類
        <selectKey keyColumn="id" keyProperty="userId" resultType="INT">
            select  last_insert_id();
        </selectKey>
        insert into user (username, birthday, sex, address)
         values (#{userName},#{userBirthday} ,#{userSex},#{userAddress})
    </insert>

<!--    更新用戶-->
    <update id="updateUser" parameterType="user">
        update user set username = #{userName},birthday=#{userBirthday},
        sex=#{userSex}, address=#{userAddress} where id = #{userId}
    </update>
<!--刪除用戶-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user  where id = #{id}
    </delete>

<!--    根據(jù)姓名進行模糊查詢-->
<!--    <select id="findByName" parameterType="java.lang.String" resultType="com.neusoft.domain.User">-->
<!--        select * from user where username like '%${value}%';
-->
    <select id="findByName" parameterType="java.lang.String" resultMap="userMap">
            select * from user where username like #{username};
    </select>
<!--    查詢總記錄數(shù)-->
    <select id="findTotal" resultType="java.lang.Integer">
        select count(*) from user;
    </select>

</mapper>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苛骨,一起剝皮案震驚了整個濱河市篱瞎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痒芝,老刑警劉巖俐筋,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異严衬,居然都是意外死亡澄者,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門请琳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粱挡,“玉大人,你說我怎么就攤上這事俄精⊙ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵竖慧,是天一觀的道長屈留。 經(jīng)常有香客問我,道長测蘑,這世上最難降的妖魔是什么灌危? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮碳胳,結(jié)果婚禮上勇蝙,老公的妹妹穿的比我還像新娘挨约。我一直安慰自己产雹,他們只是感情好蔓挖,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布瘟判。 她就那樣靜靜地躺著拷获,像睡著了一般减细。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上未蝌,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天萧吠,我揣著相機與錄音,去河邊找鬼。 笑死九昧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铸鹰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼展姐,長吁一口氣:“原來是場噩夢啊……” “哼剖毯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逊谋,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤胶滋,失蹤者是張志新(化名)和其女友劉穎悲敷,沒想到半個月后后德,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瓢湃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年箱季,在試婚紗的時候發(fā)現(xiàn)自己被綠了藏雏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掘殴,死狀恐怖奏寨,靈堂內(nèi)的尸體忽然破棺而出鹰服,到底是詐尸還是另有隱情,我是刑警寧澤套菜,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布设易,位于F島的核電站,受9級特大地震影響戏溺,放射性物質(zhì)發(fā)生泄漏屠尊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一肋僧、第九天 我趴在偏房一處隱蔽的房頂上張望嫌吠。 院中可真熱鬧,春花似錦辫诅、人聲如沸炕矮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邢滑。三九已至,卻和暖如春困后,著一層夾襖步出監(jiān)牢的瞬間乐纸,已是汗流浹背摇予。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工宁昭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酗宋。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像斥扛,于是被迫代替她去往敵國和親丹锹。 傳聞我的和親對象是個殘疾皇子芬失,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348