MyBatis学习笔记

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 接口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Famiglistimott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值