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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章