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

MyBatis中映射文件的使用案例代碼

 更新時(shí)間:2023年02月06日 08:56:23   作者:一天睡20個(gè)小時(shí)  
這篇文章主要介紹了MyBatis中映射文件的使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Mapper 就是“映射”的意思,Mapper 文件時(shí) Mybatis 中的 SQL 語句的配置文件,其會(huì)在運(yùn)行時(shí)加載 SQL 語句并映射相應(yīng)參數(shù)。在 Mybatis 的全局配置文件中,其中最后一項(xiàng)就是 mapper 文件的資源路徑的配置,因?yàn)閯?chuàng)建 SqlSessionFactory 時(shí)會(huì)加載全局配置文件,這說明 Mapper 映射文件會(huì)在創(chuàng)建伊始就會(huì)被加載了。本文重點(diǎn)講解MyBatis映射文件的使用。

MyBatis中映射文件的使用

1、配置核心文件

①引入映射文件

? 首先我們得在核心配置文件中配置mappers,引入映射文件所在的包

<mappers>
      <package name="com.ch.mybatis.mapper"></package>
</mappers>

這里必須滿足兩個(gè)條件

  • 接口和映射文件所在的包必須一致
  • 接口的名字和映射文件的名字必須一致

在這里插入圖片描述

②配置typeAliases

typeAliases:設(shè)置類型別名,即為某個(gè)具體的類型設(shè)置一個(gè)別名。在MyBatis的范圍中,就可以使用別名表示一個(gè)具體的類型。

在核心配置文件中設(shè)置typeAliases,在映射文件中則可以直接使用別名。

  • 通過包設(shè)置類型別名,指定包下所有的類型將全部有用默認(rèn)的別名,即類名且不區(qū)分大小寫 。
  • 要注意標(biāo)簽的先后順序
<!--
		標(biāo)簽的先后順序
        properties?,settings?,typeAliases?,typeHandlers?,
        objectFactory?,objectWrapperFactory?,reflectorFactory?,
        plugins?,environments?,databaseIdProvider?,mappers?
    -->
<typeAliases>
        <package name="com.ch.mybatis.pojo"></package>
</typeAliases>

③配置映射文件

namespace接口的全類名和映射文件namespace一致。

<mapper namespace="com.ch.mybatis.mapper.userMapper">
    
</mapper>

2、MyBatis的增刪改查

創(chuàng)建數(shù)據(jù)表

復(fù)制進(jìn)MySQL數(shù)據(jù)庫(kù)中運(yùn)行即可

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `gender` char(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

在這里插入圖片描述

工具類

? 創(chuàng)建一個(gè)工具類,每次測(cè)試就不用去重新寫,直接調(diào)用獲取返回值即可

    public static SqlSession getSqlSession() {

        SqlSession sqlSession = null;
        try {
            //獲取核心配置文件
            InputStream is = Resources.getResourceAsStream("MyBatis-config.xml");

            //獲取SqlSessionFactoryBuilder對(duì)象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

            //根據(jù)核心配置文件對(duì)應(yīng)的輸入流獲取SqlSessionFactory對(duì)象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);

            //獲取SqlSession對(duì)象 自動(dòng)提交
            sqlSession = sqlSessionFactory.openSession(true);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }

添加

首先得在Mapper接口中創(chuàng)建方法

int insertUser();

在映射文件中使用insert標(biāo)簽,標(biāo)簽中的id要與接口中的方法名保持一致。等調(diào)用接口中的方法,它會(huì)根據(jù)mapper接口的全類名找到映射文件,然后會(huì)根據(jù)我們調(diào)用的方法的方法名,來找到當(dāng)前的sql語句,然后獲取當(dāng)前的sql來執(zhí)行。

可以將接口的方法寫在標(biāo)簽的上方,方便查看。

    <!-- int insertUser(); -->
    <insert id="insertUser">
        insert into t_user
        values (null, 'admin', '123456', 23, '男', '12345@qq.com')
    </insert>

測(cè)試代碼

    public void testinsert(){

        SqlSession sqlSession = sqlSessionUtil.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int i = mapper.insertUser();

        sqlSession.close();

    }

修改

<!--  void updateUser();  -->
<update id="updateUser">
    update t_user set username='root',password='123'where id = 1
</update>

刪除

    <!-- void deleteUser(); -->
    <delete id="deleteUser">
        delete from t_user where id = 1
    </delete>

查詢

查詢比較特殊除了得設(shè)置id還必須得設(shè)置另外一個(gè)參數(shù)resultType或resultMap

resultType:設(shè)置結(jié)果類型,即查詢的數(shù)據(jù)要轉(zhuǎn)換為的java的類型
resultMap:自定義映射,處理多對(duì)一或一對(duì)多的映射關(guān)系

resultType中應(yīng)該寫實(shí)體類的全類名,但是在核心文件中配置了typeAliases,所以這里可以直接寫實(shí)體類的名字不區(qū)分大小寫

 <!-- User selectUser();-->
<select id="selectUser" resultType="user">
    select id, username, password, age, gender, email from t_user where id = 1
</select>

3、MyBatis獲取參數(shù)值的兩種方式

MyBatis獲取參數(shù)值的兩種方式:${}#{}

${}的本質(zhì)就是字符串拼接,#{}的本質(zhì)就是占位符賦值

${}使用字符串拼接的方式拼接sql,若為字符串類型或日期類型的字段進(jìn)行賦值時(shí),需要手動(dòng)加單引號(hào);
但是#{}使用占位符賦值的方式拼接sql,此時(shí)為字符串類型或日期類型的字段進(jìn)行賦值時(shí), 可以自動(dòng)添加單引號(hào)

單個(gè)字面量類型的參數(shù)

<!-- User getUserByUsername(String username); -->
<select id="getUserByUsername" resultType="user">
<!-- select * from t_user where username = #{username}-->
    select * from t_user where username = '${username}'
</select>

mapper接口方法的參數(shù)為單個(gè)的字面量類型此時(shí)可以通過#{}${}以任意的內(nèi)容獲取參數(shù)值,一定要注意${}的單引號(hào)問題

多個(gè)字面量類型的參數(shù)

<!-- User chekLogin(String username , String password); -->
<select id="chekLogin" resultType="user">
 <!-- select * from t_user where username = #{arg0} and password = #{arg1}-->
    select * from t_user where username = '${param1}' and password = '${param2}'
</select>

mybatis會(huì)自動(dòng)把當(dāng)前參數(shù)放在一個(gè)Map集合中

放在Map集合中會(huì)以兩種方式存儲(chǔ)數(shù)據(jù)

①arg0,arg1…為鍵,以參數(shù)為值

②param1,param2…為鍵,以參數(shù)為值

map集合類型的參數(shù)

<!-- User chekLoginByMap(Map<String,Object> map);-->
<select id="chekLoginByMap" resultType="user">
    select * from t_user where username = #{username} and password = #{password}
</select>

mapper接口方法的參數(shù)為map集合類型的參數(shù)

只需要通過#{}和${}范圍map集合的鍵,

就可以獲取相對(duì)于的值,一定要注意${}的單引號(hào)問題

測(cè)試代碼

    public void testChekLoginByMap() {
        SqlSession sqlSession = sqlSessionUtil.getSqlSession();

        userMapper mapper = sqlSession.getMapper(userMapper.class);

        Map map = new HashMap<String, Object>();

        map.put("username", "admin");
        map.put("password", "123456");

        User admin = mapper.chekLoginByMap(map);
        System.out.println(admin);
    }

實(shí)體類類型的參數(shù)

<!-- void selectUser(User User); -->
<insert id="selectUser">
    insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>

mapper接口方法的參數(shù)為實(shí)體類類型的參數(shù)

只需要通過#{}和${}訪問實(shí)體類中的屬性名,

就可以獲取相對(duì)于的屬性值,一定要注意${}的單引號(hào)問題

使用@Param標(biāo)識(shí)參數(shù)

<!-- User chekLoginByUser(@Param("username") String username ,@Param("password") String password); -->
<select id="chekLoginByUser" resultType="user">
    select * from t_user where username = #{username} and password = #{password}
</select>

可以在mapper接口將這些參數(shù)上設(shè)置@param注解

此時(shí)MyBatis會(huì)將這些參數(shù)放在map中,以@Param注解的value屬性值為鍵,以參數(shù)為值;

到此這篇關(guān)于MyBatis中映射文件的使用的文章就介紹到這了,更多相關(guān)MyBatis映射文件的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中hashCode方法與equals方法的用法總結(jié)

    java中hashCode方法與equals方法的用法總結(jié)

    總的來說,Java中的集合(Collection)有兩類,一類是List,再有一類是Set。前者集合內(nèi)的元素是有序的,元素可以重復(fù);后者元素?zé)o序,但元素不可重復(fù)
    2013-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-06-06
  • SpringBoot實(shí)現(xiàn)事件監(jiān)聽(異步執(zhí)行)的示例代碼

    SpringBoot實(shí)現(xiàn)事件監(jiān)聽(異步執(zhí)行)的示例代碼

    事件監(jiān)聽是一種機(jī)制,可以定義和觸發(fā)自定義的事件,以及在應(yīng)用程序中注冊(cè)監(jiān)聽器來響應(yīng)這些事件,本文主要介紹了SpringBoot實(shí)現(xiàn)事件監(jiān)聽(異步執(zhí)行)的示例代碼,感興趣的可以了解一下
    2024-08-08
  • gradle和maven有哪些區(qū)別

    gradle和maven有哪些區(qū)別

    這篇文章主要介紹了gradle和maven有哪些區(qū)別,幫助大家更好的理解和選擇java程序的構(gòu)建工具,感興趣的朋友可以了解下
    2021-01-01
  • MyBatis批量查詢、插入、更新、刪除的實(shí)現(xiàn)示例

    MyBatis批量查詢、插入、更新、刪除的實(shí)現(xiàn)示例

    由于需要處理短時(shí)間內(nèi)大量數(shù)據(jù)入庫(kù)的問題,想到了Mybatis的批量操作,本文主要介紹了MyBatis批量查詢、插入、更新、刪除的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2023-05-05
  • shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析

    shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析

    今天小編就為大家分享一篇關(guān)于shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解

    基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解

    下面小編就為大家?guī)硪黄贘ava中進(jìn)制的轉(zhuǎn)換函數(shù)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法

    springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法

    本文主要介紹了springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法,該報(bào)錯(cuò)表明掃描不到Mapper層,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Spring MVC注解式開發(fā)使用詳解

    Spring MVC注解式開發(fā)使用詳解

    本篇文章主要介紹了Spring MVC注解式開發(fā)使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java?Autowired注解深入分析

    Java?Autowired注解深入分析

    @Autowired注解是Spring中非常重要且常見的,接下來就簡(jiǎn)要的介紹一下它的用法。@Autowired默認(rèn)是通過set方法,按照類型自動(dòng)裝配JavaBean,set方法可省略不寫,它主要是修飾在成員變量上
    2023-01-01

最新評(píng)論

温宿县| 饶阳县| 安吉县| 将乐县| 马尔康县| 丰城市| 新宁县| 邢台市| 尼勒克县| 建阳市| 兴业县| 独山县| 云安县| 长垣县| 徐汇区| 武安市| 阳朔县| 奎屯市| 梓潼县| 阳东县| 宿迁市| 汨罗市| 和平县| 贡觉县| 从江县| 侯马市| 泰兴市| 柳林县| 光山县| 金沙县| 德州市| 河源市| 金寨县| 政和县| 锡林浩特市| 梅州市| 柞水县| 耿马| 土默特左旗| 达尔| 区。|