MyBatis——增删改查(CRUD)

准备工作:创建在com.jiang.pojo中创建实体类

package com.jiang.pojo;

import lombok.Data;


//实体类

@Data
public class User {
    private int id;
    private String name;
    private String pwd;


}

1、namespace

namespace中的包名要和 Dao/mapper 接口的包名一致!

2、select

选择,查询语句;

  • id : 就是对应的namespace中的方法名;
  • resultType:Sql语句执行的返回值!
  • parameterType : 参数类型!
  1. 编写UserMapper接口

    //根据ID查询用户
    User getUserById(int id);
    
  2. 编写对应的UserMapper中的sql语句

    <select id="getUserById" parameterType="int" resultType="com.jiang.pojo.User">
            select * from mybatis.user where id = #{id}
    </select>
    
    
  3. 测试

        @Test
        public void getUserById() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            User user = mapper.getUserById(1);
            System.out.println(user);
    
            sqlSession.close();
        }
    
    

3、Insert

  1. 编写UserMapper接口

    //insert一个用户
        int addUser(User user);
    
  2. 编写对应的UserMapper中的sql语句

     <insert id="addUser" parameterType="com.jiang.pojo.User">
            insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
        </insert>
    
  3. 测试

    package com.jiang.dao;
    
    import com.jiang.pojo.User;
    import com.jiang.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserDaoTest {
    
        @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            int i = mapper.addUser(new User(5, "姜嘉航","465123"));
            if (i>0){
                System.out.println("插入成功");
            }
            //提交事务
            sqlSession.commit();
            sqlSession.close();
        }
    
    
    }
    
    

4、update

  1. 编写UserMapper接口

       //修改用户
        int updateUser(User user);
    
  2. 编写对应的UserMapper中的sql语句

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

    package com.jiang.dao;
    
    import com.jiang.pojo.User;
    import com.jiang.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserDaoTest {
    
        @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            int i = mapper.updateUser(new User(5, "哈哈","1265123"));
            if (i>0){
                System.out.println("更新成功");
            }
            //提交事务
            sqlSession.commit();
            sqlSession.close();
        }
    
    
    }
    
    

5、Delete

  1. 编写UserMapper接口

        //删除一个用户
        int deleteUser(int id);
    
  2. 编写对应的UserMapper中的sql语句

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

    package com.jiang.dao;
    
    import com.jiang.pojo.User;
    import com.jiang.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserDaoTest {
    
        @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            mapper.deleteUser(5);
            System.out.println("删除成功");
            sqlSession.commit();
            sqlSession.close();
        }
    
    
    }
    
    

注意点:

  • 增删改需要提交事务!( sqlSession.commit();)

6、万能Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

  1. 编写接口
    //万能的Map
    int addUser2(Map<String,Object> map);

  1. 编写mapper.xml
    <!--对象中的属性,可以直接取出来    传递map的key-->
    <insert id="addUser" parameterType="map">
        insert into mybatis.user (id, pwd) values (#{userid},#{passWord});
    </insert>
  1. 测试
    @Test
    public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);


        Map<String, Object> map = new HashMap<String, Object>();

        map.put("userid",5);
        map.put("passWord","2222333");

        mapper.addUser2(map);

        sqlSession.close();
    }

Map传递参数,直接在sql中取出key即可! 【parameterType="map"】

对象传递参数,直接在sql中取对象的属性即可!【parameterType="Object"】

只有一个基本类型参数的情况下,可以直接在sql中取到!

多个参数用Map,或者注解!

7、模糊查询

  1. Java代码执行的时候,传递通配符 % %

    1. 编写接口
    List<User> userList = mapper.getUserLike("%李%");
    

    2.编写mapper.xml

     <select id="getUserLike" resultType="com.kuang.pojo.User">
            select * from mybatis.user where name like "%"#{value}"%"
        </select>
    

    3.测试

    public class UserDaoTest {
    
        @Test
        public void getUserLike(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
            List<User> userList = mapper.getUserLike("%李%");
    
            for (User user : userList) {
                System.out.println(user);
            }
    
            sqlSession.close();
        }
    
  2. 在sql拼接中使用通配符!

    select * from mybatis.user where name like "%"#{value}"%"
    
原文地址:https://www.cnblogs.com/godles/p/12333896.html