Mybatis增删改查基础

MyBatis可根据查询的结果类型、查询条件的不同进行统一处理。

1 查询数据

1.1 根据查询数据条数来分析不同的情况

1.1.1 查询单条数据

可以通过实体类、list集合、map等处理查询结果。

  • 通过实体类查询单条数据
java 复制代码
   User queryUserById(@Param("id") Integer id);
xml 复制代码
   <select id="queryUserById" resultType="User">
       select * from t_user where id = #{id}
   </select>
  • 通过map接收
java 复制代码
 Map<String, Object> queryUserMapById(@Param("id") Integer id);
xml 复制代码
 <select id="queryUserMapById" resultType="map">
     select * from t_user where id = #{id}
 </select>
1.1.2 查询多条数据
  • 通过类型为Map的list集合接收
java 复制代码
    List<Map<String, Object>> queryUserMapList();
xml 复制代码
    <select id="queryUserMapList" resultType="map">
      select * from t_user
    </select>
  • 通过类型为实体的list集合接收
java 复制代码
    List<User> selectUserList();
xml 复制代码
    <select id="selectUserList" resultType="User">
      select * from t_user
    </select>
  • 通过map接收

一条数据对应一个map,此时需要通过@MapKey注解设置map集合的键,值是每条数据对应的map集合

注意:此时一定不能使用实体类对象接收,会抛出TooManyResultsException

java 复制代码
    @MapKey("id")
    Map<String, Object> getAllUserToMap();
xml 复制代码
    <select id="getAllUserToMap" resultType="map">
    	select * from t_user
    </select>

1.2 其他情形

1.2.1 模糊查询
java 复制代码
    List<User> queryUserByLike(@Param("username") String username);
xml 复制代码
    <select id="queryUserByLike" resultType="User">
      <!-- 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>
1.2.2 动态表名
java 复制代码
    List<User> queryAllUser(@Param("tableName") String tableName);
xml 复制代码
    <select id="queryAllUser" resultType="User">
      select * from ${tableName}
    </select>

2 新增数据

2.1 通过实体类新增
java 复制代码
    @Test
    public void testInsertUser(){
      SqlSession sqlSession = SqlSessionUtil.getSqlSession();
      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
      User user = new User();
      user.setUsername("中华");
      user.setPassword("123456");
      user.setAge(32);
      user.setSex("男");
      int i = userMapper.insertUser(user);
      System.out.println(i);
    }
java 复制代码
    int insertUser(User user);
xml 复制代码
    <insert id="insertUser">
      insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})
    </insert>

此处,表的主键设计为自增。

也可以明确设置主键为自增:

xml 复制代码
    <!--
       useGeneratedKeys:设置使用自增主键
       keyProperty:自增主键放在传所参数对象的字段属性名,会将生成的自增主键设置到入参的字段中
       keyColumn:自增主键对应表的字段名
    -->
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="User">
      insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})
    </insert>
2.2 通过map新增
java 复制代码
    @Test
    public void testQueryByMapParam(){
      SqlSession sqlSession = SqlSessionUtil.getSqlSession();
      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
      Map<String, Object> map = new HashMap<>();
      map.put("username", "李斯");
      map.put("age", 23);
      map.put("password", "000000");
      map.put("sex", "女");
      List<User> admin = userMapper.insertUser(map);
      admin.stream().forEach(System.out::println);
    }
java 复制代码
    int insertUser(Map<String, Object> map);
xml 复制代码
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="map">
      insert into t_user values(null, #{username}, #{password}, #{age}, #{sex})
    </insert>

3 修改数据

java 复制代码
    int udpateUserById(User user);
xml 复制代码
    <update id="udpateUserById" parameterType="User">
      update t_user set username = #{username}, password = #{password} where id = #{id}
    </update>

4 删除数据

4.1 单个删除
java 复制代码
    int deleteUserById(@Param("id") String id);
xml 复制代码
    <delete id="deleteUserById">
      delete from t_user where id = #{id}
    </delete>
4.2 批量删除
java 复制代码
    int deleteUserByIds(@Param("ids") String ids);
xml 复制代码
    <delete id="deleteUserByIds">
      delete from t_user where id in (${ids})
    </delete>
java 复制代码
    int result = deleteMapper.deleteUserByIds("5,6,7");
相关推荐
哆啦A梦15885 小时前
Springboot整合MyBatis实现数据库操作
数据库·spring boot·mybatis
弹简特13 小时前
【JavaEE19-后端部分】 MyBatis 入门第三篇:使用XML完成增删改查
xml·mybatis
小江的记录本18 小时前
【VO、DTO、Entity】VO、DTO、Entity三大核心数据对象全解析(附核心对比表 + 代码示例)
java·数据库·spring boot·spring·架构·mybatis·数据库架构
计算机学姐18 小时前
基于SpringBoot的流浪动物救助收养系统
vue.js·spring boot·后端·mysql·java-ee·intellij-idea·mybatis
计算机学姐20 小时前
基于SpringBoot的蛋糕烘焙销售服务系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis
zdl68620 小时前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
数据库·sql·mybatis
敲代码的嘎仔1 天前
Java后端面试——SSM框架面试题
java·面试·职场和发展·mybatis·ssm·springboot·八股
ruanyongjing1 天前
SpringBoot3 整合 Mybatis 完整版
mybatis
小江的记录本1 天前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
小江的记录本2 天前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis