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);
        }
    }
												
											MyBatis入门3_mapper.xml优化(parameterType简写_NameSpace简写_sql片段_特殊字符处理)_动态SQL的更多相关文章
- MyBatis入门学习教程-优化MyBatis配置文件中的配置
		
一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 <?xml version=" ...
 - mybatis的mapper.xml使用parameterType使用的报错
		
错误在于一个写的get(Long id)的查询方法, 而在Mapper.xml中我定义了这个接收的参数的类型是int类型, 结果就报了如下的错误 org.mybatis.spring.MyBatisS ...
 - Mybatis入门(四)配置优化(一)
		
这一章主要实验Mybatis的引入外部配置文件,属性(properties)这个属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素 ...
 - mybatis的mapper特殊字符转移以及动态SQL条件查询
		
前言 我们知道在项目开发中之前使用数据库查询,都是基于jdbc,进行连接查询,然后是高级一点jdbcTemplate进行查询,但是我们发现还是不是很方便,有大量重复sql语句,与代码偶合,效率低下,于 ...
 - MyBatis 入门(一)
		
1. MyBatis 概述 MyBatis 是一个半自动化的持久层框架; 核心SQL,开发人员可以进行优化; SQL和Java编码分开,功能边界清晰,一个专注业务,一个专注数据; JDBC: SQL ...
 - Mybatis:缓存,动态SQL,注解SQL以及动态标签使用
		
1 转义字符 字符 转义 描述 < < 小于 <= <= 小于等于 > > 大于 >= >= 大于等于 <> <> 不等于 &a ...
 - Mybatis的动态SQL实现
		
一.动态SQL简介 MyBatis的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的 ...
 - MyBatis注解及动态Sql
		
一.注解实现MyBatis配置 java注解是在jdk1.5版本之后开始加入的,不得不说注解对于我们开发人员来说是个很方便的东西,实现起来也非常的简单,下边我们说一下在MyBatis中使用注解来替换M ...
 - SpringBoot使用Mybatis注解开发教程-分页-动态sql
		
代码示例可以参考个人GitHub项目kingboy-springboot-data 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframe ...
 
随机推荐
- 问答:怎样规划CSS 中 的命名方式 怎样看待 CSS 中 BEM 的命名方式?
			
好多盆友 非常纠结 css命名规则 怎么弄,还没起步就被绊住了.那么今天蝈蝈就针对这个问题来讨论一下 没什么技术 含量.但却对效率开发至关重要的 "问题". 下文是一些知乎大神的个 ...
 - linux sed 命令的用法
			
原文 http://blog.chinaunix.net/uid-24426415-id-77244.html ------------------------------------------- ...
 - 修改PostgreSQL数据库的默认用户postgres的密码
			
有时候,忘记了postgresql 安装时默认用户postgres 的密码,怎么办呢? linux shell命令下面输入: sudo -u postgres psql (这样就可以直接登录进pos ...
 - [Dart] Understand Variables and Constants in Dart
			
In this lesson, we will look at how to create variables and constants. These are containers that sto ...
 - 关于Android中的四大组件(Service的开启与关闭)
			
前言 服务(Service)是Android系统中的四大组件之中的一个.服务主要用于两个目的:后台执行和跨进程訪问. 通过启动 一个服务.能够在不显示界面的前提下在后台执行指定的任务,这样能够不影响用 ...
 - 学习C语言,困难吗?
			
要说计算机如今什么最火.无异于网络.看看各大计算机站点,满眼尽是网络project师,什么IP啊,路由啊,虚拟机啊,总之,操作性的计算机技能牢牢占领了半壁江山. 这些技巧当然重要.可是 ...
 - Ubuntu 13.10 安装 TeX Live 2013
			
注:笔者也是刚刚接触TeX系统,水平有限,若有疏漏之处还望指正. 中文解决方案 对于LaTeX中文排版,比较方便有这样的几种解决方案:LaTeX+CJK / LaTeX+XeTeX / CTeX.其中 ...
 - ubuntu安装phpstorm
			
首先要安装jdk $ java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1 ...
 - 02_jni_hello_c函数介绍
			
介绍NDK平台都有哪些工具.通过NDK这套工具做安卓下的JNI开发. 可能有一些需求更适合通过C去做,有一些功能要通过C去实现.一个安卓程序,它本身还是一个Java应用.有一些功能/方法不通过Java ...
 - PCB Winform中的WebBrowser扩展拖放(拖拽)功能 实现方法
			
我们在Winform支持网页通常增加WebBrowser控件实现,相当于内嵌浏览器浏览网页使用, 而此WebBrowser默认情况是文件拖入功能是不支持的, 如何才能支持呢.在这里介绍如何实现方法 一 ...