特殊SQL的执行

模糊查询

select * from t_user where username like ’%a%‘
查询我们的username中带有a的所有数据,在应用中我们的a是传递过去的,不是写死的

之前我们进行数据库操作的时候,都是使用#{}来表示占位符,但是这里就不太行。
演示#{}占位符:

/**
     * 模糊查询
     */
    List<User> getUserByLike(@Param("username") String username);
<!--List<User> getUserByLike(@Param("username") String username);-->
    <select id="getUserByLike" resultType="User">
        select * from t_user where username like '%#{username}%'
    </select>
@Test
    public void getUserByLikeTest(){
        SqlSession sqlSession = getSqlSessionUtil.getSqlSession();
        SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
        List<User> users = mapper.getUserByLike("i");
        users.forEach(user -> System.out.println(user));
    }

在这里插入图片描述
以上问题我们有三种解决方法
方法一

将#{}换成${}来表示占位符。

<select id="getUserByLike" resultType="User">
        select * from t_user where username like '%${username}%'
    </select>

在这里插入图片描述
方法二

使用字符串拼接来传递参数

<select id="getUserByLike" resultType="User">
        select * from t_user where username like concat('%', '#{username}', '%')
    </select>

在这里插入图片描述
方法三(推荐使用)

<select id="getUserByLike" resultType="User">
   select * from t_user where username like   "%"#{username}"%";
</select>

在这里插入图片描述

批量删除

#{}会自动给传递的参数添加"",而KaTeX parse error: Expected 'EOF', got '#' at position 92: …3的数据,没有的则不删除 使用#̲{}的删除sql: delet…{}删除sql:
delete from t_user where id in (1, 2, 3)

总结:批量删除的占位符我们只能使用${}来实现

动态设置表名

我们在写sql语句中除了后面的条件的参数可以传递外,表名也是可以传递的(理论上所有的数据都可以传递).
由sql语句的语法,我们知道sql语句的表名是不能加’ '的,故和批量删除一样,我们也只能够使用${}来传递参数.

  /**
     * 查询表名来查询数据
     */
    List<User> getUserByTableName(@Param("tableName") String table);
 <select id="getUserByTableName" resultType="com.atguigu.mybatis.pojo.User">
 
        select * from ${tableName}

    </select>

在这里插入图片描述

添加功能获取自增的主键

应用场景:
假入我们有个学生表t_student
我们还有个班级表t_class
我们的学生和班级之间的一个关系:t_student中有一个外键(是t_class的主键)
如果我们要给某某班级分配学生,就是要获取t_class的自增主键,然后将需要分到该班级的学生的某属性(外键)值修改为该班级的主键值.

/**
 
添加用户信息
 
 
useGeneratedKeys:设置使用自增的主键

keyProperty:因为增删改有统一的返回值是受影响的行数,
因此只能将获取的自增的主键放在传输的参数user对象的某个属性中
*/
int insertUser(Useruser);

<!--int insertUser(Useruser);-->
	<insert id="insertUser"useGeneratedKeys="true"keyProperty="id"> insert into t_user values(null,#{username},#{password} )
	<!--这个的意思就是将t_student的外键(id)修改为t_class的某个自增外键-->
</insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值