MyBatis(二):基础CRUD

MyBatis中的基本CRUD

接上一篇博客:https://www.cnblogs.com/renzhongpei/p/12559788.html

修改图中的类

Mapper接口

package com.rzp.dao;

import com.rzp.pojo.User;

import java.util.List;

public interface UserMapper {
   List<User> getUserList();

   //根据ID查询用户
   User getUserById (int id);

   //insert 一个用户
   void addUser(User user);

   //update 一个用户
   void updateUser(User user);

   //delete 一个用户
   void deleteUser(int id);
}

 

Mapper.xml

<?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.rzp.dao.UserMapper">
   <select id="getUserList" resultType="com.rzp.pojo.User">
   select * from mybatis.user
   </select>
   
   <!--id是对应的方法名字,parameterType是输入参数的类型-->
   <select id="getUserById" resultType="com.rzp.pojo.User" parameterType="int">
   <!-- #{id}是实体类的属性,只要属性名字一样就能完成-->
   select * from mybatis.user t where t.id = #{id}
   </select>

   <insert id="addUser" parameterType="com.rzp.pojo.User" >
       insert into mybatis.user (id,name,pwd) value (#{id},#{name},#{pwd});
   </insert>

   <update id="updateUser" parameterType="com.rzp.pojo.User">
       update mybatis.user set name = #{name}, pwd = #{pwd} where  id = #{id};
   </update>

   <delete id="deleteUser"  parameterType="int">
       delete from mybatis.user where id = #{id};
   </delete>


</mapper>

测试程序UserDaoTest

按方法测试即可

    
   //按ID查询
   @Test
   public void getUserById(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = mapper.getUserById(1);
           System.out.println(user);
      }catch (Exception e){
           e.printStackTrace();
      }finally {
           sqlSession.close();
      }
  }

   //增删改需要提交事务
   //增加
   @Test
   public void addUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = new User(6,"rzp3","312");
           mapper.addUser(user);
           int x = 1/0;

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }
  }
   
   //更新
   @Test
   public void updateUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = new User(3,"cys","31112");
           mapper.updateUser(user);

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }

  }
   
   //删除
   @Test
   public void deleteUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           mapper.deleteUser(5);

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }

  }
 

注意:Mapper.xml配置错误(比如类名、方法名写错了)也会导致sqlSession生成的时候就报错!这个时候IDEA提示的错误会链接向sqlSession生成那一行。

使用Map来简化传参的操作

  • 数据库字段多的时候,如果只是修改其中一个两个字段,但是如果用上文的UPDATE,就要new一个实体类,操作比较麻烦。这时候可以使用map。

UserMapper接口

    //万能的map
   void addUser2(Map<String,Object> map);

UserMapper.xml

    <insert id="addUser2" parameterType="map" >
       <!--传入参数是map,用#{}取参数的时候就是按照map的key值来获取-->
       insert into mybatis.user (id,name,pwd) value (#{userid},#{username},#{password});
   </insert>

测试类

    //更新
   @Test
   public void updateUser2(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try{
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           Map map = new HashMap();
           map.put("userid",5);
           map.put("username","cyy2");
           map.put("password","3212");
           mapper.addUser2(map);
           sqlSession.commit();
      }catch (Exception e){

      }finally {
           sqlSession.close();
      }
  }
  • 这里虽然使用insert作为例子,而且传了所有参数,但是显然改成update并且只传ID和要修改的参数也是可以的。

  • 同理,也可以用在select中,传多个参数查询

Mybatis中的Like查询

  • 模糊查询的两种写法

  1. 在执行的时候传递通配符

    User user = mapper.getUserById("%1%");
  1. 在xml文件中使用通配符

    select * from mybatis.user t where t.id like "%"#{id}"%"

 

猜你喜欢

转载自www.cnblogs.com/renzhongpei/p/12571404.html