Mybatis:Mybatis中特殊Sql执行(6)
创始人
2024-03-13 01:13:39
0

特殊Sql执行

  • 1. 模糊查询
  • 2. 批量删除
  • 3. 动态设置表名
  • 4. 添加功能获取自增的主键
  • 5. 整体代码

1. 模糊查询

  /*** 根据用户名进行模糊查询* @param moHu* @return*/List getUserByLike(@Param("moHu") String moHu);
   

注意:‘${name}’ = ‘name’, #{name} = name, 一个加引号,一个不加,要求sql功底一定要好,知道哪些添加引号,哪些不可以添加。

测试方法

 @Testpublic void testGetUserByLike(){SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);List userList = sqlMapper.getUserByLike("sm");for(User user : userList){System.out.println(user);}sqlSession.close();}

在这里插入图片描述

2. 批量删除

只能使用${},如果使用#{},则解析后的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')

 /*** 根据id进行批量删除* @param ids* @return*/int deleteMore(@Param("ids") String ids);
    


delete from t_user where id in (${ids})

测试方法

    @Testpublic void testDeleteMore() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);int count = sqlMapper.deleteMore("22, 23, 24");System.out.println("影响行数:" + count);sqlSession.close();}

在这里插入图片描述

3. 动态设置表名

只能使用${},因为表名不能加单引号

    /*** 查询指定表中的数据* @param tableName* @return*/List getUserByTable(@Param("tableName") String tableName);
    

测试方法

 @Testpublic void testGetUserByTable() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);// 查询t_user表的数据List userList = sqlMapper.getUserByTable("t_user");for(User user : userList){System.out.println(user);}sqlSession.close();}

在这里插入图片描述

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

功能:获取插入数据自增主键的id,便于后续程序的操作

  • 在mapper.xml中设置两个属性

  • useGeneratedKeys:设置使用自增的主键

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

    /*** 添加用户信息* @param user*/void insert(User user);
    insert into t_user values(null, #{username}, #{password}, #{age}, #{sex}, #{email})

测试方法

    @Testpublic void testInsert(){SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);// 可以获取插入数据的idUser user = new User(null, "Tom", "123", 23, "男", "1235@qq.com");mapper.insert(user);System.out.println(user);sqlSession.close();}

在这里插入图片描述

进入数据库中进行查看

在这里插入图片描述

5. 整体代码

SqlMapper接口

package com.atguigu.mapper;import com.atguigu.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** @Author Mr.Lu* @Date 2022/12/2 15:20* @ClassName SqlMapper* @Version 1.0*/
public interface SqlMapper {/*** 根据用户名进行模糊查询* @param moHu* @return*/List getUserByLike(@Param("moHu") String moHu);/*** 根据id进行批量删除* @param ids* @return*/int deleteMore(@Param("ids") String ids);/*** 查询指定表中的数据* @param tableName* @return*/List getUserByTable(@Param("tableName") String tableName);/*** 添加用户信息* @param user*/void insert(User user);
}

SqlMapper接口对应的SqlMapper.xml






delete from t_user where id in (${ids})insert into t_user values(null, #{username}, #{password}, #{age}, #{sex}, #{email})

MybatisSqlTest测试类

package com.atguigu.test;import com.atguigu.mapper.SqlMapper;
import com.atguigu.pojo.User;
import com.atguigu.util.SqlSessionFactoryUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** @Author Mr.Lu* @Date 2022/12/2 15:21* @ClassName MybatisSqlTest* @Version 1.0*/
public class MybatisSqlTest {@Testpublic void testGetUserByLike(){SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);List userList = sqlMapper.getUserByLike("sm");for(User user : userList){System.out.println(user);}sqlSession.close();}@Testpublic void testDeleteMore() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);int count = sqlMapper.deleteMore("7,8,9");System.out.println("影响行数:" + count);sqlSession.close();}@Testpublic void testGetUserByTable() throws IOException {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession = sqlSessionFactory.openSession(true);SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);List userList = sqlMapper.getUserByTable("t_user");for(User user : userList){System.out.println(user);}sqlSession.close();}@Testpublic void testInsert(){SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);// 可以获取插入数据的idUser user = new User(null, "ton", "123", 23, "男", "1235@qq.com");mapper.insert(user);System.out.println(user);sqlSession.close();}
}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...