Mybatis学习之特殊SQL的执行

目录

模糊查询

批量删除

动态设置表名

获取自增的主键


模糊查询

 /**
     * 根据用户名模糊查询用户
     * @param username
     * @return
     */
    List<User> getUserByNameLike(@Param("username") String username);
  <select id="getUserByNameLike" resultType="com.csdn.beans.User">
        <!--方式一,通过#{username} 来实现,
        select id, username, password, age, sex, email
        from t_user where username like concat('%',#{username},'%')-->
        <!--方式二,使用#{username}
        select id, username, password, age, sex, email
        from t_user where username like '%${username}%'-->
        <!--方式三,也是最常用的方式-->
        select id, username, password, age, sex, email
        from t_user where username like "%"#{username}"%"
    </select>
  @Test
    public void test1(){
        SqlSession sqlSession= SqlSessionUtil.getSqlSession();
        SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);
        List<User> users = mapper.getUserByNameLike("张");
        users.forEach(user -> System.out.println(user));

    }

结果:
User(id=6, username=张三1, password=123, age=23, sex=女, email=abc@123)
User(id=7, username=张三, password=123, age=23, sex=女, email=abc@123)

批量删除

只能使用${},如果使用#{},则解析后的sql语句为delete from t_user where id in ('1,2,3'),这样是将1,2,3看做是一个整体,只有id为1,2,3的数据会被删除。正确的语句应该是delete from t_user where id in (1,2,3),或者delete from t_user where id in ('1','2','3')

  /**
     * 根据ids进行批量删除
     * @param ids
     * @return
     */
    int deleteBatch(@Param("ids") String ids);
 <delete id="deleteBatch">
        delete from t_user where id in (${ids})
    </delete>
 @Test
    public void test2(){
        SqlSession sqlSession= SqlSessionUtil.getSqlSession();
        SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);
        int batch = mapper.deleteBatch("9,10,11");
        System.out.println(batch);//1,返回被删除的条数。因为数据库中只包含有9的主键值,所以返回1

    }

动态设置表名

只能使用${}

  /**
     * 查询指定表中的所有的用户信息
     * @param tableName
     * @return
     */
    List<User> getUserFromTable(@Param("tableName") String tableName);
 <select id="getUserFromTable" resultType="com.csdn.beans.User">
        select id, username, password, age, sex, email
        from ${tableName}
    </select>
  @Test
    public void test3(){
        SqlSession sqlSession= SqlSessionUtil.getSqlSession();
        SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);
        List<User> users = mapper.getUserFromTable("t_user");
        users.forEach(user -> System.out.println(user));

    }
结果:

User(id=6, username=张三1, password=123, age=23, sex=女, email=abc@123)
User(id=7, username=张三, password=123, age=23, sex=女, email=abc@123)
User(id=8, username=admin, password=123456, age=22, sex=男, email=123@123)

获取自增的主键

在mapper.xml中设置两个属性

useGeneratedKeys:设置使用自增的主键

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

  /**
     * 插入新的用户记录并返回主键值
     * @param user
     */
    void insertUser(User user);
  <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>
  @Test
    public void test4(){
        SqlSession sqlSession= SqlSessionUtil.getSqlSession();
        SpecialMapper mapper = sqlSession.getMapper(SpecialMapper.class);
        User user=new User(null,"zhangsan","123",45,"女","email@123.com");
        mapper.insertUser(user);
        System.out.println(user.getId());//10

    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喜欢编程的夏先生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值