浅入浅出MyBatis(06):更新数据

2015-01-14

该文章是《专题:浅入浅出MyBatis》系列文章的一篇。点击进入该专题目录

工具与环境:Intellij IDEA 14,JDK 1.7,MyBatis 3.2,MySQL 5.5。

浅入浅出MyBatis(01):查询id为1的用户的信息的基础上,我们看一下该如何实现。

假设现在需要将某个用户的密码修改为“abc”。

修改letian.mybatis.dao下的UserMapper.java

将其内容修改为:

package letian.mybatis.dao;

import letian.mybatis.bean.User;

public interface UserMapper {

    User findById(int id);
    void updateUserPassword(User user);

}

这里,新添加了updateUserPassword方法用来修改用户的密码。

修改letian.mybatis.mapper下的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">

<mapper namespace="letian.mybatis.dao.UserMapper">

    <select id="findById" parameterType="Integer" resultType="letian.mybatis.bean.User">
        select
        * from blog_db.user where id=#{id}
    </select>

    <update id="updateUserPassword" parameterType="letian.mybatis.bean.User">
        UPDATE blog_db.user
        SET password=#{password}
        WHERE id=#{id}
    </update>

</mapper>

<update id="updateUserPassword">对应的内容用来修改用户密码啊。

不得不提一句,最开始时候我把<update id="updateUserPassword">写成了<select id="updateUserPassword">,这是不合要求的。如果经常写错,干脆将<select></select><update></update>等全部改为<statement></statement>吧。

修改Main.java

将其内容修改为:

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import letian.mybatis.bean.User;
import letian.mybatis.dao.UserMapper;


public class Main {

    public static void main(String[] args) throws IOException {

        SqlSessionFactory sessionFactory;
        sessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsReader("mybatis-config.xml"));

        SqlSession sqlSession = sessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = userMapper.findById(1);
        System.out.println(user);

        user.setPassword("abc");
        userMapper.updateUserPassword(user);
        sqlSession.commit();

//        user = userMapper.findById(1);
//        System.out.println(user);

        User user2 = userMapper.findById(1);
        System.out.println(user2);

        sqlSession.close();

    }
}

执行Main.java,结果如下:

User{id=1, name='letian', email='letian@111.com', password='123'}
User{id=1, name='letian', email='letian@111.com', password='abc'}

在mysql中查询一下:

mysql> select * from user where id=1;
+----+--------+----------------+----------+
| id | name   | email          | password |
+----+--------+----------------+----------+
|  1 | letian | letian@111.com | abc      |
+----+--------+----------------+----------+
1 row in set (0.00 sec)

well done!