Mybatis 数据库增删改查操作:
数据准备
项目结构
Department
1 |
package com.hph.mybatis.beans; |
Employee
1 |
package com.hph.mybatis.beans; |
EmployeeMapper
1 |
|
1 |
|
EmployeeMapper.xml
1 |
|
TestMybatisMapper
1 |
package com.hph.mybatis.test; |
结果
testHelloWorldMapper
addEmployee
添加数据
修改数据
删除数据
testParameter
tetSelect
无参数
有参数
主键生成方式、获取主键值
主键生成方式
支持主键自增,例如MySQL数据库
不支持主键自增,例如Oracle数据库
获取主键值
数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty设置到目标属性上。
1 |
<insert id="insertEmployee" |
参数传递
参数传递的方式
- 单个参数: 可以接受基本类型,对象类型。这种情况MyBatis可直接使用这个参数,不需要经过任 何处理。
- 多个参数: 任意多个参数,都会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,或者0,1…,值就是参数的值
- 命名参数: 为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名
- POJO: 当这些参数属于我们业务POJO时,直接传递POJO
- Map : 我们也可以封装多个参数为map,直接传递
- Collection/Array : 会被MyBatis封装成一个map传入, Collection对应的key是collection,Array对应的key是array. 如果确定是List集合,key还可以是list.
参数传递源码
1 |
public Object getNamedParams(Object[] args) { |
参数处理
参数位置支持的属性: javaType、jdbcType、mode、numericScale、resultMap、typeHandler、jdbcTypeName、expression
实际上通常被设置的是:可能为空的列名指定 jdbcType ,例如:
1 |
insert into orcl_employee(id,last_name,email,gender) values(employee_seq.nextval,#{lastName, ,jdbcType=NULL },#{email},#{gender})可以在全局配置文件指定为null 也可以像上面这面这样单独配置 |
参数获取方式
1 |
#{key}:可取普通类型、POJO类型、多个参数、集合类型 |
select查询的几种情况
查询单行数据返回单个对象
1 |
public Employee getEmployeeById(Integer id ); |
查询多行数据返回对象的集合
1 |
public List<Employee> getAllEmps(); |
查询单行数据返回Map集合
1 |
public Map<String,Object> getEmployeeByIdReturnMap(Integer id ); |
查询多行数据返回Map集合
1 |
("id") // 指定使用对象的哪个属性来充当map的key(对象的属性,而不是数据库的列) |
resultType自动映射
- autoMappingBehavior默认是PARTIAL,开启自动映射的功能。唯一的要求是列名和javaBean属性名一致
- 如果autoMappingBehavior设置为null则会取消自动映射
- 数据库字段命名规范,POJO属性符合驼峰命名法,如A_COLUMNaColumn,我们可以开启自动驼峰命名规则映射功能,mapUnderscoreToCamelCase=true
缺点:多表查询 完成不了