MyBatis映射文件1(增删改、insert获取自增主键值)
增删改
Mybatis为我们提供了<insert>、<update>、<delete>标签来对应增删改操作
在接口中写增删改的抽象方法
- void addEmp(Employee e);
 - void updateEmp(Employee e);
 - void deleteEmp(Employee e);
 
在映射文件中写sql语句
- <insert id="addEmp" parameterType="com.figsprite.bean.Employee">
 - insert into tb_employee(last_name,email,gender)
 - values(#{lastName},#{email},#{gender})
 - </insert>
 - <update id="updateEmp" parameterType="com.figsprite.bean.Employee">
 - update tb_empolyee
 - set last_name=#{lastName},email=#{email},gender=#{genser}
 - where id=#{id}
 - </update>
 - <delete id="deleteEmp" parameterType="com.figsprite.bean.Employee">
 - delete from tb_employee where id=#{id}
 - </delete>
 
顾名思义,parameterType就是参数类型,而我们通过#{字段名}的方式来传递对象中的属性,resultType允许使用String、Boolean等基本类型包作为返回值
测试
- @Test
 - public void test3() throws IOException{
 - SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
 - SqlSession openSession = sqlSessionFactory.openSession();
 - Employee e = new Employee();
 - e.setGender("1");
 - e.setLastName("Hello");
 - e.setEmail("qwewqeqw");
 - e.toString();
 - try {
 - EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
 - mapper.addEmp(e);
 - openSession.commit();
 - }finally {
 - openSession.close();
 - }
 - }
 
- @Test
 - public void test4() throws IOException{
 - SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
 - SqlSession openSession = sqlSessionFactory.openSession();
 - Employee e = new Employee();
 - e.setId(1);
 - e.setGender("0");
 - e.setEmail("qwq");
 - e.setLastName("Jerry");
 - try {
 - EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
 - mapper.updateEmp(e);
 - openSession.commit();
 - }finally {
 - openSession.close();
 - }
 - }
 
这里我们要自动提交数据,我们也可以选择SqlSession openSession = sqlSessionFactory.openSession(true); 这样就不用手动提交了。
- @Test
 - public void test5 ()throws IOException{
 - SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
 - SqlSession openSession = sqlSessionFactory.openSession();
 - Employee e = new Employee();
 - e.setId(1);
 - try{
 - EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
 - mapper.deleteEmp(e);
 - openSession.commit();
 - }finally {
 - openSession.close();
 - }
 - }
 
insert获取自增主键值
我们在上面的例子中可以看到,我们插入时候并没有指定id,因为我们id是通过自增方式,JDBC里面提供了这样的方法
ResultSet getGeneratedKeys()
MyBatis也支持,当然它的底层,其实就是这个函数,我们仅需在<insert>标签里添加属性即可
useGeneratedKeys="true"
使用自增主键获取主键值策略,接着用keyProperty这个属性,指定对应主键属性,也就是Mybatis获取到逐渐使以后将它赋给JavaBean的对应属性
- <insert id="addEmp" parameterType="com.figsprite.bean.Employee"
 - useGeneratedKeys="true" keyProperty="id">
 
让我们做个测试
@Test
public void test3() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
Employee e = new Employee();
e.setGender("1");
e.setLastName("Hello");
e.setEmail("qwewqeqw");
e.toString();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
mapper.addEmp(e);
openSession.commit();
System.out.println(e.getId());
}finally {
openSession.close();
}
}
如果我们没有写useGenerateKeys和KeyProperty,那么上述代码打印出来的将会是null
MyBatis映射文件1(增删改、insert获取自增主键值)的更多相关文章
- DAO以及获取自动生成主键值
		
package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...
 - mybatis oracle insert 返回新增的主键值
		
<insert id="insertVmsTemplatePlayItem" parameterType="VmsTemplatePlayItem"> ...
 - Mybatis --- 映射文件、参数处理、参数值的获取、select元素
		
映射文件:指导着MyBatis如何进行数据库增删改查, 有着非常重要的意义: - cache 命名空间的二级缓存配置 - cache-ref 其他命名空间缓存配置的引用. - result ...
 - Spring中获取数据库表主键序列
		
在程序开发中,我们经常有写数据库表的操作,数据表中经常带有主键自增序列,如何获取自增序列.spring中提供了相应的类 DataFieldMaxValueIncrementer. DataFieldM ...
 - Python3+SQLAlchemy不使用字段名获取主键值教程
		
一.说明 1.1 环境说明 user model如下,且其现有一个实例user_inst: class User(Base): __tablename__ = 'users' username = C ...
 - MyBatis映射文件2(不支持自增的数据库解决方案/参数处理[单参、多参、命名参数])
		
针对Oracle不支持自增的解决方案 Oracle不支持自增,但是它使用序列来模拟自增,每次插入数据的主键是从序列中拿到的值,那么如何获取这个值呢? <insert id="addEm ...
 - SSM实战——秒杀系统之DAO层实体定义、接口设计、mybatis映射文件编写、整合Spring与Mybatis
		
一:DAO实体编码 1:首先,在src目录下,新建org.myseckill.entity包,用于存放实体类: 2:实体类设计 根据前面创建的数据库表以及映射关系,创建实体类. 表一:秒杀商品表 对应 ...
 - MyBatis映射文件 相关操作
		
一.MyBatis映射文件 1.简介 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行 ...
 - MyBatis 映射文件
		
Mybatis映射文件简介 1) MyBatis 的真正强大在于它的映射语句.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉 ...
 
随机推荐
- 为什么二流程序员都喜欢黑php?
			
为什么二流程序员都喜欢黑php? 为什么程序员都喜欢黑php?这个嘛!你骂一句php是垃圾试试,保准php程序员不揍扁你!这就好像自己的母校,纵然有很多不好的地方,但是只允许自己调侃,不允许外人骂半句 ...
 - 强化学习(一)—— 基本概念及马尔科夫决策过程(MDP)
			
1.策略与环境模型 强化学习是继监督学习和无监督学习之后的第三种机器学习方法.强化学习的整个过程如下图所示: 具体的过程可以分解为三个步骤: 1)根据当前的状态 $s_t$ 选择要执行的动作 $ a_ ...
 - 【vue】vue-router的用法
			
依赖安装:(c)npm install vue-router 过程: import Vue from 'vue'; import Router from 'vue-router'; Vue.use(R ...
 - copy from insert using 语句迁移数据
			
使用copy实现long类型转移表空间,表空间的数据文件损坏,在转移该表空间相关表时,遇到让人郁闷的long类型.不能使用ctas和move来实现转移,最后通过古老的copy来实现该项工作. 1.模拟 ...
 - Python-网络爬虫模块-requests模块之响应-response
			
当requests发送请求成功后,requests就会得到返回值,如果服务器响应正常,就会接收到响应数据: Response响应中的属性和方法 常用属性: status_code: 数据类型:int ...
 - OmniPlan 3 Pro密钥
			
密钥用户名都是youliyuan.OmniPlan 3:HOMJ-QOJH-OIBN-TNIH-HWUN-TEEH-WUNNKWO-HVKB-JAZE-UIHH-XAVY-BEEX-AVYBCRW-M ...
 - mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别
			
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from tab ...
 - c++中vector类的用法
			
概括:向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能够存放任意类型的动态 ...
 - /dev/mem可没那么简单
			
这几天研究了下/dev/mem.发现功能非常奇妙,通过mmap能够将物理地址映射到用户空间的虚拟地址上.在用户空间完毕对设备寄存器的操作,于是上网搜了一些/dev/mem的资料. 网上的说法也非常统一 ...
 - 深入理解跨域SSO(单点登录)原理与技术
			
一:SSO体系结构 SSO  SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...