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

Mybatis查詢數(shù)據(jù)的項目實現(xiàn)

 更新時間:2023年09月08日 10:40:28   作者:Mointor  
MyBatis通過XML配置文件或注解,把Java對象映射到對應(yīng)的數(shù)據(jù)庫表中,實現(xiàn)對象關(guān)系和數(shù)據(jù)關(guān)系的互相轉(zhuǎn)換,從而使得Java應(yīng)用程序能夠更簡單的操作和讀取數(shù)據(jù)庫,本文就詳細(xì)的介紹一下如何實現(xiàn),感興趣的可以了解一下

上一篇我們介紹了在pom文件中引入mybatis依賴,配置了mybatis配置文件,通過讀取配置文件創(chuàng)建了會話工廠,使用會話工廠創(chuàng)建會話獲取連接對象讀取到了數(shù)據(jù)庫的基本信息。

如果您需要對上面的內(nèi)容進(jìn)行了解,可以參考Mybatis引入與使用

 本篇我們在上一篇的基礎(chǔ)上了解如果使用mybatis查詢數(shù)據(jù):

一、準(zhǔn)備數(shù)據(jù)

這里我們直接使用腳本初始化數(shù)據(jù)庫中的數(shù)據(jù)

-- 如果數(shù)據(jù)庫不存在則創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切換數(shù)據(jù)庫
USE demo;
-- 創(chuàng)建用戶表
CREATE TABLE IF NOT EXISTS T_USER(
  ID INT PRIMARY KEY,
  USERNAME VARCHAR(32) NOT NULL,
  AGE INT NOT NULL 
);
-- 插入用戶數(shù)據(jù)
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, '張三', 20),(2, '李四', 22),(3, '王五', 24);

創(chuàng)建了一個名稱為demo的數(shù)據(jù)庫;并在庫里創(chuàng)建了名稱為T_USER的用戶表并向表中插入了數(shù)據(jù)

二、創(chuàng)建用戶實體類

在cn.horse.demo2包下創(chuàng)建UserInfo實體類,為了方便打印用戶的信息這里重寫了ToString()方法

package cn.horse.demo2;
public class UserInfo {
    private int id;
    private String username;
    private int age;
    @Override
    public String toString() {
        StringBuilder result = new StringBuilder();
        result.append('[');
        result.append("id: " + this.id);
        result.append(", ");
        result.append("username: " + this.username);
        result.append(", ");
        result.append("age: " + this.age);
        result.append(']');
        return result.toString();
    }
}

三、配置Mapper文件

這里我在resources下創(chuàng)建了一個demo2的目錄,并在目錄下創(chuàng)建了一個UserInfoMapper.xml的配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserInfoMapper">
    <select id="findById" resultType="cn.horse.demo2.UserInfo">
        SELECT *
        FROM T_USER
        WHERE ID = #{id}
    </select>
    <select id="findAll" resultType="cn.horse.demo2.UserInfo">
        SELECT *
        FROM T_USER
    </select>
</mapper>
  • namespace代表的是名稱空間;如果有多個Mapper配置文件,名稱空間不允許重復(fù)
  • select查詢標(biāo)簽;
    • id代表的是編號,同一個名稱空間下編號不允許重復(fù);
    • resultType代表的是結(jié)果類型,指將數(shù)據(jù)庫查詢出來的數(shù)據(jù)轉(zhuǎn)換成結(jié)果類型對象,轉(zhuǎn)換的前提是結(jié)果類型需要提供無參數(shù)的構(gòu)造方法(用于創(chuàng)建結(jié)果類型對象),數(shù)據(jù)庫中的列需要與結(jié)果類型中的字段一一對應(yīng)(使用反射的方式進(jìn)行對象中字段的賦值),否則無法創(chuàng)建結(jié)果類型對象或者無法將數(shù)據(jù)綁定到結(jié)果類型對象的字段上。
    • 標(biāo)簽內(nèi)容是SQL語句,代表使用ID查詢用戶信息,其中#{id}是參數(shù);在執(zhí)行當(dāng)前查詢語句時需要攜帶此參數(shù)。

四、引入Mapper配置

Mapper配置完成后,并沒有生效;需要在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="jdbc:mysql://${ip}:${port}/${database}?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="demo2/UserInfoMapper.xml" />
    </mappers>
</configuration>

其中mapper標(biāo)簽是我們引入的配置,resource用于指向Mapper配置文件的位置。

五、查詢一條數(shù)據(jù)

// 讀取mybatis配置文件
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
// 根據(jù)配置創(chuàng)建SqlSession工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);
SqlSession sqlSession = null;
try {
    // 創(chuàng)建SqlSession
    sqlSession = sqlSessionFactory.openSession();
    // 根據(jù)用戶編號查詢一條用戶信息
    UserInfo userInfo = sqlSession.selectOne("UserInfoMapper.findById", 2);
    System.out.println(userInfo);
} finally {
    // 關(guān)閉會話
    if(Objects.nonNull(sqlSession)) {
        sqlSession.close();
    }
}

代碼中我們使用selectOne查詢一條數(shù)據(jù):

第一個參數(shù)代表的是語句,其實就是【名稱空間.編號】,根據(jù)名稱空間和編號可以找到我們在Mapper配置文件中配置的SQL語句

第二個參數(shù)代表的是參數(shù)值,用于解析SQL語句中的參數(shù)

測試:

執(zhí)行上面代碼的結(jié)果如下:

 查詢的結(jié)果與我們庫中的數(shù)據(jù)一致。

六、查詢數(shù)據(jù)列表

// 讀取mybatis配置文件
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
// 根據(jù)配置創(chuàng)建SqlSession工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);
SqlSession sqlSession = null;
try {
    // 創(chuàng)建SqlSession
    sqlSession = sqlSessionFactory.openSession();
    // 查詢數(shù)據(jù)列表
    List<UserInfo> userInfoList = sqlSession.selectList("UserInfoMapper.findAll");
    for (UserInfo userInfo: userInfoList) {
        System.out.println(userInfo);
    }
} finally {
    // 關(guān)閉會話
    if(Objects.nonNull(sqlSession)) {
        sqlSession.close();
    }
}

代碼中我們使用selectList查詢數(shù)據(jù)列表,由于沒有使用到參數(shù),所以沒有傳遞任何參數(shù)

測試:

執(zhí)行上面代碼的結(jié)果如下:

查詢的結(jié)果與我們庫中的數(shù)據(jù)一致。

七、查詢數(shù)據(jù)Map

// 讀取mybatis配置文件
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
// 根據(jù)配置創(chuàng)建SqlSession工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);
SqlSession sqlSession = null;
try {
    // 創(chuàng)建SqlSession
    sqlSession = sqlSessionFactory.openSession();
    // 查詢數(shù)據(jù)列表
    Map<Integer, UserInfo> userInfoMap = sqlSession.selectMap("UserInfoMapper.findAll", "id");
    for (Map.Entry<Integer, UserInfo> entry: userInfoMap.entrySet()) {
        System.out.println(entry.getKey() + " -> " + entry.getValue());
    }
} finally {
    // 關(guān)閉會話
    if(Objects.nonNull(sqlSession)) {
        sqlSession.close();
    }
}

代碼中我們使用selectMap查詢數(shù)據(jù)Map,這里需要指定哪個字段作為Map的Key,這里我是用id字段作為Map的Key;這樣可以直接得到用戶編號到用戶對象的Map集合。

需要注意的是Map的Key字段來源于返回類型中的字段而不是數(shù)據(jù)庫中表的列字段

測試:

執(zhí)行上面代碼的結(jié)果如下:

查詢的結(jié)果與我們庫中的數(shù)據(jù)一致。

八、使用結(jié)果處理器查詢數(shù)據(jù)

// 讀取mybatis配置文件
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
// 根據(jù)配置創(chuàng)建SqlSession工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);
SqlSession sqlSession = null;
try {
    // 創(chuàng)建SqlSession
    sqlSession = sqlSessionFactory.openSession();
    // 查詢數(shù)據(jù)列表
    sqlSession.select("UserInfoMapper.findAll", new ResultHandler<UserInfo>() {
        @Override
        public void handleResult(ResultContext<? extends UserInfo> resultContext) {
            System.out.println(resultContext.getResultObject());
        }
    });
} finally {
    // 關(guān)閉會話
    if(Objects.nonNull(sqlSession)) {
        sqlSession.close();
    }
}

代碼中我們使用select查詢數(shù)據(jù),此方法沒有返回值,而是使用ResultHandler匿名內(nèi)部類直接對每條數(shù)據(jù)進(jìn)行處理

測試:

執(zhí)行上面代碼的結(jié)果如下:

查詢的結(jié)果與我們庫中的數(shù)據(jù)一致。

九、使用游標(biāo)查詢數(shù)據(jù)

// 讀取mybatis配置文件
InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
// 根據(jù)配置創(chuàng)建SqlSession工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);
SqlSession sqlSession = null;
Cursor<UserInfo> cursor = null;
try {
    // 創(chuàng)建SqlSession
    sqlSession = sqlSessionFactory.openSession();
    // 查詢數(shù)據(jù)列表
    cursor = sqlSession.selectCursor("UserInfoMapper.findAll");
    for (Iterator<UserInfo> it = cursor.iterator(); it.hasNext();) {
        System.out.println(it.next());
    }
} finally {
    // 關(guān)閉游標(biāo)
    if(Objects.nonNull(cursor)) {
        try {
            cursor.close();
        } catch (IOException e) { }
    }
    // 關(guān)閉會話
    if(Objects.nonNull(sqlSession)) {
        sqlSession.close();
    }
}

代碼中我們使用selectCursor查詢數(shù)據(jù),此方法返回一個游標(biāo)對象,使用迭代器獲取數(shù)據(jù)列表。

需要注意的是游標(biāo)對象需要關(guān)閉

測試:

執(zhí)行上面代碼的結(jié)果如下:

查詢的結(jié)果與我們庫中的數(shù)據(jù)一致。

到此這篇關(guān)于Mybatis查詢數(shù)據(jù)的項目實踐的文章就介紹到這了,更多相關(guān)Mybatis查詢數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java 中操作 Map時高效遍歷和安全刪除數(shù)據(jù)的方法

    在Java 中操作 Map時高效遍歷和安全刪除數(shù)據(jù)的方法

    本文介紹Java中高效遍歷和安全刪除Map的四種方式及三種刪除策略,強(qiáng)調(diào)避免并發(fā)修改異常需使用Iterator或removeIf,性能優(yōu)化建議根據(jù)Map類型選擇遍歷方法,并提供完整示例代碼,感興趣的朋友一起看看吧
    2025-06-06
  • java中GZIP壓縮解壓類使用實例

    java中GZIP壓縮解壓類使用實例

    這篇文章主要介紹了java中GZIP壓縮解壓類使用實例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 關(guān)于SpringBoot中的XA事務(wù)詳解

    關(guān)于SpringBoot中的XA事務(wù)詳解

    這篇文章主要介紹了關(guān)于SpringBoot中的XA事務(wù)詳解,事務(wù)管理可以確保數(shù)據(jù)的一致性和完整性,同時也可以避免數(shù)據(jù)丟失和沖突等問題。在分布式環(huán)境中,XA?事務(wù)是一種常用的事務(wù)管理方式,需要的朋友可以參考下
    2023-07-07
  • Java單列集合Collection常用方法示例詳解

    Java單列集合Collection常用方法示例詳解

    這篇文章主要介紹了Java單列集合Collection常用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Spring Boot 入門之消息中間件的使用

    Spring Boot 入門之消息中間件的使用

    本篇文章主要介紹了Spring Boot 入門之消息中間件的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 詳解Java中native方法的使用

    詳解Java中native方法的使用

    native是與C++聯(lián)合開發(fā)的時候用的!使用native關(guān)鍵字說明這個方法是原生函數(shù),也就是這個方法是用C/C++語言實現(xiàn)的,并且被編譯成了DLL,由java去調(diào)用。本文給大家介紹java 中native方法使用,感興趣的朋友一起看看吧
    2020-09-09
  • java定義受限制的類型參數(shù)操作

    java定義受限制的類型參數(shù)操作

    這篇文章主要介紹了java定義受限制的類型參數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java中進(jìn)程與線程的區(qū)別

    Java中進(jìn)程與線程的區(qū)別

    這篇文章主要介紹了Java進(jìn)程與線程的區(qū)別,進(jìn)程(Process)是操作系統(tǒng)分配資源的基本單位,線程(Thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的基本單位,下文更多兩者區(qū)別。需要的小伙伴可以參考一下
    2022-05-05
  • 使用JDBC工具類實現(xiàn)簡單的登錄管理系統(tǒng)

    使用JDBC工具類實現(xiàn)簡單的登錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了使用JDBC工具類實現(xiàn)簡單的登錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 聊聊SpringBoot中組件無法被注入的問題

    聊聊SpringBoot中組件無法被注入的問題

    這篇文章主要介紹了SpringBoot中組件無法被注入的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

临安市| 景德镇市| 吉安县| 师宗县| 屏山县| 保靖县| 新巴尔虎右旗| 闽清县| 和田县| 社旗县| 彭水| 嵩明县| 北京市| 诸城市| 元阳县| 华池县| 界首市| 响水县| 北海市| 平南县| 如东县| 翁牛特旗| 桦甸市| 牡丹江市| 景德镇市| 太谷县| 准格尔旗| 四子王旗| 仁寿县| 洪泽县| 牟定县| 安平县| 南岸区| 霸州市| 东方市| 泸水县| 达拉特旗| 双辽市| 遂溪县| 榆林市| 新泰市|