MyBatis框架
第4章 MyBatis 映射文件
4.1 Mybatis映射文件简介
- MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。
- SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
cache – 给定命名空间的缓存配置。
cache-ref – 其他命名空间缓存配置的引用。
resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加 载对象。
parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能 在将来被移除,这里不会记录。
sql – 可被其他语句引用的可重用语句块。
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语
4.2 Mybatis使用insert|update|delete|select完成CRUD
4.2.1 select
- Mapper接口方法
public Employee getEmployeeById(Integer id ); |
- Mapper映射文件
<select id="getEmployeeById" resultType="com.atguigu.mybatis.beans.Employee" databaseId="mysql"> select * from tbl_employee where id = ${_parameter} </select> |
4.2.2 insert
- Mapper接口方法
public Integer insertEmployee(Employee employee); |
- Mapper映射文件
<insert id="insertEmployee" parameterType="com.atguigu.mybatis.beans.Employee" databaseId="mysql"> insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender}) </insert> |
4.2.3 update
- Mapper接口方法
public Boolean updateEmployee(Employee employee); |
- Mapper映射文件
<update id="updateEmployee" > update tbl_employee set last_name = #{lastName}, email = #{email}, gender = #{gender} where id = #{id} </update> |
4.2.4 delete
- Mapper接口方法
public void deleteEmployeeById(Integer id ); |
- Mapper映射文件
<delete id="deleteEmployeeById" > delete from tbl_employee where id = #{id} </delete> |
4.3 主键生成方式、获取主键值
4.3.1 主键生成方式
- 支持主键自增,例如MySQL数据库
- 不支持主键自增,例如Oracle数据库
4.3.2 获取主键值
- 若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上。
<insert id="insertEmployee" parameterType="com.atguigu.mybatis.beans.Employee" databaseId="mysql" useGeneratedKeys="true" keyProperty="id"> insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender}) </insert> |
4.4 参数传递
4.4.1 参数传递的方式
- 单个参数
可以接受基本类型,对象类型。这种情况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.