• 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);
            }
        }
        
    
  • 相关阅读:
    Hibernate检索策略与检索方式
    获取分组后的TOP 1和TOP N记录
    Oracle 高级排序函数 和 高级分组函数
    Java中的字符串常量池
    代码的完整性:打印1到最大的n位数
    代码的完整性:数值的整数次方
    递归和循环:矩形覆盖
    位运算:二进制中1的个数
    递归和循环:变态跳台阶
    递归和循环:跳台阶
  • 原文地址:https://www.cnblogs.com/luogg/p/6816057.html
Copyright © 2020-2023  润新知