IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MyBatis(四) -> 正文阅读

[大数据]MyBatis(四)

1.映射文件中区别#{}和${}的用法

在Mybatis的mapper文件【sql映射文件】中,参数传递有2种方式,一种是#{},一种是${}

#{} 实现的是sql语句的预处理,之后执行的sql中用?代替,类似于jdbc中的preparedStatement()方法。使用的时候,不需要关注参参数的类型,mybatis会自动类型转换,并且防止sql注入。

¥{}实现的sql语句的拼接操作,不做数据类型的转换,需要自行判断数据类型,不防止sql注入,类似于的jdbc中statement()。

总结#{}占位符,${}用于sql拼接。

#{}:例子

<insert id="insertStu" parameterType="com.student.bean.StudentBean">
        insert into t_student values (null,#{stu_name},#{stu_pass},#{stu_age},#{stu_address});
</insert>

${}演示

<insert id="insertStu" parameterType="com.student.bean.StudentBean">
        insert into t_student values (null,'${stu_name}','${stu_pass}',${stu_age},'${stu_address}');
</insert>

2.动态SQL

如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。

利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

常用的动态SQL

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

1.foreach元素:

格式:

<foreach collection="list【表示需要被遍历的数据结合】" 
item="从collection对应的集合中得到的每一个数据对象【java对象】" 
separator="数据对象【java对象】的分隔符">
	    	每一个具体的数据对象
</foreach>

foreach元素,实现批量添加

<insert id="insertPersonForeach" parameterType="java.util.List">
    insert into t_person values
    <foreach collection="list" item="person" separator=",">
        (null,#{person.pername},#{person.perage},#{person.peraddress})
    </foreach>
</insert>

?foreach元素,实现批量删除

<delete id="deleteList" parameterType="java.util.List">
	delete from t_person where per_id in
		<!-- collection:循环的集合/数组 -->
		<!-- item:来自集合/数组中的每一个元素对象 -->
		<!-- separator:分割符 -->
		<!-- open:开始符号 -->
		<!-- close:结束符号 -->
	<foreach collection="array" item="id" open="(" separator="," close=")">
		   #{id}
	</foreach>
</delete>

?2.if元素

<select id="selectPersonByIf" parameterType="hashMap" resultMap="personMap">
    select * from t_person where 1=1
    <if test="name !=null and name !=''">
        and  per_name like #{name}
    </if>
</select>

如果有就根据用户名模糊查询

?

如果没有就查询所有

3.choose (when, otherwise)

?【每次只匹配一个条件】

需求:查询用户信息,如果输入了用户名,根据用户名进行模糊查找,返回

????????????????如果输入了年龄,根据年龄进行匹配查找,返回

????????????????如果输入了地址,根据地址进行模糊查找,返回

如果查询条件都为空,那么就查询所有。

有点类似于Switch语句

例子:

<resultMap id="personMap" type="com.wangxing.mybatis.bean.Person">
    <id column="per_id" property="perid"></id>
    <result column="per_name" property="pername"></result>
    <result column="per_age" property="perage"></result>
    <result column="per_address" property="peraddress"></result>
</resultMap>
<select id="selectPersonByChoose" parameterType="hashMap" resultMap="personMap">
    select * from t_person where 1=1
    <choose>
        <when test="name !=null and name !=''">and  per_name like #{name}</when>
        <when test="age !=0 and age !=null">and  per_age=#{age}</when>
        <when test="address !=null and address !=''">and  per_address like #{address}</when>
        <otherwise></otherwise>
    </choose>
</select>

4.where元素 == sql中where

例子:

<select id="strictSelectStudent"  parameterType="java.util.HashMap" resultMap="stumap">
   select * from t_student
   <where>

            <if test="name!=null and name!=''">
                and stu_name like '${name}%'
            </if>

            <if test="age != null and age != 0">
                and stu_age = #{age}
            </if>
            <if test="address != null and address != ''">
                and stu_address = #{address}
            </if>
    </where>
</select>

5. set元素==sql中set

<update id="updatePerson" parameterType="hashMap">
    update  t_person
    <set>
        <if test="name !=null and name !=''">
            per_name = #{name},
        </if>
        <if test="age !=null and age !=0">
            per_age = #{age},
        </if>
        <if test="address !=null and address !=''">
            per_address = #{address},
        </if>
    </set>
    <where>per_id = #{id}</where>
</update>

?

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????无奈源于不够强大

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-27 11:00:44  更:2022-02-27 11:00:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:53:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码