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

本文爲博主辛苦總結,但願本身之後返回來看的時候理解更深入,也但願能夠起到幫助初學者的做用.

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

優化

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

之前的寫法:

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

在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

<!--動態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);
        }
    }
相關文章
相關標籤/搜索