zoukankan      html  css  js  c++  java
  • 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);
            }
        }
        
    
  • 相关阅读:
    第09组 Beta冲刺(2/5)
    第09组 Beta冲刺(3/5)
    第09组 Beta冲刺(4/5)
    第09组 Beta冲刺(5/5)
    第09组 Beta冲刺(1/5)
    SDN课程阅读作业(2)
    C语言I作业07
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
  • 原文地址:https://www.cnblogs.com/luogg/p/6816057.html
Copyright © 2011-2022 走看看