跳到主要内容

03、MyBatis - CRUD的操作实现

在MyBatis(二)的学习中我们已经实现了第一个MyBatis程序,现在我们要实现增删改查的完整操作,我们应该思考我们需要去修改哪些内容呢?

修改三个内容:Mapper接口、对应Mapper接口的xml配置文件、测试类。

一、查询

我们尝试一个根据id查询一个用户的信息。

1、 修改UserMapper接口;

在其中添加我们对应的方法:

package com.jms.dao;

import java.util.List;

import com.jms.pojo.User;

public interface UserMapper {//根据id获取User信息
    User getUserbyid(int id);
}

2、 修改UerMapper.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">
<!-- 命名空间namespace对应Mapper接口 -->
<mapper namespace="com.jms.dao.UserMapper">
  <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User">
      select * from mybaties.user where id=#{id}
  </select>
</mapper>

我们这里在对上面几个名称进行回顾:

1、namespace:命名空间,对应的是Mapper接口的全限定命名。

2、id:对应的时Mapper接口中的方法名。

3、parameterType:对应方法中传入的参数类型。

4、resultType:对应的是SQL语句的返回值类型。

3、 junit测试;

@Test
public void Select() {
    //利用工具类获取SqlSession
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.getUserbyid(10000);
    System.out.println(user);
    sqlSession.close();
}    

测试结果:

 

二、增加

1、 修改UserMapper接口;

添加对应的方法:

package com.jms.dao;

import java.util.List;

import com.jms.pojo.User;

public interface UserMapper {
    
    //增加用户信息
    int addUser(User user);
}

2、 修改UerMapper.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">
<!-- 命名空间namespace对应Mapper接口 -->
<mapper namespace="com.jms.dao.UserMapper">
  <!-- id对应接口中的方法 -->
  <insert id="addUser" parameterType="com.jms.pojo.User">
      insert mybaties.user value(#{id},#{username},#{password})
  </insert>
</mapper>

其中的#{id}、#{username}、#{password}都是对应着User的私有属性id、usename、password。

3、 junit测试;

@Test
    public void Insert() {
        //利用工具类获取SqlSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.addUser(new User(10006,"jms6","123456"));
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

上述代码第8行的提交事务是必须的,否则无法将内容插入的数据库中。

测试结果:

 

我们可以看到数据成功插入。

三、修改

1、 修改UserMapper接口;

package com.jms.dao;

import java.util.List;

import com.jms.pojo.User;

public interface UserMapper {
    
    //修改用户信息
    int UpdateUser(User user);
}

2、 修改UerMapper.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">
<!-- 命名空间namespace对应Mapper接口 -->
<mapper namespace="com.jms.dao.UserMapper">
  <!-- id对应接口中的方法 -->
  <update id="UpdateUser" parameterType="com.jms.pojo.User">
      update mybaties.user set username=#{username},password=#{password} where id=#{id}
  </update>
</mapper>

3、 junit测试;

@Test
    public void Update() {
        //利用工具类获取SqlSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.UpdateUser(new User(10006, "jms7", "456123"));
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

测试结果:

 

四、删除

1、 修改UserMapper接口;

package com.jms.dao;

import java.util.List;

import com.jms.pojo.User;

public interface UserMapper {
    //删除用户
    int DeleteUser(int id);
}

2、 修改UserMapper.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">
<!-- 命名空间namespace对应Mapper接口 -->
<mapper namespace="com.jms.dao.UserMapper">
  <!-- id对应接口中的方法 -->
  <delete id="DeleteUser" parameterType="int">
      delete from mybaties.user where id=#{id}
  </delete>
</mapper>

3、 junit测试;

@Test
    public void Delete() {
        //利用工具类获取SqlSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.DeleteUser(10006);
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

测试结果:

 

五、总结

1、 注意Mapper.xml文件中各个名称的含义;

2、 注意增删改操作需要SqlSession.commit()进行提交事务;