Mybatis学习笔记三:实现增删查改

在上一章中,使用接口的方式实现了数据的查询。在本章中,主要说明如何使用Mybatis对数据进行增删查改。


1、修改接口


在接口中添加以下方法:
public interface UserMapper {

    public User selectUserByID(int id);

    public List<User> viewByUsername(String username);

    public void addUser(User user);

    public void updateUser(User user);

    public void deleteUser(int id);
}

在这里,我们设置了一共五个方法,分别为:
1、根据ID查找用户;
2、根据用户名查找用户;
3、添加用户;
4、更新用户信息;
5、删除用户;

2、修改配置文件


根据前两章中所了解到的内容,即不用编写接口的实现类,只要在xml文件中配置即可。
修改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">
<mapper namespace="com.dfz.mybatis.mapper.UserMapper">

    <resultMap id="resultListUser" type="User">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="address" property="address"/>
    </resultMap>

    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from user where id = #{id}
    </select>

    <select id="viewByUsername" parameterType="string" resultMap="resultListUser">
        SELECT * FROM USER WHERE username like #{username}
    </select>

    <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into user(username, password, address) values (#{username}, #{password}, #{address})
    </insert>

    <update id="updateUser" parameterType="User">
        update user set username=#{username}, password=#{password}, address=#{address} where id=#{id}
    </update>

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

</mapper>
其中,resultMap是用于返回List<User>的;
同时注意到viewByUsername的返回类型不再是resultType="",而是resultMap=""
如果使用mysql等支持主键自增的数据库时,可以在添加方法上设置useGeneratedKeys="true"来指定某一个字段自增。
修改测试代码:
private SqlSessionFactory sqlSessionFactory;
    private Reader reader;

    @Before
    public void before() {
        try {
            //读取mybatis参数
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            //建立session factory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test() {
        //打开session
        System.out.println("------------查询方法测试开始------------");
        SqlSession session = sqlSessionFactory.openSession();
        //使用接口方式调用查找方法
        List<User> users = session.getMapper(UserMapper.class).viewByUsername("zhang");
        System.out.println(users);
        session.close();
        System.out.println("------------插入方法测试开始------------");
        session = sqlSessionFactory.openSession();
        User u1 = new User();
        u1.setUsername("li");
        u1.setPassword("password2");
        u1.setAddress("Beijing");
        session.getMapper(UserMapper.class).addUser(u1);
        session.commit();
        System.out.println(u1);
        System.out.println(session.getMapper(UserMapper.class).viewByUsername("li"));
        session.close();
        System.out.println("------------修改方法测试开始------------");
        session = sqlSessionFactory.openSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        User u2 = mapper.viewByUsername("li").get(0);
        u2.setUsername("changedname");
        mapper.updateUser(u2);
        session.commit();
        System.out.println(mapper.viewByUsername("changedname"));
        session.close();
        System.out.println("------------删除方法测试开始------------");
        session = sqlSessionFactory.openSession();
        mapper = session.getMapper(UserMapper.class);
        mapper.deleteUser(u1.getId());
        System.out.println(mapper.viewByUsername("changedname"));
        session.commit();
        session.close();
    }
值得一提的是,使用mybatis进行增加、修改和删除数据的过程中,如果不调用session.commit()方法,则数据变更只会在内存中进行。
测试结果如下:

3、总结


1)resultType用于返回单一类型的数据,resultMap用于返回集合类型的数据,resultMap中的数据类型需要在xml文件中进行定义;
2)对于使用自增主键的数据库,可以在添加方法中定义useGeneratedKeys="true"来指定某一个字段自增;
3)使用Mybatis进行增加、删除或更新数据时,需要调用session.commit()方法,如不调用,则只在内存中进行数据更新,不会影响数据库。
未尽之处后期再补,代码下载地址:https://github.com/EdwardEricZhang/MybatisFun


没有更多推荐了,返回首页