zoukankan      html  css  js  c++  java
  • Mybatis:CRUD操作

    提示:

    Mapper配置文件的命名空间为对应接口包名+接口名字,这个经常会忘记和搞错的!!


    select标签

    在接口中编写三个查询方法

    //获取全部用户
    List<User> selectUser();

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

    //根据一个对象查询
    User getUserByUser(User user);

    标签信息

        <select id="" parameterType="" resultType="" resultMap="">
    --         sql语句 (#{name}--这个格式能获取方法参数与sql语句整合)
        </select>

    id:对应接口对应方法名字

    parameterType:为参数类型

    resultType:查询结果返回类型

    resultMap:手动映射查询结果(之后随笔会介绍)

    UserMapper.xml中select语句:

    <select id="selectUser" resultType="com.ttt.pojo.User" >
        select * from mybatis.user
    </select>
    
    <select id="getUserByID" parameterType="int" resultType="com.ttt.pojo.User">
        select * from mybatis.user where id=#{id}
    </select>
    
    <select id="getUserByUser" parameterType="com.ttt.pojo.User" resultType="com.ttt.pojo.User">
        select * from mybatis.user where name=#{name}
    </select>

    1、若返回结果为一个集合,那么返回类型就填返回集合里对象类型。

    2、在接口方法的参数前加 @Param属性 ,Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

    例如:

    //通过密码和名字查询用户
    User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
    /*
        <select id="selectUserByNP" resultType="com.ttt.pojo.User">
          select * from user where name = #{username} and pwd = #{pwd}
        </select>
    */

    测试语句:

    @Test
        public void test01(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            List<User> users1 = userMapper.selectUser();
            User user2 = userMapper.getUserByID(1);
            User user3 = userMapper.getUserByUser(new User(1, "黑子", "123456"));
    
            System.out.println("selectUser方法结果:");
            for (User user : users1) {
                System.out.println(user);
            }
    
            System.out.println("getUserByID方法结果:");
            System.out.println(user2);
    
            System.out.println("getUserByUser方法结果:");
            System.out.println(user3);
    
            sqlSession.close();
        }
    test

     insert标签:

    1、在接口添加方法

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

    2、UserMapper.xml中insert语句

    <insert id="addUser" parameterType="com.ttt.pojo.User">
          insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd})
    </insert>

    3、测试

       @Test
        public void test04(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
            userMapper.addUser(new User(4,"demo", "1234" ));
            sqlSession.commit();
    
            sqlSession.close();
        }
    test

     update标签

    1、接口添加方法

    //修改用户
    int updateUser(User user);

    2、UserMapper.xml中update语句

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

    注:update语句没有返回标签

    3、测试

    @Test
    public void test05(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
        userMapper.updateUser(new User(4, "绿员君", "123456"));
        sqlSession.commit();
    
        sqlSession.close();
    }
    test

      delete标签

    1、接口中添加方法

    //删除一个用户
    int deleteUser(int id);

    2、UserMapper.xml中delete语句

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

    3、测试

    @Test
    public void test06(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    
        userMapper.deleteUser(4);
        sqlSession.commit();
    
        sqlSession.close();
    }
    test

     传参技巧--万能map

    1. 在接口方法中,参数直接传递Map  
      1. User selectUserByNP2(Map<String,Object> map);
    1. 编写sql语句的时候,需要传递参数类型,参数类型为map

      1. <select id="selectUserByNP2" parameterType="map" resultType="com.ttt.pojo.User">
            select * from user where name = #{username} and pwd = #{pwd}
        </select>    
    2. 在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!

      Map<String, Object> map = new HashMap<String, Object>();
      map.put("username","小明");
      map.put("pwd","123456");
      User user = mapper.selectUserByNP2(map);

      如果参数太多,我们可以使用map实现,而参数太少了,就直接传递参数即可。


     小结:

    • 所有的增删改操作都需要提交事务!
    • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
    • 有时候根据业务的需求,可以考虑使用map传递参数!
    • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!
  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/zitai/p/11812924.html
Copyright © 2011-2022 走看看