前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis(三)执行特殊Sql

Mybatis(三)执行特殊Sql

原创
作者头像
麻辣醉虾
修改2022-04-05 13:38:42
2710
修改2022-04-05 13:38:42
举报

放在前面,给大家推荐一个idea插件,可以提供mapper接口到xml配置之间的跳转。

MyBatisX

插件
插件

添加成功之后,会在接口左侧有个图标,点击图标即可跳转。

本文章中介绍的执行特殊sql包括以下几种

  • 模糊查询
  • 批量删除
  • 动态设置表名
  • 添加功能获取自增主键

模糊查询

mapper.java和xml中用到 的代码。

代码语言:html
复制
<!--List<User> getUserByLike(@Param("username") String userName);-->

<select id="getUserByLike" resultType="User">
    select * from t_user where username like '%${userNamew}%';
</select>

测试.java

代码语言:javascript
复制
    @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        List<User> user = mapper.getUserByLike("张三");
        System.out.println(user);
    }

测试结果

模糊查询测试结果
模糊查询测试结果

批量删除

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

批量删除形式:

代码语言:sql
复制
select * from t_user where id in (  , )

首先添加用于删除的数据

代码语言:javascript
复制
INSERT t_user VALUES(null, '王五', 123, 32, '女', '1432@qq');
INSERT t_user VALUES(null, '李四', 123, 12, '男', '123@3221');

mapper.java和xml中用到 的代码。

代码语言:html
复制
<!--int deleteMore(@Param("ids") String ids);-->
<delete id="deleteMore">
	delete from t_user where id in (${ids})
</delete>

测试.java

代码语言:java
复制
//测试类
@Test
public void deleteMore() {
	SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    int result = mapper.deleteMore("7,8");
    System.out.println(result);
}

测试结果

测试批量删除结果
测试批量删除结果

动态设置表名

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

xml配置

代码语言:javascript
复制
<!--List<User> getUserByTable(@Param("tableName") String tableName);-->
<select id="getUserByTable" resultType="User">
	select * from ${tableName}
</select>

添加功能获取自增的主键

在mapper.xml中设置两个属性

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

代码语言:html
复制
<!--void insertUser(User user);-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user values (null,#{username},#{password},#{age},#{sex},#{email})
</insert>
代码语言:javascript
复制
//测试类
@Test
public void insertUser() {
	SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
	User user = new User(null, "ton", "123", 23, "男", "123@321.com");
	mapper.insertUser(user);
	System.out.println(user);
	//输出:user{id=10, username='ton', password='123', age=23, sex='男', email='123@321.com'},
	//自增主键存放到了user的id属性中
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模糊查询
  • 批量删除
  • 动态设置表名
  • 添加功能获取自增的主键
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档