MyBatis数据持久化(三)增删改查

来源:互联网 发布:手机游戏作弊软件 编辑:程序博客网 时间:2024/05/16 14:51

上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入、修改、删除记录。
1.修改User.xml文件,增加几条sql语句:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="User">    <select id="queryUserInfoByName" parameterType="string"  resultType="com.mybatis.domain.User">        select * from User where username = #{username}    </select>    <insert id="saveUser" parameterType="com.mybatis.domain.User">        insert into user(username,password,phone) values(#{username},#{password},#{phone});    </insert>    <update id="updateUser" parameterType="com.mybatis.domain.User">        update user set password=#{password} where username=#{username}    </update>    <delete id="deleteUser" parameterType="com.mybatis.domain.User">        delete from user where username = #{username}    </delete></mapper>

2.新建测试类com.mybatis.exam3.MyBatisCRUD

package com.mybatis.exam3;import java.io.IOException;import java.io.Reader;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 org.junit.After;import org.junit.Before;import org.junit.Test;import com.mybatis.domain.User;public class MyBatisCRUD{    private Reader reader = null;    private SqlSessionFactory sessionFactory  = null;    private SqlSession session = null;    @Before    public void before()    {        try {            reader = Resources.getResourceAsReader("SqlMapConfig.xml");            sessionFactory = new SqlSessionFactoryBuilder().build(reader);            //创建一个数据库会话             session = sessionFactory.openSession();          } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    @Test    public void testMybatisSelect()    {                       User user = (User)session.selectOne("User.queryUserInfoByName","小王");                       //此处会调用user的toString方法            System.out.println(user);       }    @Test    public void testMybatisInsert()    {               User user = new User();            user.setPassword("aaaa");            user.setPhone("18909568934");            user.setUsername("Jane");            session.insert("User.saveUser", user);            //mybatis事物默认不自动提交            session.commit();       }    @Test    public void testMybatisUpdate()    {               User user = new User();            user.setPassword("bbbbb");            user.setPhone("18909568934");            user.setUsername("Jane");            session.update("User.updateUser",user);            //mybatis事物默认不自动提交            session.commit();       }    @Test    public void testMybatisDelete()    {               User user = new User();            user.setPassword("bbbbb");            user.setPhone("18909568934");            user.setUsername("Jane");            session.delete("User.deleteUser", user);            //mybatis事物默认不自动提交            session.commit();    }    @After    public void after()    {        if(null != session)        {            session.close();        }    }}

笔者对上节的代码进行了重构,把建立数据库会话的代码放到了before方法中,该方法是经过@Before注解修饰过的,会在执行每个测试方法之前自动执行。

1.testMybatisSelect为数据查询测试方法,和上节相同。

2.testMybatisInsert为数据插入测试方法,我们新建了一条插入sql语句:

<insert id="saveUser" parameterType="com.mybatis.domain.User">        insert into user(username,password,phone) values(#{username},#{password},#{phone});</insert>

parameterType属性指定参数类型为User,因此session.insert方法的第二个参数必须为User类的对象,我们通过下面代码新建一个User对象,并为其属性赋值:

User user = new User();user.setPassword("aaaa");user.setPhone("18909568934");user.setUsername("Jane");

这些属性的值会自动同步到#{username},#{password},#{phone}占位符中。需要注意的是,通过sessionFactory.openSession()方法获取数据库会话,mybatis事务默认不自动提交,在对数据库做更新操作后要手动调用session.commit()提交事务。如果需要事务自动提交,我们需要调用openSession方法的重载形式,指定一个boolean类型变量作为参数:

//事务自动提交sessionFactory.openSession(true);

3.testMybatisUpdate和testMybatisDelete分别为数据更新和删除操作测试方法,和数据插入类似,也比较简单,读者可以参考上面的代码,这里不做介绍了。

项目源码:https://github.com/rongbo-j/mybatis-blog

0 0