mybatis之增删改
前面三小节内容主要是针对查询操作进行讲解,现在对mybatis增删改进行演示。
由于每次建立工程比较复杂,可以参考第一节:mybatis入门来搭建一个简单的工程,然后来测试本节内容。
1、增
1、新增mapper接口方法,增加一个保存Person对象的方法savePerson。
public interface PersonMapper
{
Boolean savePerson(Person person);
}
2、修改mapper映射文件,添加如下内容:
<insert id="savePerson">
insert into person(first_name,last_name,age,email,address) VALUES(#{firstName},#{lastName},#{age},#{email},#{address})
</insert>
3、测试
public static void main(String[] args)
throws IOException
{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
Person person = new Person();
person.setFirstName("tom");
person.setAge(10);
Boolean isSucceed = mapper.savePerson(person);
sqlSession.commit();
System.out.println(isSucceed);
System.out.println(person);
sqlSession.close();
}
4、结果:
true
Person{id=null, firstName='tom', lastName='null', age=10, email='null', address='null'}
注意:
- 首先需要执行sqlSession.commit()保证在插入数据时提交事务,另一种方式是在获取SqlSession实例的时候可以加上参数表示自动提交,就不需要手动commit。
SqlSession sqlSession = sqlSessionFactory.openSession(true);
- 其次打印的person实例的时候,在数据库已经生成了主键id,但是在此打印中却没有获取到,这个就关联到主键如何获取的问题。
5、主键获取
mysql支持自增主键,自增主键值的获取,mybatis是利用statement.getGenreatedKeys();在mapper映射文件进行如下配置即可。
useGeneratedKeys="true":使用自增主键获取主键值策略
keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
下面修改mapper映射文件,新增:useGeneratedKeys="true" keyProperty="id",表示使用自增主键获取主键值策略,并且将主键值赋予javaBean的id字段。
<insert id="savePerson" useGeneratedKeys="true" keyProperty="id">
insert into person(first_name,last_name,age,email,address) VALUES(#{firstName},#{lastName},#{age},#{email},#{address})
</insert>
测试结果如下,可以看出id已经有数值。
true
Person{id=19, firstName='tom', lastName='null', age=10, email='null', address='null'}
2、删
1、新增mapper接口方法deletePerson:
public interface PersonMapper
{
Boolean deletePerson(Integer id);
}
2、编写对应的mapper映射文件
<delete id="deletePerson">
delete from person where id = #{id}
</delete>
由于删除操作十分简单,就不过多演示测试过程。
3、改
1、新增mapper接口方法updatePerson:
public interface PersonMapper
{
Boolean updatePerson(Person person);
}
2、编写对应的mapper映射文件
<update id="updatePerson">
update person set first_name = #{firstName} where id = #{id}
</update>
注意:上面的sql语句主要是根据person的id来更新该实例的其它属性,为了演示方便,目前只更新一个firtName字段。
3、测试
public static void main(String[] args)
throws IOException
{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
//首先查询一条数据
Person person = mapper.getPerson(2);
System.out.println(person);
person.setFirstName("tom");
//更新查询的数据的字段
Boolean isSucceed = mapper.updatePerson(person);
sqlSession.commit();
System.out.println(isSucceed);
System.out.println(person);
sqlSession.close();
}
结果如下,可以看出数据已经被更改。
Person{id=2, firstName='King', lastName='Jean', age=36, email='Jean@163.com', address='beijing'}
true
Person{id=2, firstName='tom', lastName='Jean', age=36, email='Jean@163.com', address='beijing'}
4、总结
1、增删改可以在接口方法中定义返回值:Integer、Long、Boolean、void;
2、其次使用sqlSessionFactory.openSession()获取SqlSession需要自动提交。当然如果SqlSession获取使用sqlSessionFactory.openSession(true),则是自动提交,不必手动提交。
3、新增数据可以获取主键,通过useGeneratedKeys="true" keyProperty="id"
4、SQL映射文件有多少标签?
cache –命名空间的二级缓存配置
cache-ref –其他命名空间缓存配置的引用。
resultMap–自定义结果集映射
parameterMap–已废弃!老式风格的参数映射sql –抽取可重用语句块。
insert –映射插入语句
update –映射更新语句
delete –映射删除语句
select –映射查询语句
mybatis之增删改的更多相关文章
- 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作
一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...
- MyBatis的增删改查。
数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...
- MyBatis批量增删改查操作
前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查
使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...
- 从0开始完成SpringBoot+Mybatis实现增删改查
1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...
- Spring Boot入门系列(六)如何整合Mybatis实现增删改查
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- Mybatis实例增删改查(二)
创建实体类: package com.test.mybatis.bean; public class Employee { private Integer id; private String las ...
- mybatis的增删改查返回值小析(六)
本文验证了通过mybatis访问数据库时的,增删改查的返回值情况. 直接看代码. 1.service层 /** *@Author: Administrator on 2020/3/12 15:15 * ...
随机推荐
- mysql FROM_UNIXTIME 时间不准确
mysql 使用 FROM_UNIXTIME 函数计算出来的时间少了6个小时或者8个小时 解决办法: 添加 default-time_zone = '+8:00' 这个再配置文件中 vi /etc/m ...
- 使用雪花算法为分布式下全局ID、订单号等简单解决方案考虑到时钟回拨
1.snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同 ...
- 记录一次kibana启动Unable to fetch data from reporting collector
版本不匹配导致 应该es与kibana版本一致 本文链接:https://blog.csdn.net/qq_33293753/article/details/87894882
- 从现在开始强迫自己使用 Reflect
静态方法 Reflect.apply(target, thisArg, args) 等同于 Function.prototype.apply.call(func, thisArg, args) Ref ...
- 十一、结构模式之享元(Flyweight)模式
什么是享元模式 享元模式是对象的结构模式,是运用共享技术来有效的支持大量细粒度的对象.享元对象能做到共享的关键是区分内蕴状态和外蕴状态.一个内蕴状态是存储在享元对象内部,并且是不会随环境改变而有所不同 ...
- python 环境变量的配置
1. 打开python安装目录 2.将python.exe重名为python3.exe 3.在环境变量的path中,添加python3的目录 4.将pip.exe的目录页添加到path中,即可完成环境 ...
- MySQL数据类型DECIMAL用法详解
MySQL DECIMAL数据类型用于在数据库中存储精确的数值.我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据. 要定义数据类型为DECIMAL的列,请使用以下语法: ...
- Halo(一)
@EnableJpaAuditing 审计功能(启动类配置) 在实际的业务系统中,往往需要记录表数据的创建时间.创建人.修改时间.修改人. 每次手动记录这些信息比较繁琐,SpringDataJpa 的 ...
- Python--模块之re
re模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...
- vue2.0 组件的生命周期
vue官方文档中给出的vue生命周期的流程图 如下: 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执行. <!DOCTYPE html ...