MyBatis之增删改查

119 阅读3分钟
  • 上一篇完成了MyBatis环境的搭建及第一个MyBatis程序的编写 第一个MyBatis程序 ,现在在此基础上,实现数据库的增删改查
  • 以下的操作,均只需要修改接口UserMapper及xml配置文件UserMapper.xml即可
  • 值得一提的是,如果idea连接了数据库,下面的mapper文件写SQL语句的时候有代码提示

一、SELECT,查操作

  • 接口加入一个查询方法,通过User的id查询
User getUserById(Integer id);
  • UserMapper.xml在命名空间为UserMappermapper下,添加一个select模块
<select id="getUserById" resultType="com.du.mybatis.pojo.User" parameterType="int">
    select id, `name`, address
    from user
    where id = #{id};
</select>
  • id 为对应方法名,resultType为返回的参数类型,parameterType为方法输入参数类型
  • 输入参数通过#{id}获得
  • 测试方法
  @Test
  public void getUserByIdTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      User userById = mapper.getUserById(2);
      System.out.println(userById);
    }
  }

二、INSERT,插入操作

  • 加入插入方法
int insertUser(User user);
  • 加入insert模块
<insert id="insertUser" parameterType="com.du.mybatis.pojo.User">
    insert into user(id, name, address)
    values (#{id}, #{name}, #{address});
</insert>
  • 测试方法
  @Test
  public void insertUserTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.insertUser(new User(10, "李白", "印度"));
      if (res > 0)
        System.out.println("插入成功");
      else
        System.out.println("插入失败");
      sqlSession.commit(); // 提交事务,必须!
    }
  }
  • 涉及到修改数据库的操作,必须提交事务!!

三、UPDATE,修改操作

  • 修改方法
int updateUser(User user);
  • 加入update模块
<update id="updateUser" parameterType="com.du.mybatis.pojo.User">
    update user
    set name=#{name},
        address = #{address}
    where id = #{id};
</update>
  • 测试代码
  @Test
  public void updateUserTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.updateUser(new User(3, "杜甫", "西藏"));
      if (res > 0)
        System.out.println("更新成功");
      else
        System.out.println("更新失败");
      sqlSession.commit();
    }
  }

四、DELETE,删除操作

  • 删除方法
int deleteUserByID(int id);
  • 加入delete模块
<delete id="deleteUserByID" parameterType="int">
    delete
    from user
    where id = #{id};
</delete>
  • 测试代码
  @Test
  public void deleteUserByIdTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.deleteUserByID(2);
      if (res > 0)
        System.out.println("删除成功");
      else
        System.out.println("删除失败");
      sqlSession.commit();
    }
  }

五、多参数输入,通过Map实现

  • 删除方法,输入参数为map
int deleteUserByNameAndAddress(Map<String, String> map);
  • 加入delete模块
<delete id="deleteUserByNameAndAddress" parameterType="map">
    delete
    from user
    where name = #{name}
      and address = #{address};
</delete>
  • parameterType 为 map类型(小写表示,这是一个别名)
  • 直接在#{}中取指就好
  • 测试代码
  @Test
  public void deleteUserByNameAndAddressTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      Map<String, String> map = new HashMap<String, String>();
      map.put("name", "李白");
      map.put("address", "印度");
      int res = mapper.deleteUserByNameAndAddress(map);
      if (res > 0)
        System.out.println("删除成功");
      else
        System.out.println("删除失败");
      sqlSession.commit();
    }
  }

六、完整代码

public interface UserMapper {
  /**
   * 查询所有User
   *
   * @return
   */
  List<User> getUserList();

  /**
   * 通过ID查询User
   *
   * @return
   */
  User getUserById(Integer id);

  /**
   * 插入一个User
   *
   * @param user
   * @return 等于0 表示失败; >0 表示成功
   */
  int insertUser(User user);

  /**
   * 通过ID删除User
   *
   * @param id
   * @return
   */
  int deleteUserByID(int id);

  /**
   * 根据ID更新用户
   *
   * @param user
   * @return
   */
  int updateUser(User user);

  /**
   * 根据name和address删除元素
   * @param map
   * @return
   */
  int deleteUserByNameAndAddress(Map<String, String> map);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--修改成对应的接口-->
<mapper namespace="com.du.mybatis.dao.UserMapper">
    <!--    id为接口中的方法名-->
    <!--  resultType 为查询的bean,记得是全路径!  -->
    <select id="getUserList" resultType="com.du.mybatis.pojo.User">
        select id, `name`, address
        from user;
    </select>
    <select id="getUserById" resultType="com.du.mybatis.pojo.User" parameterType="int">
        select id, `name`, address
        from user
        where id = #{id};
    </select>
    <insert id="insertUser" parameterType="com.du.mybatis.pojo.User">
        insert into user(id, name, address)
        values (#{id}, #{name}, #{address});
    </insert>
    <delete id="deleteUserByID" parameterType="int">
        delete
        from user
        where id = #{id};
    </delete>
    <update id="updateUser" parameterType="com.du.mybatis.pojo.User">
        update user
        set name=#{name},
            address = #{address}
        where id = #{id};
    </update>
    <delete id="deleteUserByNameAndAddress" parameterType="map">
        delete
        from user
        where name = #{name}
          and address = #{address};
    </delete>
</mapper>
public class UserMapperTest {
  @Test
  public void getUserListTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      List<User> userList = mapper.getUserList();
      for (User user : userList) {
        System.out.println(user);
      }
    }
  }

  @Test
  public void getUserByIdTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      User userById = mapper.getUserById(2);
      System.out.println(userById);
    }
  }

  @Test
  public void insertUserTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.insertUser(new User(10, "李白", "印度"));
      if (res > 0)
        System.out.println("插入成功");
      else
        System.out.println("插入失败");
      sqlSession.commit(); // 提交事务,必须!
    }
  }

  @Test
  public void deleteUserByIdTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.deleteUserByID(2);
      if (res > 0)
        System.out.println("删除成功");
      else
        System.out.println("删除失败");
      sqlSession.commit();
    }
  }

  @Test
  public void updateUserTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      int res = mapper.updateUser(new User(3, "杜甫", "西藏"));
      if (res > 0)
        System.out.println("更新成功");
      else
        System.out.println("更新失败");
      sqlSession.commit();
    }
  }

  @Test
  public void deleteUserByNameAndAddressTest() {
    try (SqlSession sqlSession = Utils.getSqlSession()) {
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      Map<String, String> map = new HashMap<String, String>();
      map.put("name", "李白");
      map.put("address", "印度");
      int res = mapper.deleteUserByNameAndAddress(map);
      if (res > 0)
        System.out.println("删除成功");
      else
        System.out.println("删除失败");
      sqlSession.commit();
    }
  }
}