上篇文章中我们使用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

MyBatis数据持久化(三)增删改查的更多相关文章

  1. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  2. MySQL数据分析(16)— 数据操作之增删改查

    前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...

  3. MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型

    一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...

  4. AngularJS中使用$http对MongoLab数据表进行增删改查

    本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...

  5. Mysql数据表的增删改查

    ---恢复内容开始--- Mysql数据表的增删改查 1.创建表   语法:CREATE TABLE 表名(字段1,字段2,字段3.......) CREATE TABLE `users` ( `us ...

  6. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)

    jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...

  7. C# - VS2019 通过DataGridView实现对Oracle数据表的增删改查

    前言 通过VS2019建立WinFrm应用程序,搭建桌面程序后,通过封装数据库操作OracleHelper类和业务逻辑操作OracleSQL类,进而通过DataGridView实现对Oracle数据表 ...

  8. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  9. Mybatis框架二:增删改查

    这里是搭建框架和准备数据: http://www.cnblogs.com/xuyiqing/p/8600888.html 实现增删改查功能: 测试类: package junit; import ja ...

  10. MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.D ...

随机推荐

  1. UICollectionView的注册

    UICollectionView的dataSource中的item的注册 itme的注册和tableview中cell的创建是不同的 cell的创建是在cell中 而itme的注册是在viewDidL ...

  2. python之--初始面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  3. POJ 1471 模拟?

    题意:求最大无坏点三角形 思路: 模拟? (为什么我模拟过了...) 有人用 DP,有人用 搜索... // by SiriusRen #include <cstdio> #include ...

  4. hadoop配置历史服务器

    此文档不建议当教程,仅供参考 配置历史服务器 我是在hadoop1机器上配置的 配置mapred-site.xml <property> <name>mapreduce.job ...

  5. LVS(Linux Viretual Server) 负载均衡器 + 后端服务器

    ##定义: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. ##结构: 一般来说,LVS集群采用三层结构,其主要组成部分为: A.负载调 ...

  6. 多帧图片转gif

    示例 工具photosh cc2017 1: 文件--> 脚本--> 将文件载入堆栈--> 选择文件-->勾选窗口的时间轴-->底部 从图层建立帧--> 设置时间延 ...

  7. soapUI检查webServices接口的方法以及对自动触发线程的查询

    这几天需要熟悉接口传输过来的数据,因此会用到soapUI,但是没结果这个工具,然后百度了下,结合了下,下面是我对webservice在soapUI的展现: 1:其实说白了,就是我们不知道从接口里传输过 ...

  8. hdu 1754 I Hate It【线段树】

    维护一个最大值 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  9. 第十二章 Python网络编程

    socket编程 socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket ...

  10. jenkins 展示报告

    1.下载插件 HTML Publisher plugin 2.设置说明 3.展示css 下载插件 (1).Startup Trigger: 可实现在Jenkins节点(master/slave)启动时 ...