溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MyBatis Spring Boot集成后的數(shù)據(jù)訪問層代碼重構(gòu)案例

發(fā)布時(shí)間:2024-09-11 19:50:47 來源:億速云 閱讀:83 作者:小樊 欄目:編程語言

在使用MyBatis和Spring Boot進(jìn)行項(xiàng)目開發(fā)時(shí),我們通常會遇到一些重復(fù)的代碼,例如數(shù)據(jù)訪問層(DAO)的接口和實(shí)現(xiàn)。為了提高代碼的可維護(hù)性和可讀性,我們可以對這些代碼進(jìn)行重構(gòu)。下面是一個(gè)簡單的數(shù)據(jù)訪問層代碼重構(gòu)案例:

  1. 首先,創(chuàng)建一個(gè)通用的Mapper接口,例如BaseMapper
public interface BaseMapper<T> {
    T findById(Long id);
    List<T> findAll();
    int insert(T entity);
    int update(T entity);
    int deleteById(Long id);
}
  1. 然后,創(chuàng)建一個(gè)通用的MyBatis映射文件BaseMapper.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.example.demo.mapper.BaseMapper">
   <select id="findById" resultType="T">
        SELECT * FROM ${tableName} WHERE id = #{id}
    </select>
   <select id="findAll" resultType="T">
        SELECT * FROM ${tableName}
    </select>
   <insert id="insert" parameterType="T">
        INSERT INTO ${tableName} (...) VALUES (...)
    </insert>
   <update id="update" parameterType="T">
        UPDATE ${tableName} SET ... WHERE id = #{id}
    </update>
   <delete id="deleteById">
        DELETE FROM ${tableName} WHERE id = #{id}
    </delete>
</mapper>

注意:在這個(gè)映射文件中,我們使用了${tableName}作為動態(tài)表名,這樣我們就可以在不同的實(shí)體類中使用相同的SQL語句。

  1. 接下來,為每個(gè)實(shí)體類創(chuàng)建一個(gè)Mapper接口,并繼承BaseMapper
public interface UserMapper extends BaseMapper<User> {
}
  1. application.propertiesapplication.yml中配置MyBatis的掃描路徑:
mybatis.mapper-locations=classpath:mapper/*.xml
  1. 最后,在Service層或Controller層調(diào)用Mapper接口的方法進(jìn)行數(shù)據(jù)訪問:
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

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

    public List<User> findAll() {
        return userMapper.findAll();
    }

    public int insert(User user) {
        return userMapper.insert(user);
    }

    public int update(User user) {
        return userMapper.update(user);
    }

    public int deleteById(Long id) {
        return userMapper.deleteById(id);
    }
}

通過這種方式,我們可以將重復(fù)的數(shù)據(jù)訪問層代碼抽象出來,提高代碼的可維護(hù)性和可讀性。當(dāng)然,這只是一個(gè)簡單的示例,實(shí)際項(xiàng)目中可能需要根據(jù)具體需求進(jìn)行更多的定制化開發(fā)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI