mybatis里实现动态SQL

JavaEE第四次实验

学会在Mapper映射文件里使用动态SQL以达到灵活对数据库操作的目的

复习常用SQL语句

数据库增删改查SQL语句(整理集合大全)

  • 数据查询-单表(select)

    • 查询表中全部数据
    select * from 表名;
    
    • 查询表中指定列的信息
    select1,2 from 表名;
    
    • 条件查询
    select 列… from 表名 where 条件;  
    
    • 集合查询
    wherein(1,2);  
    
    • 模糊查询
      %:表示0到多个字符,示例:
    wherelike '%0';   //表示以0结尾
    wherelike  '0%';   //表示以0开头
    wherelike  '%0%';   //表示数据中包含0
    

    ​ _:表示一个字符,可多次使用,示例:

    wherelike '%0_';   //数据结尾第二位是0
    
    • 交叉查询
    select *  from1 别名1,2 别名2 where 条件
    
  • 插入数据(insert)

    • 字段对应插入
    insert into 表名(字段1,字段2..) values(1,2);    
    
    • 全表插入
    insert into 表名 values(1,2);  
    
  • 修改数据(update)

    updateset 字段=where 条件;  //带条件修改指定数据,否则修改全表
    
  • 删除数据(delete)

    delete fromwhere 条件;  //删除数据带条件指定数据,否则删除全表数据
    

动态SQL

  • <if>标签
  • <choose>标签
  • <set>标签
  • <trim>标签
1、<if>标签

在这里插入图片描述
可以把标签理解为

	if(user_name!=null && user_name!=''){
		AND user_name=#{user_name}
	}
	if(password!=null && password!=''){
		AND password=#{password}
	}
2、<choose>标签

在这里插入图片描述
可以把标签理解为

	if(user_name!=null && user_name!=''){
		AND user_name=#{user_name}
	}else if(password!=null && password!=''){
		AND password=#{password}
	}else{
		user_id=#{user_id}
	}
3、<set>标签(用于update),不建议使用

在这里插入图片描述
可以把标签理解成

	if(login_name!=null && login_name!=''){
		login_name=#{login_name},
	}
	if(user_name!=null && user_name!=''){
		user_name=#{user_name},
	}
	if(password!=null && password!=''){
		password=#{password},
	}
	if(user_type!=null && user_type!=''){
		user_type=#{user_type}
	}
4、<trim>标签
  • 实现
    在这里插入图片描述
SELECT
	*
FROM
	sys_user
WHERE
	AND user_name=#{user_name}   
	//如果不在上面加prefixOverrides="and",上面这句的前缀就会多个and出来就会报错
	AND password=#{password}
  • 实现
    在这里插入图片描述
UPDATE
	sys_user
SET
	login_name=#{login_name},
	user_name=#{user_name},
	password=#{password},
	user_type=#{user_type},
	//如果不在上面加suffixOverrides=",",上面这句的后缀就会多个,(逗号)而报错
WHERE
	user_id=#{user_id}
r_name},
	password=#{password},
	user_type=#{user_type},
	//如果不在上面加suffixOverrides=",",上面这句的后缀就会多个,(逗号)而报错
WHERE
	user_id=#{user_id}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个流行的Java持久层框架,它允许开发者在运行时构建动态SQL查询,从而提高了代码的灵活性和适应性。MyBatis通过结合XML映射文件和注解,实现动态SQL的执行。以下是MyBatis动态SQL的主要实现方式: 1. XML映射文件(Mapper XML):在MyBatis中,`<select>`, `<update>`, `<delete>`等标签可以包含参数占位符,如`#{id}`, `#{name}`,这些占位符会在运行时被实际的值替换,形成动态的SQL语句。 ```xml <select id="getUser" parameterType="int" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> ``` 2. 参数化查询(Parametrized queries):MyBatis支持使用预编译语句,将参数与SQL语句分离,这样可以防止SQL注入攻击。 3. 显式对象(Parameter Objects):如果动态SQL非常复杂,可以创建一个Java对象作为参数传递给查询,其中包含了多个属性,MyBatis会自动将对象的属性转换为SQL中的列名。 ```java Map<String, Object> params = new HashMap<>(); params.put("startDate", startDate); params.put("endDate", endDate); List<User> users = sqlSession.selectList("getUsers", params); ``` 4. 动态SQL标签:MyBatis提供了`<if>`, `<choose>`, `<when>`, `<otherwise>`等标签,用于根据条件动态生成SQL实现基于条件的分支查询。 ```xml <select id="getUser" parameterType="map" resultType="User"> <if test="id != null"> SELECT * FROM users WHERE id = #{id} </if> <if test="name != null"> AND name LIKE '%' + #{name} + '%' </if> </select> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值