MyBatis数据持久化(三)增删改查
2015-06-14 20:49
295 查看
上篇文章中我们使用mybatis成功建立数据库会话,并从表中查询出相应的数据,本文在此基础上介绍MyBatis另外几种操作,即插入、修改、删除记录。
1.修改User.xml文件,增加几条sql语句:
2.新建测试类
笔者对上节的代码进行了重构,把建立数据库会话的代码放到了before方法中,该方法是经过
1.testMybatisSelect为数据查询测试方法,和上节相同。
2.testMybatisInsert为数据插入测试方法,我们新建了一条插入sql语句:
parameterType属性指定参数类型为User,因此
这些属性的值会自动同步到
3.testMybatisUpdate和testMybatisDelete分别为数据更新和删除操作测试方法,和数据插入类似,也比较简单,读者可以参考上面的代码,这里不做介绍了。
项目源码:https://github.com/rongbo-j/mybatis-blog
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
相关文章推荐
- MyBatis数据持久化(三)增删改查
- PL/SQL 与oralce10g的连接问题
- MyBatis数据持久化(三)增删改查
- 将CRUD封装到一个工具类中
- Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'
- css布局之图片被拉伸问题
- win32 绘图
- 适配器模式
- bat显示多行文字,逐个显示哦!不同的颜色!
- CSS小知识---回到顶部
- CallContext和多线程
- Hibernate对象状态
- 数据库存储过程小结
- C++ String类的简单实现与思考
- hdu Bone Collector(背包)
- VB外接API函数
- java代码实现文件上传到linux服务器及问题汇总及解决
- Android 系统稳定性 - Watchdog
- 关于kmp算法问题
- Sublime Text2注册码