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都写上!
  • 相关阅读:
    CSS 中 Position relative 和 absolute区别
    感受到LDT的好处
    Map数据结构
    break和continue
    vue的ref属性
    css小样式
    搭建vue开发环境
    setTimeout和clearTimeout
    垂直居中
    vertical-align 属性
  • 原文地址:https://www.cnblogs.com/zitai/p/11812924.html
Copyright © 2011-2022 走看看