Mybatis-实现数据库的增删改查CRUD

136 阅读2分钟

增删改查CRUD

一、 Mybatis实现CRUD的步骤

  1. 修改实现类接口
  2. 修改实现类的xml配置文件
  3. 修改Test文件进行测试

二、具体的CRUD例子

  1. select:找出id=1的用户 实现类接口:
User getUserById(int id);

实现类的xml配置文件

<select id="getUserById" resultType="com.wu.pojo.User" parameterType="int">
        select *
        from mybatis.user
        where id = #{id};
</select>

Test文件

    @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();
    }
  1. insert 增加一个用户 实现类接口
int insertUser(User user);

实现类的xml配置文件

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

Test文件

    @Test
    public void insertUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

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

        User user = new User(4,"小花","987654");
        mapper.insertUser(user);

        sqlSession.commit();

        sqlSession.close();
    }
  1. delete 删除id=4的用户 实现类接口
int deleteUser(int id);

实现类的xml配置文件

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

Test文件

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

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

        mapper.deleteUser(4);

        sqlSession.commit();

        sqlSession.close();
    }
  1. update 将id=2的用户名字改为小龙 实现类接口
int updateUser(User user);

实现类的xml配置文件

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

Test文件

    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser(new User(2,"小龙","123321"));

        sqlSession.commit();
        sqlSession.close();
    }

三、Map的使用

  1. 为什么要使用Map? ---> 因为如果在数据库中的表,字段或者参数过多的情况下,我们在实现类的xml配置文件中所书写的sql语句就会过于的冗长,用Map可以很好解决这个问题。
  2. 为了更好的对比学习,我这里用Map重写了updateUser2方法,数据库实现将id=2的用户名字改为小蓝
    1. 实现类接口
    int updateUser2(Map<String,Object>map);
    
    1. 实现类的xml配置文件
    <update id="updateUser2" parameterType="map">
        update mybatis.user
        set name=#{name}
        where id = #{id}
    </update>
    
    1. Test文件
        @Test
    public void updateUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
    
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
        Map map = new HashMap();
        map.put("id",2);
        map.put("name","小蓝");
    
        mapper.updateUser2(map);
    
        sqlSession.commit();
        sqlSession.close();
    }
    
  3. Map比较的万能,特别是针对于实体类和数据库属性特别多的情况。

四、模糊查询

怎么查找数据库中,名字带有“小”的人的全部信息?

  1. 实现类接口
List<User> selectUser2(String value);
  1. 实现类的xml配置文件
    <select id="selectUser2" parameterType="String" resultType="com.wu.pojo.User" >
        select * from mybatis.user where name like #{value}
    </select>
  1. Test文件
    @Test
    public void selectUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

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

        List<User> users = mapper.selectUser2("%小%");

        for (User user : users) {
            System.out.println(user);
        }



        sqlSession.close();
    }

注意事项:

两种方法:

  1. 在Java代码执行的时候,传递通配符% % --->常用,比较安全
List<User> users = mapper.selectUser2("%小%");
  1. 在sql拼接中使用通配符 ---> 会发生SQL注入,数据库的信息不安全,容易泄露
select * from mybatis.user where name like "#"#{value}"#"

五、注意事项

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

对象传递参数,直接在sql中取出对象的属性即可! 【parameter=“Object”】

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

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