mybatis的insert语句
来源:互联网 发布:怎么禁止软件启动 编辑:程序博客网 时间:2024/05/21 17:56
这里使用的Mapper接口的方式来处理
接口:
public interface EmpMapper { public void addEmp(Emp emp);}
对应的mapper文件,注意这里的parameterType本来是要写完全限定名,但是由于做了别名,所以可以直接写emp
<insert id="addEmp" parameterType="emp" > insert into emp(empno,last_name,salary) values (#{empno},#{lastName},#{salary}) </insert>
test部分:
(由于是单独使用mybatis,没有使用spring,所以需要这样来创建工厂和session,如果调用openSession时参数为true,就会自动提交,不需要自己commit)
public class MybatisTest {SqlSessionFactory sqlSessionFactory;SqlSession sqlSession;@Beforepublic void before() throws IOException{String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);sqlSession = sqlSessionFactory.openSession();} @Testpublic void testAddEmp(){ EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp(1,"Ash",1000);mapper.addEmp(emp);sqlSession.commit(); }}
如果面对主键一开始不知道的情况,怎么插入新纪录的同时又能获取到主键的值呢?
主键获取情况:
1.主键自增
2.主键为UUID
主键自增的情况:
接口:
public void addEmp(Emp emp);
mapper文件
useGeneratedKeys="true",是说明主键是自动生成的,默认为false。
keyProperty="empno",是说先生成主键,赋值给emp类中的empno属性,然后执行语句
<insert id="addEmp" parameterType="emp" useGeneratedKeys="true" keyProperty="empno"> insert into emp(empno,last_name,salary)values (#{empno},#{lastName},#{salary})</insert>所以在调用的时候就不需要先给emp的empno赋值(而且也不能赋值,因为是自动生成的,赋值就会破坏规则)
test:
@Testpublic void testAddEmp(){ EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp("Ash",1000);mapper.addEmp(emp);sqlSession.commit(); }
主键为UUID的情况:
接口:
public void addEmp(Emp emp);
mapper文件:
由于主键不是自动递增,需要指定,所以使用selectKey
keyProperty="id",是指将获取到的值赋值给person类的id属性。
resultType="string",是指id属性的类型,由于mybatis中已经声明了基本属性的别名,所以String和string是一样的。
order="BEFORE",是指在执行insert语句之前执行selectKey中的语句,而mysql中获取UUID并去掉"-"的方法如下所示
<insert id="addPerson" parameterType="person"> <selectKey keyProperty="id" resultType="string" order="BEFORE"> SELECT REPLACE(UUID(),'-','') </selectKey> insert person values(#{id},#{name}) </insert>
test:
@Testpublic void testAddPerson(){ PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);Person person = new Person("Ash");mapper.addPerson(person);sqlSession.commit(); }
另外还有一点需要注意:
Integer Long Boolean都可以作为insert, delete, update的返回值
阅读全文
0 0
- mybatis的insert语句
- mybatis insert新增语句
- Mybatis 动态insert语句
- myBatis+oracle11g insert语句报错17023 不支持的特性
- 使用mybatis在oracle进行批量插入的insert语句
- insert语句 foreach 、虚表的使用 mybatis
- MyBatis的INSERT操作
- mybatis insert 插入语句返回主键
- mybatis insert语句中自增长
- mybatis insert语句返回主键值
- Insert语句的语法
- INSERT语句的速度
- INSERT语句的速度
- 使用mybatis的insert语句插入数据的时候,获取插入数据的主键id
- mybatis的insert语句获取自增id的方法(mySQL)
- mybatis通过SCOPE_IDENTITY()获取insert语句的自增主键时(sqlserver)
- mybatis--resultMap的insert使用
- mybatis 获取insert的id
- G
- Ubuntu解压缩zip,tar,tar.gz,tar.bz2
- 2018网易校招试题
- Cannot change version of project facet Dynamic Web Module to 2.4
- BZOJ1598 K短路 Astar裸题
- mybatis的insert语句
- 模板库(数论相关)
- 线程问题<3>
- pytorch 在ubuntu16.04 下安装
- [CDOJ1252]-24点-模拟/搜索
- 转义字符问题
- H
- Scala中的数组
- 20171109每日一练