成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

mybatis注解映射SQL

whlong / 2806人閱讀

摘要:解決這個(gè)問(wèn)題方案是定義一份結(jié)果映射文件如下所示動(dòng)態(tài)的注解對(duì)于動(dòng)態(tài),提供了不同的注解,用法如下所示首先創(chuàng)建一個(gè)類使用類但是使用字符串連接創(chuàng)建語(yǔ)句容易出現(xiàn)問(wèn)題,所以提供了一個(gè)工具,簡(jiǎn)化了構(gòu)建動(dòng)態(tài)的方式如下所示或者

結(jié)果集分頁(yè)
有時(shí)我們需要處理海量數(shù)據(jù),由于數(shù)據(jù)量太大,所以不能一次取出所有的數(shù)據(jù),這時(shí)我們就需要使用分頁(yè)功能。mybatis通過(guò)RowBounds對(duì)象提供對(duì)分頁(yè)的支持,如下所示:

int offset=0;//開(kāi)始位置
int limit=25;//取出的數(shù)據(jù)條數(shù)
RowBounds rowBounds=new RowBounds(offset,limit);
List list=studentMapper.findAllStudent(rowBounds);

結(jié)果處理器
有時(shí)我們需要對(duì)查詢結(jié)果做一些特殊的處理,這個(gè)時(shí)候就需要結(jié)果處理器,舉例如下,我們通過(guò)sql查詢學(xué)生的stud_id和name,并期望返回一個(gè)map,其中key是stud_id,value是name.
新建一個(gè)接口:
public interface ResultHandler
{
    void handleResult(ResultContext context);
}
主要處理流程:
Map map=new HashMap();
SqlSession sqlSession=MyBatisUtil.openSession();
sqlSession.select("com.mybatis3.mappers.StudentMapper.findAllStudents",new ResultHandler(){
    public void handlerResult(ResultContext context)
    {
        Student student=(Student)context.getResultObject();
        map.put(student.getStudId(),student.getName());
    }
})
緩存
緩存對(duì)于很多應(yīng)用來(lái)說(shuō)都是很重要的,因?yàn)樗芴岣呦到y(tǒng)的性能。mybatis內(nèi)建了緩存支持,默認(rèn)情況下,一級(jí)緩存是打開(kāi)的,即如果你使用相同的sqlSession接口調(diào)用相同的select查詢,查詢結(jié)果從緩存中取得而不是去查詢數(shù)據(jù)庫(kù)。
也可以通過(guò)標(biāo)簽配置二級(jí)緩存。當(dāng)配置了二級(jí)緩存后,也就意味著所有的查詢結(jié)果都會(huì)被緩存,insert,update,delete語(yǔ)句會(huì)更新緩存,cache的緩存管理算法是LRU。除了內(nèi)建的緩存之外,mybatis還整合了第三方緩存框架例如Ehcache等。
注解@Insert @Update @Select @ Delete
舉例說(shuō)明注解的用法:
public interface StudentMapper
{
    @Insert("insert into student (stud_id, name, email, addr_id, phone)values(#{studId},#{name},#{email},#{address.addrId},#{phone})")
    int insertStudent(Student student);
}
public interface StudentMapper
{
    @Insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrId},#{phone})")
    @Options(useGeneratedKeys=true,keyProperty="studId")
    int insertStudent(Student student);
}
public interface StudentMapper
{
    @Insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrId},#{phone})")
    @SelectKey(statement="select stud_id_seq.nextval from dual",keyProperty="studId",resultType=int.calss,before=true)
    int insertStudent(Student student);
}

@Update("update students set name=#{name},email=#{email}")
int updateStudent(Student student);

@Delete("delete form students where stud_id=#{studId}")
 int deleteStudent(int studId)

@Select("select name,email,phone from students where stud_id=#{studId}")
Student findStudentById(Integer studId);

結(jié)果注解
@Select("select name,email,phone from students where stud_id=#{studId}")
@Results({
    @Result(id=true,column="stud_id",property="studId"),
    @Result(column="name",property="name"),
    @Result(column="email",property="email"),
    @Result(column="phone",property="phone")
})
Student findStudentById(Integer studId);

結(jié)果注解有一個(gè)缺點(diǎn),就是在一個(gè)查詢方法前面都要寫(xiě)一遍,不能重用。解決這個(gè)問(wèn)題方案是:
定義一份結(jié)果映射文件如下所示:



.......


@Select("select name,email,phone from students where stud_id=#{studId}")
@ResultMap("com.mybatis3.mappers.StudentMapper.StudentResult")
Student findStudentById(Integer studId);
動(dòng)態(tài)Sql的注解
對(duì)于動(dòng)態(tài)sql,mybatis提供了不同的注解,@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider
用法如下所示:
首先創(chuàng)建一個(gè)provider類:
    
    public class SqlProvider
    {
        public String findTutorById(int tutorId)
        {
            return "select tutorId,name,email from tutors where tutorId="+tutorId;
        }
    }
 使用provider類:
     @SelectProvider(type=SqlProvider.class,method="findTutorById")
     Tutor findTutorById(int tutorId);   
  但是使用字符串連接創(chuàng)建sql語(yǔ)句容易出現(xiàn)問(wèn)題,所以mybatis提供了一個(gè)SQL工具,簡(jiǎn)化了構(gòu)建動(dòng)態(tài)Sql的方式;
  如下所示:
    public class SqlProvider
    {
        public String findTutorById(int tutorId)
        {
            return new SQL(){{
              SELECT("tutorid,name,email")
              FROM("tutors")
              WHERE("tutorid="+tutorId)
            }}.toString();
        }
    } 
    或者 
    public class SqlProvider
    {
        public String findTutorById()
        {
            return new SQL(){{
              SELECT("tutorid,name,email")
              FROM("tutors")
              WHERE("tutorid=#{tutorId}")
            }}.toString();
        }
    }    









文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70208.html

相關(guān)文章

  • Mybatis常見(jiàn)面試題

    摘要:執(zhí)行沒(méi)有,批處理不支持,將所有都添加到批處理中,等待統(tǒng)一執(zhí)行,它緩存了多個(gè)對(duì)象,每個(gè)對(duì)象都是完畢后,等待逐一執(zhí)行批處理。 Mybatis常見(jiàn)面試題 #{}和${}的區(qū)別是什么? #{}和${}的區(qū)別是什么? 在Mybatis中,有兩種占位符 #{}解析傳遞進(jìn)來(lái)的參數(shù)數(shù)據(jù) ${}對(duì)傳遞進(jìn)來(lái)的參數(shù)原樣拼接在SQL中 #{}是預(yù)編譯處理,${}是字符串替換。 使用#{}可以有效的防止...

    liuchengxu 評(píng)論0 收藏0
  • 面試官都會(huì)問(wèn)的Mybatis面試題,你會(huì)這樣回答嗎?

    摘要:最終能和面試官聊的開(kāi)心愉快投緣的叫面霸。能夠與很好的集成提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的字段關(guān)系映射提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組件維護(hù)。使用可以有效的防止注入,提高系統(tǒng)安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面試,難還是不難?取決于面試者的底蘊(yùn)(氣場(chǎng)+技能)、心態(tài)和認(rèn)知及溝通技巧。...

    seanHai 評(píng)論0 收藏0
  • 手撕面試官系列(二):開(kāi)源框架面試題Spring+SpringMVC+MyBatis

    摘要:跳槽時(shí)時(shí)刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個(gè)個(gè)都走了,自己也盲目的開(kāi)始面試起來(lái)期間也沒(méi)有準(zhǔn)備充分,到底是因?yàn)榧夹g(shù)原因影響自己的發(fā)展,偏移自己規(guī)劃的軌跡,還是錢給少了,不受重視。 跳槽時(shí)時(shí)刻刻都在發(fā)生,但是我建議大家跳槽之前,先想清楚為什么要跳槽。切不可跟風(fēng),看到同事一個(gè)個(gè)都走了,自己也盲目的開(kāi)始面試起來(lái)(期間也沒(méi)有準(zhǔn)備充分),到底是因?yàn)榧?..

    Flink_China 評(píng)論0 收藏0
  • MyBatis理解與掌握(簡(jiǎn)介)

    摘要:語(yǔ)句在代碼中硬編碼,造成代碼不易于維護(hù),實(shí)際應(yīng)用變化的可能較大,變動(dòng)需要改變代碼。對(duì)結(jié)果集解析存在硬編碼查詢列名,變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護(hù),如果能將數(shù)據(jù)庫(kù)記錄封裝成對(duì)象解析比較方便。 MyBatis理解與掌握(簡(jiǎn)介) @(MyBatis)[Java, 框架, MyBatis] 簡(jiǎn)介 ??Mybatis是一個(gè)數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手...

    Pocher 評(píng)論0 收藏0
  • SpringBoot 實(shí)戰(zhàn) (九) | 整合 Mybatis

    摘要:提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的字段關(guān)系映射提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組建維護(hù)提供標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)。層實(shí)現(xiàn)類添加更新刪除根據(jù)查詢查詢所有的層構(gòu)建測(cè)試結(jié)果其他接口已通過(guò)測(cè)試,無(wú)問(wèn)題。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問(wèn)題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問(wèn)題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過(guò)注解的形式...

    felix0913 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<