1、参数
一个简单参数
(java基本类型和String)
占位符#{任意字符}和方法参数名无关
多个参数
使用@Param
在方法形参前面加入@Param(“自定义参数名”)
mapper文件使用#{自定义参数名}
使用对象
使用java对象传递参数,java的属性值就是
sql需要的参数值,每一个属性就是一个参数
按位置
参数位置从0开始,引用参数语法 #{ arg 位置 }
第一个参数是#{arg0}, 第二个是#{arg1}
使用Map
Map集合使用 String 的 key,Object 类型的值存储参数。
mapper 文件使用 # { key } 引用参数值。
#和$
#:占位符
告诉 mybatis 使用实际的参数值代替。并使用PrepareStatement 对象执行 sql 语句, #{…}代替sql 语句的“?”。这样做更安全,更迅速,通常也是首选做法。
$:字符串替换
告诉 mybatis 使用$包含的“字符串”替换所在位置。
使用 Statement 把 sql 语句和${}的内容连接起来。
主要用在替换表名,列名,不同列排序等操作。
封装MyBatis输出结果
resultType
<select id="selectById" resultType="com.bjpowernode.domain.Student">
Dao 接口方法返回的是集合类型,需要指定集合中的类型,不是集合本身。
Map
sql 的查询结果作为 Map 的 key 和 value。推荐使用 Map<Object,Object>。
注意:Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录,大于一条记录是错误的。
resultMap
resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。
常用在列名和 java 对象属性名不一样的情况。
使用方式:
1.先定义 resultMap,指定列名和属性的对应关系。
2.在<select>中把 resultType 替换为 resultMap。
<!-- 创建 resultMap
id:自定义的唯一名称,在<select>使用
type:期望转为的 java 对象的全限定名称或别名
-->
<resultMap id="studentMap" type="com.bjpowernode.domain.Student">
<!-- 主键字段使用 id -->
<id column="id" property="id" />
<!--非主键字段使用 result-->
<result column="name" property="name"/>
<result column="email" property="email" />
</resultMap>
<!--resultMap: resultMap 标签中的 id 属性值-->
<select id="selectUseResultMap" resultMap="studentMap">
select id,name,email,age from student where name=#{queryName} orage=#{queryAge}
</select>
实体类属性名和列名不同的处理方式
使用列别名(即 as)和<resultType>
使用<resultMap>
模糊like
模糊查询的实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%”
需求:查询姓名有“力”的
1-java 代码中提供要查询的 “%力%”
2-mapper 文件中使用 like name "%" #{xxx} "%"
2、动态SQL
<if>
当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL 语句中。
语法:<if test=”条件”> sql 语句的部分 </if>
需要添加永为真子句 1=1,防止SQL中只剩下一个空的where,导致SQL出错的情况发生
<where>
在有查询条件时,可以自动添加上 where 子句;没有查询条件时,不会添加 where 子句。
需要注意的是,第一个<if/>标签中的 SQL 片断,可以不包含 and。不过,写上 and 也不错,
系统会将多出的 and 去掉。但其它<if/>中 SQL 片断的 and,必须要求写上。否则 SQL 语句将拼接出错
语法:<where> 其他动态 sql </where>
<foreach>
<foreach/>标签用于实现数组与集合的遍历。
对其使用,需要注意:
➢ collection 表示要遍历的集合类型, list ,array 等。
➢ open、close、separator 为对遍历内容的 SQL 拼接。
语法:
<foreach collection="集合类型" open="开始的字符" close="结束的字符"item="集合中的成员" separator="集合成员之间的分隔符">
#{item 的值}
</foreach>
遍历 List<简单类型>
表达式中的 List 使用 list 表示,其大小使用 list.size 表示。
#{stuid} ---> item属性
遍历 List<对象类型>
#{stuobject.id} ---> item属性.属性
代码片段
<sql/>标签用于定义 SQL 片断,以便其它 SQL 标签复用。而其它标签使用该 SQL 片断,需要使用 <include/>子标签。
该<sql/>标签可以定义 SQL 语句中的任何部分,所以<include/>子标签可以放在动态 SQL 的任何位置。
3、配置文件
使用数据库属性配置文件
1-在 classpath 路径下,创建 properties 文件
2-使用 properties 标签
3-使用 key 指定值
typeAliases(类型别名)
单个:<typeAlias type="com.bjpowernode.domain.Student" alias="mystudent"/>
包:<package name="com.bjpowernode.domain"/>
mappers(映射器)
<mapper resource=" " />
使用相对于类路径的资源,从 classpath 路径查找文件
<package name=""/>
指定包下的所有 Dao 接口