日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

今天一個(gè)道友問(wèn)我,知道如何利用XML的方式來(lái)構(gòu)建動(dòng)態(tài)SQL,MyBatis是否能夠利用注解完成動(dòng)態(tài)SQL的構(gòu)建呢?!!答案是肯定的,MyBatis 提供了注解,@InsertProvider,@UpdateProvider,@DeleteProvider 和@SelectProvider,來(lái)幫助構(gòu)建動(dòng)態(tài) SQL 語(yǔ)句,然后讓MyBatis 執(zhí)行這些 SQL 語(yǔ)句。


@InsertProvider

簡(jiǎn)單示例:創(chuàng)建一個(gè) TutorDynaSqlProvider.JAVA 類(lèi),以及 findTutorByIdSql()方法

package com.test.myBatisTest;import org.Apache.ibatis.jdbc.SQL;public class TutorDynaSqlProvider {      public String findTutorByIdSql(int tutorId) {      return "SELECT TUTOR_ID AS tutorId, NAME, EMAIL FROM TUTORS WHERE TUTOR_ID=" + tutorId;      }}

在 TutorMApper.java 接口中創(chuàng)建一個(gè)映射語(yǔ)句

@SelectProvider(type=TutorDynaSqlProvider.class, method="findTutorByIdSql")Tutor findTutorById(int tutorId);

動(dòng)態(tài)構(gòu)建SQL:使用SQL類(lèi)來(lái)構(gòu)建動(dòng)態(tài)SQL如下所示

import org.apache.ibatis.jdbc.SQL; public class TutorDynaSqlProvider {    public String findTutorByIdSql(final int tutorId) {        return new SQL() {            {                SELECT("tutor_id as tutorId, name, email");                FROM("tutors");                WHERE("tutor_id=" + tutorId);            }        }.toString();    }}

SQL 工具類(lèi)會(huì)處理以合適的空格前綴和后綴來(lái)構(gòu)造 SQL 語(yǔ)句。可以接受的參數(shù)類(lèi)型:無(wú)參數(shù)和映射器 Mapper 接口的方法以及同類(lèi)型的參數(shù) java.util.Map。 如果映射器 Mapper 接口有多個(gè)輸入?yún)?shù),我們可以使用參數(shù)類(lèi)型為 java.util.Map 的方法作為 SQL provider 方法。然后映射器 Mapper 接口方法所有的輸入?yún)?shù)將會(huì)被放到 map 中,以 param1,param2 等等作為 key,將輸入?yún)?shù)按序作為 value。 你也可以使用 0,1,2 等作為 key 值來(lái)取得輸入?yún)?shù)。如下所示

@SelectProvider(type = TutorDynaSqlProvider.class, method = "findTutorByNameAndEmailSql")Tutor findTutorByNameAndEmail(String name, String email);public String findTutorByNameAndEmailSql(Map<String, Object> map) {    String name = (String) map.get("param1");    String email = (String) map.get("param2");    // you can also get those values using 0,1 keys    // String name = (String) map.get("0");    // String email = (String) map.get("1");    return new SQL() {        {            SELECT("tutor_id as tutorId, name, email");            FROM("tutors");            WHERE("name=#{name} AND email=#{email}");        }    }.toString();}

SQL 工具類(lèi)也提供了其他的方法來(lái)表示 JOINS,ORDER_BY,GROUP_BY 等等

package com.test.myBatisTest; import org.apache.ibatis.jdbc.SQL; public class TutorDynaSqlProvider {    public String selectTutorById() {        return new SQL() {            {                SELECT("t.tutor_id, t.name as tutor_name, email");                SELECT("a.addr_id, street, city, state, zip, country");                SELECT("course_id, c.name as course_name, description,start_date, end_date");                FROM("TUTORS t");                LEFT_OUTER_JOIN("addresses a on t.addr_id=a.addr_id");                LEFT_OUTER_JOIN("courses c on t.tutor_id=c.tutor_id");                WHERE("t.TUTOR_ID = #{id}");            }        }.toString();    }}

使用@InsertProvider注解創(chuàng)建動(dòng)態(tài)的 INSERT 語(yǔ)句

package com.test.myBatisTest; import org.apache.ibatis.jdbc.SQL; public class TutorDynaSqlProvider {    public String insertTutor(final Tutor tutor) {        return new SQL() {            {                INSERT_INTO("TUTORS");                if (tutor.getName() != null) {                    VALUES("NAME", "#{name}");                }                if (tutor.getEmail() != null) {                    VALUES("EMAIL", "#{email}");                }            }        }.toString();    }} public interface TutorMapper {    @InsertProvider(type = TutorDynaSqlProvider.class, method = "insertTutor")    @Options(useGeneratedKeys = true, keyProperty = "tutorId")    int insertTutor(Tutor tutor);}

@UpdateProvider

package com.test.myBatisTest; import org.apache.ibatis.jdbc.SQL; public class TutorDynaSqlProvider {    public String updateTutor(final Tutor tutor) {        return new SQL() {            {                UPDATE("TUTORS");                if (tutor.getName() != null) {                    SET("NAME = #{name}");                }                if (tutor.getEmail() != null) {                    SET("EMAIL = #{email}");                }                WHERE("TUTOR_ID = #{tutorId}");            }        }.toString();    }} public interface TutorMapper {    @UpdateProvider(type = TutorDynaSqlProvider.class, method = "updateTutor")    int updateTutor(Tutor tutor);}

使用@DeleteProvider 注解創(chuàng)建動(dòng)態(tài)地 DELETE 語(yǔ)句

package com.test.myBatisTest; import org.apache.ibatis.annotations.DeleteProvider;import org.apache.ibatis.jdbc.SQL; public class TutorDynaSqlProvider {    public String deleteTutor(int tutorId) {        return new SQL() {            {                DELETE_FROM("TUTORS");                WHERE("TUTOR_ID = #{tutorId}");            }        }.toString();    }} public interface TutorMapper {    @DeleteProvider(type = TutorDynaSqlProvider.class, method = "deleteTutor")    int deleteTutor(int tutorId);}

 以上就是使用注解的方式來(lái)動(dòng)態(tài)的構(gòu)建SQL,可以說(shuō)和XML方式有很大的不同,但是功能上面似乎沒(méi)有XML方式的強(qiáng)大,我個(gè)人更喜歡使用XML的方式來(lái)構(gòu)建,同時(shí)對(duì)參數(shù)進(jìn)行各種操作。

分享到:
標(biāo)簽:Mybatis
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定