精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MyBatis中的十個(gè)寶藏技巧!

數(shù)據(jù)庫
今天就從淺入深,分享 10 個(gè)讓人眼前一亮的 MyBatis 開發(fā)技巧,每一個(gè)都配上具體的場(chǎng)景和代碼示例,務(wù)求通俗易懂,希望對(duì)你會(huì)有所幫助。

前言

說到 MyBatis,很多小伙伴都會(huì)用,但未必用得“驚艷”。

實(shí)際上,這個(gè)輕量級(jí)的持久層框架還有很多隱藏的“寶藏技巧”。

如果你能掌握這些技巧,不但能讓開發(fā)更高效,還能避免掉入一些常見的“坑”。

今天就從淺入深,分享 10 個(gè)讓人眼前一亮的 MyBatis 開發(fā)技巧,每一個(gè)都配上具體的場(chǎng)景和代碼示例,務(wù)求通俗易懂,希望對(duì)你會(huì)有所幫助。

1. 靈活使用動(dòng)態(tài) SQL

很多小伙伴在寫 SQL 的時(shí)候,喜歡直接用拼接字符串的方式,比如:

String sql = "SELECT * FROM user WHERE 1=1";
if (name != null) {
    sql += " AND name = '" + name + "'";
}

這種寫法不僅麻煩,而且安全性很差(容易引發(fā) SQL 注入)。

MyBatis 的動(dòng)態(tài) SQL 是專門為解決這種問題設(shè)計(jì)的,你可以用 if、choose、foreach 等標(biāo)簽來動(dòng)態(tài)構(gòu)造 SQL。

示例:動(dòng)態(tài)條件查詢

<select id="findUser" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null and name != ''">
        AND name = #{name}
    </if>
    <if test="age != null">
        AND age = #{age}
    </if>
</select>

這個(gè)代碼的好處是,SQL 邏輯清晰,不會(huì)因?yàn)槟硞€(gè)參數(shù)為空就導(dǎo)致整個(gè) SQL 報(bào)錯(cuò)。

2. 善用 resultMap 自定義結(jié)果映射

有些小伙伴會(huì)遇到這樣的問題:數(shù)據(jù)庫表字段是下劃線命名,但 Java 對(duì)象是駝峰命名。比如 user_name 對(duì)應(yīng) userName。如果直接用默認(rèn)的 resultType,MyBatis 是無法自動(dòng)映射的。

這個(gè)時(shí)候,用 resultMap 就能完美解決。

示例:自定義結(jié)果映射

<resultMap id="userResultMap" type="User">
    <id column="id" property="id"/>
    <result column="user_name" property="userName"/>
    <result column="age" property="age"/>
</resultMap>

<select id="getUserById" resultMap="userResultMap">
    SELECT id, user_name, age FROM user WHERE id = #{id}
</select>

有了 resultMap,再復(fù)雜的字段映射都可以輕松搞定。

3. 利用 foreach 實(shí)現(xiàn)批量操作

有些小伙伴可能會(huì)遇到這種需求:傳入一個(gè) ID 列表,查詢所有匹配的用戶信息。如果用拼接字符串的方式生成 IN 條件,不但代碼丑,還容易踩坑。

MyBatis 提供了 foreach 標(biāo)簽,可以優(yōu)雅地處理這種場(chǎng)景。

示例:批量查詢

<select id="findUsersByIds" resultType="User">
    SELECT * FROM user WHERE id IN
    <foreach item="id" collection="idList" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>

傳入的 idList 是一個(gè) List 或數(shù)組,MyBatis 會(huì)自動(dòng)幫你展開為 IN (1, 2, 3) 這樣的格式,完全不用擔(dān)心語法問題。

4. MyBatis-Plus 的分頁功能

很多小伙伴在做分頁的時(shí)候,習(xí)慣自己寫 LIMIT 的 SQL,這樣不僅麻煩,還容易出錯(cuò)。

其實(shí),用 MyBatis-Plus 的分頁插件能省不少事。

示例:MyBatis-Plus 分頁功能

Page<User> page = new Page<>(1, 10); // 第 1 頁,每頁 10 條
IPage<User> userPage = userMapper.selectPage(page, null);
System.out.println("總記錄數(shù):" + userPage.getTotal());
System.out.println("當(dāng)前頁數(shù)據(jù):" + userPage.getRecords());

只需引入分頁插件,就能輕松完成分頁操作,簡(jiǎn)直不要太爽。

5. 使用 @Mapper的接口代理

有些小伙伴覺得 XML 文件太多太麻煩,其實(shí) MyBatis 支持純注解的開發(fā)模式,尤其是對(duì)于簡(jiǎn)單的 SQL,非常方便。

示例:注解方式查詢

@Mapper
public interface UserMapper {

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

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    void addUser(User user);
}

用這種方式,可以完全省掉 XML 配置,代碼更加簡(jiǎn)潔。

6. 二級(jí)緩存

MyBatis 內(nèi)置了一級(jí)緩存(SqlSession 范圍內(nèi)),但對(duì)于多次查詢的場(chǎng)景,可以開啟二級(jí)緩存來提升性能。

示例:開啟二級(jí)緩存

<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
</configuration>

<mapper namespace="com.example.mapper.UserMapper">
    <cache/>
    <select id="getUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

開啟二級(jí)緩存后,同一個(gè) Mapper 下的查詢會(huì)自動(dòng)命中緩存,大幅提高性能。

7. 動(dòng)態(tài)表名切換

有些多租戶系統(tǒng)需要在運(yùn)行時(shí)切換表名,比如按租戶分表。這種情況下,可以用 MyBatis 的動(dòng)態(tài) SQL 特性來實(shí)現(xiàn)。

示例:動(dòng)態(tài)表名

<select id="getDataFromDynamicTable" resultType="Map">
    SELECT * FROM ${tableName} WHERE id = #{id}
</select>

在調(diào)用時(shí)傳入 tableName 參數(shù),MyBatis 會(huì)動(dòng)態(tài)替換表名。

8. 用 typeHandler 自定義類型處理

有些小伙伴可能遇到過這種場(chǎng)景:數(shù)據(jù)庫存的是 1/0,但在代碼里想用 true/false 表示。

這種情況可以通過自定義 typeHandler 來實(shí)現(xiàn)。

示例:自定義 TypeHandler

@MappedTypes(Boolean.class)
@MappedJdbcTypes(JdbcType.INTEGER)
public class BooleanTypeHandler extends BaseTypeHandler<Boolean> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, parameter ? 1 : 0);
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getInt(columnName) == 1;
    }
}

在 MyBatis 配置中注冊(cè)這個(gè) typeHandler,就可以實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換了。

9. 日志調(diào)試,快速排查問題

開發(fā)中經(jīng)常需要排查 SQL 執(zhí)行的問題,這時(shí) MyBatis 的日志功能非常好用。

通過配置,可以輕松打印出完整的 SQL 和參數(shù)。

示例:開啟日志

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

日志會(huì)輸出類似下面的內(nèi)容:

==>  Preparing: SELECT * FROM user WHERE id = ?
==> Parameters: 1(Integer)
<==      Total: 1

有了這些日志,排查問題再也不頭疼了。

10. 多數(shù)據(jù)源支持

當(dāng)系統(tǒng)需要連接多個(gè)數(shù)據(jù)庫時(shí),可以通過 MyBatis 的多數(shù)據(jù)源配置輕松搞定。

示例:配置多數(shù)據(jù)源

@Configuration
@MapperScan(basePackages = "com.example.mapper", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DataSourceConfig1 {
    @Bean(name = "dataSource1")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory1")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

    @Bean(name = "sqlSessionTemplate1")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

通過類似的配置,就可以輕松切換多個(gè)數(shù)據(jù)源。

總結(jié)

MyBatis 的魅力在于簡(jiǎn)單、高效,但很多時(shí)候我們用得太“基礎(chǔ)”,沒有發(fā)揮它的全部潛力。

希望這 10 個(gè)技巧能幫你更高效地使用 MyBatis,也讓你的代碼看起來更“驚艷”。

責(zé)任編輯:姜華 來源: 蘇三說技術(shù)
相關(guān)推薦

2024-12-03 14:33:42

Python遞歸編程

2023-11-08 18:05:06

Python類型技巧

2025-08-14 02:00:00

2015-08-24 09:12:00

Redis 技巧

2023-07-02 14:21:06

PythonMatplotlib數(shù)據(jù)可視化庫

2024-10-14 12:17:17

Flutter開源項(xiàng)目

2024-01-30 00:40:10

2010-09-08 14:35:22

CSS

2022-05-12 08:12:51

PythonPip技巧

2023-01-17 16:43:19

JupyterLab技巧工具

2023-10-16 07:55:15

JavaScript對(duì)象技巧

2024-01-06 18:02:18

編程記錄日志

2022-11-07 16:06:15

TypeScript開發(fā)技巧

2011-08-22 12:24:56

nagios

2024-03-04 16:32:02

JavaScript運(yùn)算符

2010-06-18 09:17:51

jQuery

2012-11-23 10:30:28

Responsive響應(yīng)式Web

2024-09-26 15:00:06

2024-09-09 18:18:45

2024-08-27 12:21:52

桌面應(yīng)用開發(fā)Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美少妇一级片| 国产精品美女久久久久久免费| 黑人无套内谢中国美女| 动漫一区二区| 国产丝袜在线精品| 亚洲影视中文字幕| 圆产精品久久久久久久久久久| 香蕉精品久久| 欧美二区三区91| 热99这里只有精品| 欧美videos极品另类| av一区二区三区| 91九色在线视频| 久久精品无码av| 欧美另类女人| 色一区av在线| 国产精品毛片一区二区| 婷婷视频一区二区三区| 日本精品视频一区二区| 日韩一二区视频| 国产黄色在线播放| 不卡一二三区首页| 91久久精品久久国产性色也91| 欧美a∨亚洲欧美亚洲| 亚洲精品成人无限看| 亚洲人成在线观看网站高清| 丰满人妻一区二区三区53视频| 欧美黑人粗大| 狠狠躁夜夜躁久久躁别揉| 免费成人深夜夜行网站视频| 欧美zozo| 99re热视频精品| 91久久偷偷做嫩草影院| 伊人22222| 日韩精品一卡二卡三卡四卡无卡| 韩国三级日本三级少妇99| 国产乱子轮xxx农村| 欧美人妖在线| 亚洲精品视频网上网址在线观看 | 国产一区二区毛片| 国产精品精品久久久| 中文字幕免费在线观看视频| 亚洲高清av| 欧美激情第99页| 欧美激情图片小说| 国产精品久久久久蜜臀 | av电影网站在线观看| 日韩黄色网络| 日韩国产在线看| 国产不卡一二三| 日韩精品视频在线看| 欧美一级片在线| 中文字幕第10页| 日韩视频一二区| 精品国产乱码久久久久久浪潮| 黑人巨大猛交丰满少妇| 精品一区二区三区中文字幕在线 | 成人精品一区二区三区校园激情| 91一区一区三区| 精品乱码一区| 欧美另类自拍| 国产午夜精品一区二区三区视频| 日本视频精品一区| 亚洲成人三级| 亚洲三级免费电影| 欧美中日韩在线| jizz一区二区三区| 偷拍一区二区三区四区| 国产肥臀一区二区福利视频| 亚洲www.| 欧美一区二区三区日韩| 911亚洲精选| 色婷婷狠狠五月综合天色拍| 亚洲人成网站免费播放| 手机看片国产日韩| 欧美在线91| 久久久久久网站| 日韩在线播放中文字幕| 另类欧美日韩国产在线| 91文字幕巨乱亚洲香蕉| 午夜视频福利在线| 久久精品亚洲精品国产欧美| 午夜一区二区三视频在线观看| 北岛玲一区二区三区| **性色生活片久久毛片| 国产真实老熟女无套内射| 51漫画成人app入口| 91久久精品一区二区二区| 手机av在线网| 日本久久成人网| 久久香蕉国产线看观看av| 欧美精品一区二区蜜桃| 久久久久国产精品一区二区| 成人免费福利视频| 日本福利午夜视频在线| 亚洲人精品午夜| 日韩a在线播放| 日韩在线观看一区二区三区| 亚洲欧美一区二区三区情侣bbw| 日本一级特级毛片视频| 久久精品中文| 岛国视频一区免费观看| 丁香婷婷在线观看| 亚洲va国产va欧美va观看| 中文字幕22页| 亚洲精品进入| 欧美激情视频一区二区三区不卡 | 国模精品视频| 欧美日韩小视频| 亚洲精品乱码久久久久久蜜桃图片| av资源久久| 26uuu另类亚洲欧美日本老年| 一卡二卡三卡在线观看| 久久影院电视剧免费观看| 成人国产在线看| 国产成人精品一区二区三区在线 | 午夜激情视频在线| 欧美日韩性视频| 久久精品无码一区二区三区毛片| 蜜桃成人av| 久久久视频在线| 国产强伦人妻毛片| 国产精品久久福利| 免费大片在线观看| 亚洲人成网www| 97精品国产aⅴ7777| www.国产.com| 亚洲激情图片qvod| 五月激情五月婷婷| 日韩综合网站| 国产精品色视频| 国产福利片在线| 色呦呦国产精品| 日本黄色录像片| 韩日精品视频| 成人av片网址| 欧洲一区二区三区| 日韩欧美二区三区| 草视频在线观看| 国产精品一区二区x88av| 曰韩不卡视频| 91视频成人| 久久成人精品一区二区三区| 国产又粗又猛又爽又黄视频| 17c精品麻豆一区二区免费| 日本黄大片一区二区三区| 狠狠操综合网| 国产精品视频99| 在线观看免费黄视频| 欧美日韩在线一区二区| 国产精品免费无码| 琪琪一区二区三区| 亚洲永久激情精品| 日韩专区视频网站| 欧美成人免费va影院高清| 国产裸体永久免费无遮挡| 亚洲三级久久久| 中文字幕欧美视频| 亚洲另类自拍| 欧美日韩一区二区三| 欧美aaa视频| 久久精品中文字幕| 亚洲欧美激情另类| 欧美日韩国产精品一区二区三区四区 | 久久久久久免费看| 亚洲va久久久噜噜噜久久| 国产不卡av在线| 在线视频91p| 欧美一级片在线观看| 日本免费一二三区| 久久久久久电影| 九九精品久久久| 伊人久久久大香线蕉综合直播| 精品一卡二卡三卡四卡日本乱码 | 黄黄的网站在线观看| 日韩三级中文字幕| 成年人免费看毛片| 欧美激情一区二区在线| 午夜天堂在线视频| 在线亚洲伦理| 亚洲精品第一区二区三区| 日本精品一区二区三区在线观看视频| 久久久女女女女999久久| 理论在线观看| 日韩欧美一卡二卡| 中文字幕精品三级久久久| 国产精品蜜臀av| 国产精品久久久久久亚洲色| 蜜臀av性久久久久蜜臀aⅴ流畅 | 麻豆国产在线| 日韩有码在线观看| 四虎精品在线| 717成人午夜免费福利电影| 日本在线视频中文字幕| 国产精品卡一卡二| 日本xxxx裸体xxxx| 国产资源在线一区| 国产福利一区视频| 欧美日韩一区自拍| 亚洲精品一区二区三区av| 超碰地址久久| 国产欧美精品日韩| 亚洲伊人av| 欧美日韩国产91| 懂色av中文在线| 日韩成人在线电影网| 国产又粗又大又爽视频| 黑人巨大精品欧美一区二区一视频 | 三级网站免费观看| 91麻豆精品91久久久久久清纯| 区一区二在线观看| 午夜精品免费在线观看| 91在线播放观看| 中文字幕一区免费在线观看| 国产全是老熟女太爽了| 成人精品国产福利| 久久久久亚洲av无码麻豆| 免费观看日韩av| 无码精品a∨在线观看中文| 欧美天天在线| 国产又粗又大又爽的视频| 成人在线免费视频观看| 久久偷看各类wc女厕嘘嘘偷窃 | 国产欧美日本在线| 日韩精品中文字幕吗一区二区| 国产精品美女呻吟| 欧美一区久久久| 欧美在线国产精品| 不卡av免费观看| 久久99视频免费| av网址在线免费观看| 在线观看日韩视频| 国产高清视频在线播放| 亚洲美腿欧美激情另类| 午夜福利视频一区二区| 日韩av有码在线| 亚洲高清视频在线播放| 日韩美女一区二区三区四区| 国产视频手机在线| 日韩欧美亚洲国产精品字幕久久久| 中文字幕+乱码+中文乱码91| 欧洲国内综合视频| 欧美在线视频精品| 欧美日韩日日摸| 亚洲影视一区二区| 欧美日韩国产一二三| 亚洲熟妇无码久久精品| 欧美三级电影在线观看| 91无套直看片红桃| 3d成人动漫网站| 性欧美18一19性猛交| 精品国免费一区二区三区| 国产成人自拍一区| 亚洲国产天堂久久综合网| 欧美一级一区二区三区| 亚洲精美色品网站| 美国一级片在线免费观看视频| 国产一区二区黄| 无遮挡的视频在线观看| 免费99精品国产自在在线| 波多野结衣在线观看| 国产91精品久久久久久久| 桃花岛成人影院| 国产精品小说在线| 欧美专区一区| 久久久精彩视频| 成人精品中文字幕| 国产一二三四区在线观看| 激情欧美一区二区三区| 1024av视频| 久久精品国产秦先生| 人妻 丝袜美腿 中文字幕| 久久久亚洲综合| 亚洲一二三四五六区| 一区二区免费在线| 无码人妻av免费一区二区三区 | 亚洲精品国产一区二区精华液 | 亚洲一区二区在线观| 欧美美女性生活视频| www..com久久爱| 黄免费在线观看| 一区二区三区色| 国产成人精品777777| 欧美伦理视频网站| 免费看黄网站在线观看| 有码中文亚洲精品| 91吃瓜在线观看| 国产精品日本精品| 精品亚洲自拍| 一级做a爰片久久| 99国产精品视频免费观看一公开 | 丁香婷婷久久| 国产精选在线观看91| 成人羞羞网站入口免费| www.亚洲视频.com| 秋霞午夜鲁丝一区二区老狼| 老熟女高潮一区二区三区| 中文字幕不卡一区| 精品一区二区三区四| 欧美午夜影院一区| 天天射天天色天天干| 久久影院中文字幕| 午夜日韩成人影院| 国产乱码精品一区二区三区卡| 欧美色网址大全| 国产91xxx| 激情国产一区二区| 婷婷色一区二区三区| 亚洲国产aⅴ成人精品无吗| 这里只有精品6| 亚洲色图在线观看| 国产在线美女| 国产精品三区四区| 久久久久久久久国产一区| 欧洲熟妇精品视频| 91麻豆精品一区二区三区| 激情四射综合网| 91精品麻豆日日躁夜夜躁| 国产在线网站| 欧美一级电影在线| 久久久久观看| www.国产在线播放| 国产精品一卡二卡在线观看| 91导航在线观看| 色88888久久久久久影院按摩| 人人妻人人澡人人爽久久av| 美女少妇精品视频| 高清精品久久| 中文精品一区二区三区| 免费成人在线网站| 亚洲а∨天堂久久精品2021| 日韩欧美国产网站| 五月婷婷丁香花| 国内精品久久影院| 久久激情av| 国产精品自拍片| 91免费国产在线观看| 久草视频在线观| 日韩电影在线观看中文字幕| 国产99在线| 精品乱码一区| 男人的天堂亚洲在线| 人人妻人人澡人人爽人人精品| 欧美体内谢she精2性欧美| 婷婷婷国产在线视频| 奇米影视亚洲狠狠色| 一区二区三区视频免费观看 | 麻豆免费看一区二区三区| 欧美另类z0zx974| 欧美亚洲高清一区二区三区不卡| av中文在线| 成人黄色中文字幕| 亚洲欧美偷拍自拍| 一级黄色免费毛片| 亚洲综合激情网| 四虎精品在线| 国产精品高精视频免费| 日韩一区二区三区免费播放| 91国内在线播放| 夜夜精品浪潮av一区二区三区| 日本久久一级片| 国产成人综合精品在线| 日韩免费av| 小日子的在线观看免费第8集| 亚洲免费观看视频| 人妻与黑人一区二区三区| 97精品国产97久久久久久春色| 猛男gaygay欧美视频| 日本在线一二三区| 亚洲黄色av一区| 亚洲av成人精品日韩在线播放| 国产成人aa精品一区在线播放| 色婷婷亚洲mv天堂mv在影片| 两女双腿交缠激烈磨豆腐 | 中文字幕+乱码+中文乱码91| 久久久久999| 久久aimee| 亚洲另类第一页| 亚洲一二三四区| 黄色av网站在线免费观看| 成人av资源在线播放| 在线成人国产| 伊人影院综合网| 精品国产1区二区| 欧美性片在线观看| 成人小视频在线观看免费| 国产亚洲视频系列| www.久久久久久| 国产精品久久久久999| 欧美日韩伊人| 国产精品情侣呻吟对白视频| 精品国产a毛片| 欧美日韩免费电影| 亚洲一区二区三区av无码| 中文字幕精品综合| 天天干,夜夜爽| 99www免费人成精品| 视频一区二区欧美| 激情五月色婷婷| 久久久999精品视频|