MyBatis查询接收数据 批量删除

简介: MyBatis查询接收数据 批量删除


查询出的数据只有一条

通过实体类对象接收

mapper接口代码:


映射文件:

    <!--TUser getUserById(@Param("id") Integer id);-->
    <select id="getUserById" resultType="tUser">
        select * from t_user where id = #{id}
    </select>

通过List集合接收

mapper接口代码:


映射文件:

 <!--List<TUser> getUserById(@Param("id") Integer id);-->
    <select id="getUserById" resultType="tUser">
        select * from t_user where id = #{id}
    </select>

resultType属性里面此时是想将接收过来的数据库取来的字段转换成对应实体类的名称,但既然要转换成实体类对象,那肯定是有前提的,这个前提就是字段名与实体类属性一一对应


那么问题来了?
如果此时我们没有创建实体类来接收数据,那么接收数据该由谁来完成呢

通过map集合接收

mapper接口代码:


映射文件:

    <!--   Map<String,Object> getUserByIdToMap();-->
    <select id="getUserByIdToMap" resultType="java.util.Map">
        select * from t_user where id = #{id}
    </select>

查询出的数据有多条

通过list集合接收

mapper接口代码:


映射文件:

<!--List<TUser> getAllUser();-->
    <select id="getAllUser" resultType="tUser">
        select * from t_user
    </select>

通过map类型的list集合接收

mapper接口代码:


映射文件:

 <!--List<Map<String,Object>> getAllUserToMap();-->
    <select id="getAllUserToMap" resultType="map">
        select * from t_user;
    </select>

看到这里不知道大家有没有发现什么问题

我们明明没有在配置文件里面给Map类的全类名设置别名,为什么可以直接给这写成map呢?
MyBatis中设置了默认的类型别名

java.lang.Integer-->int,integer
int-->_int,_Integer
Map-->map
String-->string

@MapKey注解

如果接受多个数据时,我们没有实体类也不想用list集合
可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中

mapper接口:


映射文件:

  <!--Map<String,Object> getAllUserToMap();-->
    <select id="getAllUserToMap" resultType="map">
        select * from t_user;
    </select>

模糊查询

mapper接口:


映射文件:

    <!--List<TUser> getUserByLike(@Param("username")String username);-->
    <select id="getUserByLike" resultType="com.yc.mybatis.pojo.TUser">
        select * from t_user where username like '%${username}%'
       <!-- select * from t_user where username like concat('%',#{username},'%')-->
       <!--select * from t_user where username like "%"#{username}"%"-->
    </select>

批量删除

mapper接口:


映射文件:

    <!--int deleteMore(@Param("ids") String ids);-->
    <delete id="deleteMore">
        delete from t_user where id in(${ids})
    </delete>

${}和#{}的区别

#{}相当于事先给sql语句形成占位符,之后将占位符拿参数依次替换掉占位符

${}就可以想象成我们最开始学JDBC的时候sql语句拼接一样
所以为了防止SQL注入,一般都会选择#{}

但在模糊查询和批量删除的时候,却选择的时
因为


如果是#{}那sql语句会先变成’%?%‘,但在?被’‘包裹着,所以就起不到占位符的作用了

如果是#{}那么value值就会变为’1,2,3’,不符合参数条件

目录
相关文章
|
4天前
|
存储 SQL Java
MyBatis batchInsert 批量插入数据
MyBatis batchInsert 批量插入数据
8 0
|
5天前
|
前端开发 JavaScript Java
解决springboot+vue+mybatis中,将后台数据分页显示在前台,并且根据页码自动跳转对应页码信息
该博客文章讲述了如何在Spring Boot + Vue + MyBatis的项目中实现后台数据的分页查询,并在前端进行显示和页码跳转,包括后端的分页查询实现、前端与后端的交互以及使用Element UI进行分页展示的方法。
|
1月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
39 11
|
1月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
2月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
30 4
|
2月前
|
SQL XML Java
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
25 1
|
2月前
|
Java 数据库连接 数据库
实现Spring Boot与MyBatis结合进行数据库历史数据的定时迁移
实现Spring Boot与MyBatis结合进行数据库历史数据的定时迁移
57 2
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法