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

SpringBoot集成MyBatis的多種方式

 更新時(shí)間:2023年12月19日 10:19:19   作者:IT·陳寒  
本文深入解析了Spring Boot集成MyBatis的多種方式,包括XML配置、注解配置以及MyBatis的動(dòng)態(tài)SQL等,具有一定的參考價(jià)值,感興趣的可以了解一下

1. 引言

Spring Boot作為一款快速開發(fā)、簡(jiǎn)化配置的框架,與MyBatis的結(jié)合使用是開發(fā)中常見的組合。本文將深入探討Spring Boot集成MyBatis的多種方式,包括XML配置、注解配置以及MyBatis的動(dòng)態(tài)SQL等,通過實(shí)例代碼和詳細(xì)解釋,幫助讀者選擇適合自己項(xiàng)目的集成方式

2. 傳統(tǒng)的XML配置方式

2.1 引入依賴

首先,在pom.xml文件中添加MyBatis和數(shù)據(jù)庫(kù)驅(qū)動(dòng)的依賴:

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2.2 配置數(shù)據(jù)源和MyBatis

application.propertiesapplication.yml中配置數(shù)據(jù)源和MyBatis:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  h2:
    console:
      enabled: true
  mybatis:
    mapper-locations: classpath:/mapper/*.xml

在上述配置中,spring.datasource用于配置數(shù)據(jù)源,mybatis.mapper-locations指定了MyBatis的XML映射文件的位置。

2.3 編寫Mapper接口和XML映射文件

創(chuàng)建一個(gè)User實(shí)體類:

public class User {
    private Long id;
    private String username;
    private String password;
    // 省略getter和setter
}

創(chuàng)建一個(gè)UserMapper接口:

public interface UserMapper {
    User selectUserById(Long id);
    void insertUser(User user);
}

編寫UserMapper的XML映射文件UserMapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

    <resultMap id="BaseResultMap" type="com.example.entity.User">
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
    </resultMap>

    <select id="selectUserById" resultMap="BaseResultMap">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO user (username, password) VALUES (#{username}, #{password})
    </insert>

</mapper>

2.4 使用Mapper

在Service或Controller中使用UserMapper:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.selectUserById(id);
    }

    public void createUser(User user) {
        userMapper.insertUser(user);
    }
}

這樣,通過XML配置方式,我們完成了Spring Boot與MyBatis的集成。

3. 注解配置方式

3.1 引入依賴

同樣,在pom.xml文件中添加MyBatis和數(shù)據(jù)庫(kù)驅(qū)動(dòng)的依賴:

<dependencies>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

3.2 配置數(shù)據(jù)源和MyBatis

application.propertiesapplication.yml中配置數(shù)據(jù)源和MyBatis:

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  h2:
    console:
      enabled: true
  mybatis:
    mapper-locations: classpath:/mapper/*.xml

3.3 編寫Mapper接口

創(chuàng)建一個(gè)UserMapper接口,并使用注解配置SQL語句:

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Long id);

    @Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
    void insertUser(User user);
}

3.4 使用Mapper

在Service或Controller中使用UserMapper:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.selectUserById(id);
    }

    public void createUser(User user) {
        userMapper.insertUser(user);
    }
}

通過注解配置方式,我們實(shí)現(xiàn)了Spring Boot與MyBatis的集成,使得Mapper接口的SQL語句更加直觀。

4. MyBatis動(dòng)態(tài)SQL

4.1 使用XML配置方式

動(dòng)態(tài)SQL是MyBatis的一個(gè)強(qiáng)大特性,可以根據(jù)不同條件拼接SQL語句,從而實(shí)現(xiàn)更加靈活的查詢。下面是一個(gè)簡(jiǎn)單的例子,使用MyBatis的動(dòng)態(tài)SQL:

<!-- UserMapper.xml -->

<mapper namespace="com.example.mapper.UserMapper">

    <select id="selectUsersByCondition" parameterType="java.util.Map" resultType="com.example.entity.User">
        SELECT * FROM user
        <where>
            <if test="username != null">
                AND username = #{username}
            </if>
            <if test="age != null">
                AND age = #{age}
            </if>
        </where>
    </select>

</mapper>

在上述代碼中,我們使用<where>標(biāo)簽包裹條件判斷,通過<if>標(biāo)簽判斷是否需要拼接對(duì)應(yīng)的條件語句。

4.2 使用注解配置方式

通過注解配置方式使用動(dòng)態(tài)SQL:

// UserMapper.java

@Mapper
public interface UserMapper {

    @SelectProvider(type = UserSqlProvider.class, method = "selectUsersByCondition")
    List<User> selectUsersByCondition(Map<String, Object> condition);
}
// UserSqlProvider.java

public class UserSqlProvider {

    public String selectUsersByCondition(Map<String, Object> condition) {
        return new SQL() {{
            SELECT("*");
            FROM("user");
            if (condition.get("username") != null) {
                WHERE("username = #{username}");
            }
            if (condition.get("age") != null) {
                WHERE("age = #{age}");
            }
        }}.toString();
    }
}

在上述代碼中,通過@SelectProvider注解指定了使用的Provider類和方法,Provider類中動(dòng)態(tài)生成SQL語句。

5. MyBatis的插件機(jī)制

MyBatis提供了插件機(jī)制,可以通過插件對(duì)SQL的執(zhí)行過程進(jìn)行干預(yù)和增強(qiáng)。以下是一個(gè)簡(jiǎn)單的插件示例:

// MyPlugin.java

@Intercepts({
    @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
})
public class MyPlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 在原方法執(zhí)行前進(jìn)行處理
        System.out.println("Before update...");

        // 調(diào)用原方法
        Object result = invocation.proceed();

        // 在原方法執(zhí)行后進(jìn)行處理
        System.out.println("After update...");

        return result;
    }

    @Override
    public Object plugin(Object target) {
        // 將插件應(yīng)用到Executor對(duì)象上
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 設(shè)置插件屬性
    }
}

在上述代碼中,通過@Intercepts@Signature注解指定了攔截的方法和參數(shù)類型,實(shí)現(xiàn)了Interceptor接口。在intercept方法中可以對(duì)原方法進(jìn)行干預(yù),plugin方法將插件應(yīng)用到目標(biāo)對(duì)象上。

6. 性能優(yōu)化與拓展

6.1 緩存機(jī)制

MyBatis提供了一級(jí)緩存和二級(jí)緩存兩種緩存機(jī)制。一級(jí)緩存是SqlSession級(jí)別的緩存,而二級(jí)緩存是Mapper級(jí)別的緩存。在需要優(yōu)化查詢性能時(shí),可以考慮使用MyBatis的緩存機(jī)制。

6.2 批量操作

MyBatis支持批量插入、更新和刪除操作,通過批量操作可以減少數(shù)據(jù)庫(kù)交互次數(shù),提高性能。

6.3 多數(shù)據(jù)源配置

在實(shí)際項(xiàng)目中,可能會(huì)遇到需要連接多個(gè)數(shù)據(jù)源的情況。Spring Boot和MyBatis提供了多數(shù)據(jù)源的支持,可以通過配置多個(gè)DataSourceSqlSessionFactory來實(shí)現(xiàn)。

7. 總結(jié)

本文深入解析了Spring Boot集成MyBatis的多種方式,包括XML配置、注解配置以及MyBatis的動(dòng)態(tài)SQL等。通過實(shí)例代碼和詳細(xì)解釋,讀者能夠更好地理解這些集成方式的使用場(chǎng)景和優(yōu)劣。同時(shí),了解了MyBatis的插件機(jī)制、緩存機(jī)制以及一些性能優(yōu)化的方法。在實(shí)際項(xiàng)目中,根據(jù)具體需求選擇合適的集成方式和優(yōu)化策略,能夠更好地發(fā)揮Spring Boot和MyBatis的優(yōu)勢(shì),提升開發(fā)效率和系統(tǒng)性能。

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

相關(guān)文章

  • Java Web 實(shí)現(xiàn)QQ登錄功能一個(gè)帳號(hào)同一時(shí)間只能一個(gè)人登錄

    Java Web 實(shí)現(xiàn)QQ登錄功能一個(gè)帳號(hào)同一時(shí)間只能一個(gè)人登錄

    對(duì)于一個(gè)帳號(hào)在同一時(shí)間只能一個(gè)人登錄,下文給大家介紹的非常詳細(xì),對(duì)java web qq 登錄功能感興趣的朋友一起看看吧
    2016-11-11
  • ResponseBodyAdvice踩坑及解決

    ResponseBodyAdvice踩坑及解決

    這篇文章主要介紹了ResponseBodyAdvice踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java基礎(chǔ)之初始化ArrayList時(shí)直接賦值的4種方式總結(jié)

    java基礎(chǔ)之初始化ArrayList時(shí)直接賦值的4種方式總結(jié)

    ArrayList是Java中的一個(gè)類,它是Java集合框架中的一部分,用于實(shí)現(xiàn)動(dòng)態(tài)數(shù)組,下面這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)之初始化ArrayList時(shí)直接賦值的4種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • IDEA下Maven的pom文件導(dǎo)入依賴出現(xiàn)Auto build completed with errors的問題

    IDEA下Maven的pom文件導(dǎo)入依賴出現(xiàn)Auto build completed with errors的問題

    這篇文章主要介紹了IDEA下Maven的pom文件導(dǎo)入依賴出現(xiàn)Auto build completed with errors,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析

    Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析

    這篇文章主要介紹了Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析,下面文章要接受的這是一款基于 Java 開發(fā)的移動(dòng)端安卓小游戲,可以作為大家在學(xué)習(xí)期間的一個(gè)小練習(xí),接下來和小編一起進(jìn)入文章學(xué)習(xí)具體內(nèi)容吧
    2022-02-02
  • java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法

    今天小編就為大家分享一篇java 二進(jìn)制數(shù)據(jù)與16進(jìn)制字符串相互轉(zhuǎn)化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解如何通過Java實(shí)現(xiàn)類似Nginx代理

    詳解如何通過Java實(shí)現(xiàn)類似Nginx代理

    最近遇到一個(gè)問題,在內(nèi)網(wǎng)環(huán)境中部署的項(xiàng)目需要調(diào)用外網(wǎng)完成一些應(yīng)用,一般情況我們可以通過增加一臺(tái)機(jī)器,部署到可以訪問外網(wǎng)的服務(wù)器上,然后內(nèi)網(wǎng)直接連接該機(jī)器通過Nginx進(jìn)行代理即可,所以本文介紹了如何通過Java實(shí)現(xiàn)類似Nginx代理,需要的朋友可以參考下
    2024-08-08
  • java打印正弦曲線示例

    java打印正弦曲線示例

    這篇文章主要介紹了java數(shù)組排序示例,需要的朋友可以參考下
    2014-03-03
  • Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用

    Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用

    這篇文章主要介紹了Mybatis中typeAliases標(biāo)簽和package標(biāo)簽使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot自動(dòng)重啟的兩種方法

    SpringBoot自動(dòng)重啟的兩種方法

    我們?cè)陧?xiàng)目開發(fā)階段,可能經(jīng)常會(huì)修改代碼,修改完后就要重啟Spring Boot,本文主要介紹了SpringBoot自動(dòng)重啟的兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12

最新評(píng)論

斗六市| 临颍县| 芒康县| 兖州市| 湖州市| 拉萨市| 桃园县| 南部县| 英德市| 长汀县| 文水县| 班戈县| 剑阁县| 临湘市| 榆树市| 和静县| 咸丰县| 大田县| 陈巴尔虎旗| 富阳市| 泊头市| 贵阳市| 漳州市| 肃宁县| 新蔡县| 灵石县| 潞西市| 武川县| 岳阳市| 嘉黎县| 长春市| 青州市| 凌源市| 余干县| 天峨县| 克拉玛依市| 宁河县| 鹤山市| 敦煌市| 大田县| 宣城市|