欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用方法

 更新時(shí)間:2023年09月28日 11:00:32   作者:stormjun  
MyBatis可能很多人都一直在用,但是MyBatis的SQL執(zhí)行流程可能并不是所有人都清楚了,下面這篇文章主要給大家介紹了關(guān)于MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用的相關(guān)資料,需要的朋友可以參考下

引言

MyBatis 是一個(gè)基于 Java 的持久層框架,它提供了多種方式來(lái)執(zhí)行 SQL 語(yǔ)句,包括直接使用 SqlSession 執(zhí)行、使用映射器(Mapper)執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。本文將介紹 MyBatis 中常見(jiàn)的 SQL 執(zhí)行方式及其使用方法。

1. 直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句

在 MyBatis 中,可以通過(guò) SqlSession 對(duì)象直接執(zhí)行 SQL 語(yǔ)句。SqlSession 是 MyBatis 的核心類(lèi)之一,它負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互和管理事務(wù)。SqlSession 提供了多個(gè)方法來(lái)執(zhí)行 SQL 語(yǔ)句,比如 selectOne、selectList、insert、update 和 delete 等。下面是一個(gè)簡(jiǎn)單的示例:

public class MyBatisTest {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            // 執(zhí)行查詢(xún)語(yǔ)句
            User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1);
            System.out.println(user);
            // 執(zhí)行插入語(yǔ)句
            User newUser = new User();
            newUser.setName("Tom");
            newUser.setAge(20);
            int result = sqlSession.insert("com.example.mapper.UserMapper.addUser", newUser);
            System.out.println(result);
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
}

在上面的示例代碼中,首先讀取了配置文件 mybatis-config.xml,然后通過(guò) SqlSessionFactoryBuilder 將配置文件解析為 SqlSessionFactory 對(duì)象,最后通過(guò) SqlSessionFactory 創(chuàng)建 SqlSession 對(duì)象。在 SqlSession 中,可以通過(guò) selectOne、selectList、insert、update 和 delete 等方法執(zhí)行 SQL 語(yǔ)句。其中,selectOne 方法用于查詢(xún)單個(gè)結(jié)果,selectList 方法用于查詢(xún)多個(gè)結(jié)果,insert、update 和 delete 方法用于執(zhí)行更新或刪除操作。這些方法的第一個(gè)參數(shù)為 SQL 語(yǔ)句的 ID,格式為 “namespace.statementId”,其中 namespace 為映射器的命名空間,statementId 為 SQL 語(yǔ)句的 ID。

2. 使用映射器(Mapper)執(zhí)行 SQL 語(yǔ)句

除了直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句外,還可以通過(guò)映射器(Mapper)執(zhí)行 SQL 語(yǔ)句。映射器是 MyBatis 中用于定義 SQL 語(yǔ)句和 Java 對(duì)象之間映射關(guān)系的接口,它可以通過(guò) XML 或注解的方式進(jìn)行定義。下面是一個(gè)簡(jiǎn)單的映射器示例:

public interface UserMapper {
    // 查詢(xún)用戶(hù)信息
    User getUserById(int id);
    // 添加用戶(hù)信息
    int addUser(User user);
}

在上面的示例代碼中,定義了一個(gè)名為 UserMapper 的映射器接口,其中包含了兩個(gè)方法:getUserById 和 addUser。這兩個(gè)方法的實(shí)現(xiàn)方式與直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句的方式類(lèi)似,只不過(guò)將 SQL 語(yǔ)句和參數(shù)映射的工作放在了映射器接口中。下面是一個(gè)使用映射器執(zhí)行 SQL 語(yǔ)句的示例:

public class MyBatisTest {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 執(zhí)行查詢(xún)語(yǔ)句
            User user = userMapper.getUserById(1);
            System.out.println(user);
            // 執(zhí)行插入語(yǔ)句
            User newUser = new User();
            newUser.setName("Tom");
            newUser.setAge(20);
            int result = userMapper.addUser(newUser);
            System.out.println(result);
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
}

在上面的示例代碼中,首先讀取了配置文件 mybatis-config.xml,然后通過(guò) SqlSessionFactoryBuilder 將配置文件解析為SqlSessionFactory 對(duì)象,最后通過(guò) SqlSessionFactory 創(chuàng)建 SqlSession 對(duì)象。在 SqlSession 中,通過(guò) getMapper 方法獲取映射器接口的實(shí)例,然后就可以直接調(diào)用映射器接口中的方法執(zhí)行 SQL 語(yǔ)句了。

3. 使用 SqlSessionTemplate 執(zhí)行 SQL 語(yǔ)句

除了直接使用 SqlSession 和映射器執(zhí)行 SQL 語(yǔ)句外,還可以使用 SqlSessionTemplate 執(zhí)行 SQL 語(yǔ)句。SqlSessionTemplate 是 MyBatis-Spring 模塊提供的一個(gè)類(lèi),它封裝了 SqlSession 的常用操作,可以方便地在 Spring 框架中使用。下面是一個(gè)簡(jiǎn)單的示例:

public class UserServiceImpl implements UserService {
    private SqlSessionTemplate sqlSessionTemplate;
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
    @Override
    public User getUserById(int id) {
        return sqlSessionTemplate.selectOne("com.example.mapper.UserMapper.getUserById", id);
    }
    @Override
    public int addUser(User user) {
        return sqlSessionTemplate.insert("com.example.mapper.UserMapper.addUser", user);
    }
}

在上面的示例代碼中,通過(guò)注入 SqlSessionTemplate 對(duì)象來(lái)執(zhí)行 SQL 語(yǔ)句。SqlSessionTemplate 提供了多個(gè)方法來(lái)執(zhí)行 SQL 語(yǔ)句,包括 selectOne、selectList、insert、update 和 delete 等。這些方法的使用方式與直接使用 SqlSession 執(zhí)行 SQL 語(yǔ)句的方式類(lèi)似。

4. SQL 語(yǔ)句的參數(shù)映射

在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的參數(shù)映射到 Java 對(duì)象中。MyBatis 提供了多種方式來(lái)實(shí)現(xiàn)參數(shù)映射,包括基本類(lèi)型參數(shù)、JavaBean 參數(shù)、Map 參數(shù)和注解參數(shù)等。下面是一個(gè)簡(jiǎn)單的示例:

public interface UserMapper {
    // 查詢(xún)用戶(hù)信息
    User getUserById(int id);
    // 添加用戶(hù)信息
    int addUser(User user);
    // 查詢(xún)用戶(hù)信息,使用 Map 參數(shù)
    User getUserByIdMap(Map<String, Object> paramMap);
    // 添加用戶(hù)信息,使用注解參數(shù)
    @Insert("insert into user(name, age) values(#{user.name}, #{user.age})")
    int addUserAnnotation(@Param("user") User user);
}

在上面的示例代碼中,getUserById 和 addUser 方法使用了 JavaBean 參數(shù),getUserByIdMap 方法使用了 Map 參數(shù),addUserAnnotation 方法使用了注解參數(shù)。在使用 JavaBean 參數(shù)和 Map 參數(shù)時(shí),需要將 SQL 語(yǔ)句中的參數(shù)與 Java 對(duì)象的屬性進(jìn)行映射。在使用注解參數(shù)時(shí),需要在 SQL 語(yǔ)句中使用 #{paramName} 的方式,其中 paramName 為注解參數(shù)的名稱(chēng)。

5. SQL 語(yǔ)句的返回結(jié)果映射

在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的返回結(jié)果映射到 Java 對(duì)象中。MyBatis 提供了多種方式來(lái)實(shí)現(xiàn)返回結(jié)果映射,包括基本類(lèi)型返回、JavaBean 返回、Map 返回和注解返回等。下面是一個(gè)簡(jiǎn)單的示例:

public interface UserMapper {
    // 查詢(xún)用戶(hù)信息,返回 JavaBean
    User getUserById(int id);
    // 查詢(xún)用戶(hù)信息,返回 Map
    Map<String, Object> getUserByIdMap(int id);
    // 查詢(xún)用戶(hù)信息,使用注解返回
    @Select("select name, age from user where id=#{id}")
    @Results({
            @Result(property = "name", column = "name"),
            @Result(property = "age", column = "age")
    })
    User getUserByIdAnnotation(int id);
}

在上面的示例代碼中,getUserById 方法返回了一個(gè) JavaBean,getUserByIdMap 方法返回了一個(gè) Map,getUserByIdAnnotation 方法使用了注解返回。在使用注解返回時(shí),需要在 SQL 語(yǔ)句中使用 @Results 和 @Result 注解將查詢(xún)結(jié)果與 JavaBean 的屬性進(jìn)行映射。

6. 總結(jié)

MyBatis 提供了多種方式來(lái)執(zhí)行 SQL 語(yǔ)句,包括直接使用 SqlSession 執(zhí)行、使用映射器執(zhí)行、使用 SqlSessionTemplate 執(zhí)行等。在執(zhí)行 SQL 語(yǔ)句時(shí),需要將 SQL 語(yǔ)句中的參數(shù)和返回結(jié)果

到此這篇關(guān)于MyBatis中常見(jiàn)的SQL執(zhí)行方式及其使用方法的文章就介紹到這了,更多相關(guān)MyBatis執(zhí)行SQL語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題

    SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題

    緩存穿透是指當(dāng)緩存系統(tǒng)中無(wú)法命中需要的數(shù)據(jù)時(shí),會(huì)直接請(qǐng)求底層存儲(chǔ)系統(tǒng)(如數(shù)據(jù)庫(kù)),但是如果請(qǐng)求的數(shù)據(jù)根本不存在,那么大量的請(qǐng)求就會(huì)直接穿透緩存層,本文將給大家介紹一下SpringBoot使用布隆過(guò)濾器解決緩存穿透問(wèn)題,需要的朋友可以參考下
    2023-10-10
  • Springboot核心機(jī)制詳細(xì)介紹

    Springboot核心機(jī)制詳細(xì)介紹

    SpringBoot的核心機(jī)制包括自動(dòng)配置、起步依賴(lài)、主類(lèi)和運(yùn)行器、以及嵌入式服務(wù)器等,通過(guò)這些機(jī)制,SpringBoot簡(jiǎn)化了應(yīng)用開(kāi)發(fā)過(guò)程,本文給大家介紹Springboot核心機(jī)制,感興趣的朋友一起看看吧
    2024-11-11
  • 使用@Cacheable緩存解決雙冒號(hào)::的問(wèn)題

    使用@Cacheable緩存解決雙冒號(hào)::的問(wèn)題

    這篇文章主要介紹了使用@Cacheable緩存解決雙冒號(hào)::的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)Excel百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)入功能的示例代碼

    Java實(shí)現(xiàn)Excel百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)入功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)Excel百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)入功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-04-04
  • SpringBoot?ApplicationContext接口深入分析

    SpringBoot?ApplicationContext接口深入分析

    ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽(tīng)事件,加載資源文件等
    2022-11-11
  • JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例

    JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例

    這篇文章主要介紹了JAVA中的Token 基于Token的身份驗(yàn)證實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java實(shí)現(xiàn)多客戶(hù)聊天功能

    java實(shí)現(xiàn)多客戶(hù)聊天功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多客戶(hù)聊天功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • springboot單獨(dú)使用feign簡(jiǎn)化接口調(diào)用方式

    springboot單獨(dú)使用feign簡(jiǎn)化接口調(diào)用方式

    這篇文章主要介紹了springboot單獨(dú)使用feign簡(jiǎn)化接口調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 解決java數(shù)值范圍以及float與double精度丟失的問(wèn)題

    解決java數(shù)值范圍以及float與double精度丟失的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決java數(shù)值范圍以及float與double精度丟失的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • SpringBoot3.x嵌入MongoDB進(jìn)行測(cè)試的步驟詳解

    SpringBoot3.x嵌入MongoDB進(jìn)行測(cè)試的步驟詳解

    本文介紹了在?Spring?Boot?應(yīng)用中使用Flapdoodle?Embed?Mongo進(jìn)行?MongoDB?測(cè)試的方法,包括Embed?Mongo?的概念,添加依賴(lài)、配置、運(yùn)行測(cè)試的步驟,還列舉了其優(yōu)勢(shì)如快速啟動(dòng)關(guān)閉、環(huán)境一致、無(wú)需外部依賴(lài)等,以及注意事項(xiàng)和結(jié)論,需要的朋友可以參考下
    2024-12-12

最新評(píng)論