您的位置:首页 > 其它

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

2015-06-14 20:49 295 查看
上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入、修改、删除记录。

1.修改User.xml文件,增加几条sql语句:

<?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="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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: