• Mybatis:Mybatis中特殊Sql执行(6)


    Mybaits笔记框架:https://blog.csdn.net/qq_43751200/article/details/128154837
    Mybatis中文官方文档: https://mybatis.org/mybatis-3/zh/index.html

    1. 模糊查询

      /**
         * 根据用户名进行模糊查询
         * @param moHu
         * @return
         */
        List<User> getUserByLike(@Param("moHu") String moHu);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
       
        <select id="getUserByLike" resultType="User">
    
    
            select * from t_user where username like "%"#{moHu}"%"
        select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    测试方法

     @Test
        public void testGetUserByLike(){
            SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
            SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);
            List<User> userList = sqlMapper.getUserByLike("sm");
            for(User user : userList){
                System.out.println(user);
            }
            sqlSession.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
        
        <delete id="deleteMore">
    
    
    
            delete from t_user where id in (${ids})
        delete>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    测试方法

        @Test
        public 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();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    3. 动态设置表名

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

        /**
         * 查询指定表中的数据
         * @param tableName
         * @return
         */
        List<User> getUserByTable(@Param("tableName") String tableName);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
        
        <select id="getUserByTable" resultType="User">
            select * from ${tableName}
        select>
    
    • 1
    • 2
    • 3
    • 4

    测试方法

     @Test
        public 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<User> userList = sqlMapper.getUserByTable("t_user");
            for(User user : userList){
                System.out.println(user);
            }
            sqlSession.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

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

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

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

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

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

        /**
         * 添加用户信息
         * @param user
         */
        void insert(User user);
    
    • 1
    • 2
    • 3
    • 4
    • 5
        
        <insert id="insert" useGeneratedKeys="true" keyProperty="id">
            insert into t_user values(null, #{username}, #{password}, #{age}, #{sex}, #{email})
        insert>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    测试方法

        @Test
        public void testInsert(){
            SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
            SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
            // 可以获取插入数据的id
            User user = new User(null, "Tom", "123", 23, "男", "1235@qq.com");
            mapper.insert(user);
            System.out.println(user);
            sqlSession.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    进入数据库中进行查看

    在这里插入图片描述

    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<User> getUserByLike(@Param("moHu") String moHu);
    
        /**
         * 根据id进行批量删除
         * @param ids
         * @return
         */
        int deleteMore(@Param("ids") String ids);
    
    
        /**
         * 查询指定表中的数据
         * @param tableName
         * @return
         */
        List<User> getUserByTable(@Param("tableName") String tableName);
    
        /**
         * 添加用户信息
         * @param user
         */
        void insert(User user);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    SqlMapper接口对应的SqlMapper.xml

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mapper.SqlMapper">
        
        <select id="getUserByLike" resultType="User">
            select * from t_user where username like '%${moHu}%'
    
    
        select>
    
        
        <delete id="deleteMore">
    
    
    
            delete from t_user where id in (${ids})
        delete>
    
        
        <select id="getUserByTable" resultType="User">
            select * from ${tableName}
        select>
    
        
        <insert id="insert" useGeneratedKeys="true" keyProperty="id">
            insert into t_user values(null, #{username}, #{password}, #{age}, #{sex}, #{email})
        insert>
    
    mapper>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    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 {
        @Test
        public void testGetUserByLike(){
            SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
            SqlMapper sqlMapper = sqlSession.getMapper(SqlMapper.class);
            List<User> userList = sqlMapper.getUserByLike("sm");
            for(User user : userList){
                System.out.println(user);
            }
            sqlSession.close();
        }
    
    
        @Test
        public 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();
        }
    
        @Test
        public 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<User> userList = sqlMapper.getUserByTable("t_user");
            for(User user : userList){
                System.out.println(user);
            }
            sqlSession.close();
        }
    
        @Test
        public void testInsert(){
            SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
            SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
            // 可以获取插入数据的id
            User user = new User(null, "ton", "123", 23, "男", "1235@qq.com");
            mapper.insert(user);
            System.out.println(user);
            sqlSession.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    Shell Bad substitution的解决方法
    ubuntu-18.04 linux-QT版 演示sqlite3增删改查
    03-GO语言基础基本数据类型
    Linux执行脚本报错:-bash: ./bin/start.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
    PostgreSQL优化案例——游标与索引选择
    Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试
    seata分布式事务理论概述
    【信号处理】基于优化算法的 SAR 信号处理(Matlab代码实现)
    1472. 设计浏览器历史记录-双向队列法
    充换电企业开迈斯低成本提升线上应用稳定性的最佳实践
  • 原文地址:https://blog.csdn.net/qq_43751200/article/details/128151097