mybatis特殊的SQL执行

1.模糊查询

通过用户名模糊查询用户信息 模糊查询时使用#{}不可取,因为系统编译时会将#{}转为?(占位符), 并将?和%%看作是一串字符,并不会实现占位符的功能 解决方法如下:

方法一:使用¥{}(例:'%<span data-formula="{mohu}%')

方法二:使用concat拼接字符(例:'%',#{mohu},'%')

方法三:"%"#{mohu}"%"

进行模糊查询时使用方法三方便(建议) " aria-hidden="true">{mohu}%')

方法二:使用concat拼接字符(例:'%',#{mohu},'%')

方法三:"%"#{mohu}"%"

进行模糊查询时使用方法三方便(建议)

List<User> getUserByLike(@Param("mohu") String mohu);
 <!--List<User> getUserByLike(@Param("mohu")String mohu);-->
    <select id="getUserByLike" resultType="User">
        <!--方法三-->select * from t_user where username like "%"#{mohu}"%"
    </select>
        <!--方法二:select * from t_user where username like concat('%',#{mohu},'%')-->
        <!--方法一:select * from t_user where username like '%${mohu}%'-->
@Test
    public void testSpecialSQLMapper() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
        List<User> like = mapper.getUserByLike("y");
        like.forEach(System.out::println);
    }

2.批量删除

批量删除用户 本次仅针对于delete from t_user where id in ()这种删除方法 可用¥{}不可用#{} 因为#{}会自动加上单引号,sql语句会变成delete from t_user where id in ('目标值'),是不对的 而¥{}则需要手动加入单引号,所以delete from t_user where id in (¥{ids})会变成delete from t_user where id in (目标值)是对的

void deleteMoreUser(@Param("ids") String ids);
<!--void deleteMoreUser(@Param("ids")String ids);ids:9,10-->
    <delete id="deleteMoreUser">
        delete from t_user where id in (${ids})
    </delete>
@Test
    public void testDeleteMoreUser() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
        mapper.deleteMoreUser("3,4");
    }

3.动态设置表名

动态设置表名,查询用户信息 可用¥{}不可用#{},因为#{}会自动加上单引号,所以select * from #{目标值}会变成select * from '目标值',是错的,而¥{}则要手动加入单引号,所以select * from ¥{目标值}会变成select * from 目标值是对的

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() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
        List<User> userList = mapper.getUserList("t_user");
        userList.forEach(System.out::println);
    }

4.获取自增主键

添加用户信息,并获取自增的主键 useGeneratedKeys:表示添加功能使用自增的主键 keyProperty:将添加的数据的自增主键为实体类类型的参数的属性赋值

    void insertUser(User user);
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})
    </insert>
@Test
    public void testInsertUser() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
        User user = new User(null,"xiaio","dadada",12,"男","dadadada");
        mapper.insertUser(user);
    }

本文章使用limfx的vscode插件快速发布