mybatis允许增删改直接定义以下类型返回值
Integer、Long、Boolean、void
sqlSessionFactory.openSession()
; 获取的session需要手动提交代码
sqlSessionFactory.openSession(true)
;会自动提交
public void test() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = new Employee(null, "jerry4",null, "1");
mapper.addEmp(employee);
openSession.commit();
}finally{
openSession.close();
}
}
<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout="20">
useGeneratedKeys
(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys
方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false
。
(useGeneratedKeys="true keyProperty=“id”)
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
insert>
对于不支持自动生成类型的数据库或可能不支持自动生成主键的 JDBC 驱动,MyBatis 有另外一种方法来生成主键
<insert id="addEmp" databaseId="oracle">
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
select EMPLOYEES_SEQ.nextval from dual
selectKey>
insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
values(#{id},#{lastName},#{email})
insert>
可以接受基本类型,对象类型,集合类型的值。这种情况 MyBatis可直接使用这个参数,不需要经过任何处理
#{参数名/任意名}:取出参数值。
任意多个参数,都会被MyBatis重新包装成一个Map传入。 Map的key是param1,param2,0,1…,值就是参数的值。
为参数使用@Param
起一个名字,MyBatis就会将这些参数封 装进map中,key就是我们自己指定的名字
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo;
#{属性名}
:取出传入的pojo的属性值
如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
#{key}
:取出map中对应的值
如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO
(Transfer Object)数据传输对象
Page{
int index;
int size;
}
public Employee getEmp(@Param("id")Integer id,String lastName);
取值:id==>#{id/param1} lastName==>#{param2}
public Employee getEmp(Integer id,@Param("e")Employee emp);
取值:id==>#{param1} lastName===>#{param2.lastName/e.lastName}
会特殊处理,也是把传入的list或者数组封装在map中。
key
:Collection(collection),如果是List还可以使用这个key(list
);数组(array
)
public Employee getEmpById(List<Integer> ids);
//取值:取出第一个id的值: #{list[0]}