MyBatis入門3_mapper.xml優化(parameterType簡寫_NameSpace簡寫_sql片段_特殊字符處理)_動態SQL


本文為博主辛苦總結,希望自己以后返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用.

轉載請注明 出自 : luogg的博客園 謝謝配合!

優化

1.起別名(一般不用,寫全方便查看類出處)

以前的寫法: 

<insert id="insert"parameterType="com.luogg.domain.Person">

在config.xml文件下
<!--起別名-->
    <typeAliases>
        <typeAlias type="com.luogg.domain.Person" alias="Person"/>
    </typeAliases>
    
在Mapper.xml文件下
<select id="selById" parameterType="int" resultType="Person">
        SELECT * FROM person WHERE id = #{id}
    </select>
    

2.命名空間的優化(一般不用,寫全方便查看類出處)

命名空間是可以隨意修改的,但是有可能不同包下出現相同的實體類,所以還是加上包名方便區分.

3.sql片段

很多時候會寫一大串的列名,比如select 所有字段,我們把經常出現的字段放入sql標簽中,將來直接引用
<!--sql片段-->
    <sql id="cols">id,user_name,age,sex</sql>
    
<select id="find" resultMap="personRM">
        SELECT <include refid="cols"/> from person
    </select>
    

動態sql語句(根據用戶填入條件查詢,比如可以填入name搜索,也可以填入age搜索,也可以都填)

將parameterType設置成map即可
<where> 表示條件查詢,並在后邊自動添加一個1=1
<set>標簽,表示修改時候用的,自動刪除最后一個條件的逗號
<foreach>標簽,循環標簽,用於in子查詢

<!--動態sql語句,where標簽相當於where 1=1 -->
    <select id="selDongtai" parameterType="map" resultMap="personRM">
      SELECT <include refid="cols"/> FROM person
      <where>
          <if test="name != null">and user_name like #{name}</if>
          <if test="sex != null">and sex = #{sex}</if>
      </where>
    </select>
    
@Test //動態sql語句
    public void selDongtai(){
        SqlSession session = factory.openSession();
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("name","l%");
        map.put("sex",1);
        List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.selDongtai",map);
        System.out.println(list.size());
        for(Person p : list){
            System.out.println(p);
        }
    }
    

特殊字符處理 CDATA

遇到特殊字符,我們需要將其原樣輸出,比如<>,此時加上<![CDATA[原樣輸出的內容 ]]> 
<!--特殊字符的處理,查詢年齡在20到22歲的人員-->
    <select id="selTeshu" parameterType="map" resultMap="personRM">
        SELECT <include refid="cols"/> FROM person
        <where>
            <if test="name != null">and user_name like #{name}</if>
            <if test="ageStart !=null"> and age >= #{ageStart}</if>
            <if test="ageEnd !=null"> <![CDATA[and age <=]]> #{ageEnd}</if>
        </where>
    </select>
    
@Test  //特殊字符處理
    public void testTeshu(){
        SqlSession session = factory.openSession();
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("ageStart",20);
        map.put("ageEnd",22);
        List<Person> list = session.selectList("com.luogg.mapper.PersonMapper.selTeshu",map);
        System.out.println(list.size());
        for(Person p : list){
            System.out.println(p);
        }
    }
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM