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 代码进行对比,你会立即发现省掉 ...
随机推荐
- 【NOI2019模拟】搬砖
[NOI2019模拟]搬砖 Description 小火车很穷,只好去搬砖了. 小火车被工头要求搭建\(n\)座塔,第i个高度为\(H_i\),也就是由\(H_i\)块砖头组成.每次小火车可以携带至多 ...
- Linux之权限详解
如何知道你有什么权限 我能干什么?这是我最关心的问题! 切换到普通用户 [root@luffy-01 ~]# su - pizza [pizza@luffy-01 ~]$ ls /root ls: c ...
- JavaScript对象数组根据某属性sort升降序排序
1.自定义一个比较器,其参数为待排序的属性. 2.将带参数的比较器传入sort(). var data = [ {name: "Bruce", age: 23, id: 16 ...
- C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式
可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...
- html 传递参数中文乱码 js获取参数乱码
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code HTML传递中文参数时,有乱码导致接收不到正确的数据.JS中可以使用encodeURI ...
- 007_Python中的__init__,__call__,__new__
__init__函数 当一个类实例被创建时, __init__() 方法会自动执行,在类实例创建完毕后执行,类似构建函数.__init__() 可以被当成构建函数,不过不象其它语言中的构建函数,它并不 ...
- oracle RAC 查询告警日志位置
[grid@db2 db2]$ adrci ADRCI: Release 12.2.0.1.0 - Production on Mon Feb 25 15:51:14 2019 Copyright ( ...
- mongo中游标
1.手动循环访问游标 mongo中我们常用的查询方式db.collection.find()方法其实返回的就是游标,只不过我们并未给返回的游标分配变量,我们所看到的的查询数据也就是游标自动迭代得出的( ...
- UITableView的编辑操作
继续上篇UITableView和UITableViewController, 打开BNRItemsViewController.m,在类扩展中添加如下属性: @property (nonatomic, ...
- 开源工具 DotnetRSA 快速生成和转换RSA秘钥
一.简介 DotnetRSA 是一个利用 .NET Core 2.1 开发的 .NET Global Tool,是可以想npm全局安装一样,安装在你的系统中,只需敲一行命令便可以快速生成RSA加密算法 ...