特殊SQL执行 模糊查询&批量删除&动态设置表名& 获取自增主键

1.模糊查询

模糊查询,查询的结果条数不固定,不确定查询出来的数据有几条,方法返回值用list集合获取。

#{}对应的是占位符赋值,解析的时候解析为一个?号,

?号是在单引号里面是字符串的一部分,不会当做占位符解析。

①接口方法

//    通过用户名模糊查询用户信息
List<User> getUserByLike(@Param("mohu") String mohu);

②映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.SpecialSQLMapper">

<!--    List<User> getUserByLike(@Param("mohu") String mohu);-->
    <select id="getUserByLike" resultType="User">
       <!--第一种方式用${}-->
  <!--   select * from t_user where username like '%${mohu}%'  -->

<!--第二中方式用函数拼接-->
<!-- select * from t_user where username like concat('%',#{mohu},'%') -->

<!-- 第三种方式用#{}加双引号 -->
      select * from t_user where username like "%"#{mohu}"%"
    </select>

</mapper>

③测试类

public class SpecialSQLMapperTest {
    @Test
    public void testGetUserByLike(){
        SqlSession session = SqlSessionUtil.getSession();
        SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
        List<User> a = mapper.getUserByLike("a");
        for (User user:a){
            System.out.println(user);
        }
    }

2. 批量删除

①接口方法

//批量删除
    void deleteMoreUser(@Param("ids") String ids);

②映射文件

<!--  void deleteMoreUser(@Param("ids") String ids);-->
    <delete id="deleteMoreUser">
        delete from t_user where id in (${ids})
<!-- 拼接后  delete from t_user where id in (9,10)-->
    </delete>

③测试类

    @Test
    public void testDeleteMoreUser(){
        SqlSession session = SqlSessionUtil.getSession();
        SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
        mapper.deleteMoreUser("9,10");
    }

#{}最终会被解析加上单引号,用的占位符赋值,自动加单引号。

3. 动态设置表名

①接口方法

//    动态设置表名,查询当前用户信息
    List<User> getUserList(@Param("tableName") String tableName);

②映射文件

<!--    List<User> getUserList(@Param("tableName") String tableName);-->
    <select id="getUserList" resultType="User">
        select * from ${tableName}
    </select>

③测试类

 @Test
    public void testGetUserList(){
        SqlSession session = SqlSessionUtil.getSession();
        SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
        List<User> t_user = mapper.getUserList("t_user");
        for (User user:t_user){
            System.out.println(user);
        }
    }

4. 添加功能获取自增的主键 常用

场景模拟:

t_clazz(clazz_id,clazz_name)

t_student(student_id,student_name,clazz_id)

1、添加班级信息

2、获取新添加的班级的id

3、为班级分配学生,即将某学的班级id修改为新添加的班级的id

添加班级信息的同时来为班级分配学生,其实就是要为学生设置所对应的班级id

useGeneratedKeys:表示当前添加功能使用了自增的主键

keyProperty:将添加的数据自增主键为实体类类型的参数的属性赋值

为什么不作为方法的返回值,因为增删改的返回值固定的,

受影响的行数,只能把它放到当前传输过来的参数的某一个属性中。

①接口方法

//     添加用户信息并获得自增的主键
    void insertUser(User user);

②映射文件

<!--  void insertUser(User user); -->
<!--
useGeneratedKeys:表示当前添加功能使用了自增的主键
keyProperty:将添加的数据自增主键为实体类类型的参数的属性赋值
-->
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})
    </insert>

③测试类

 @Test
    public void testInserUser(){
        SqlSession session = SqlSessionUtil.getSession();
        SpecialSQLMapper mapper = session.getMapper(SpecialSQLMapper.class);
        User user=new User(null,"xiaoming","12345678",23,"男","123456@qq.com");
        mapper.insertUser(user);
        System.out.println(user);
    /**
      * User{id=20, username='xiaoming', password='12345678', age=23, gender='男', email='123456@qq.com'}
      */
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值