SQL映射文件是什么?
SQL映射文件是在使用ORM(对象关系映射)框架时,用来定义数据库操作的配置文件。它通常是一个XML文件,其中包含了与数据库表、字段之间的映射关系,以及具体的SQL语句。通过SQL映射文件,我们可以将数据库的操作与具体的Java对象进行映射,简化了数据访问层(DAO)的开发工作。
SQL映射文件中主要包含以下信息:
- 数据库表与Java对象的映射关系:这些映射关系包括表名、列名和Java对象的属性名之间的对应关系。
- SQL语句:SQL映射文件中可以定义各种各样的SQL语句,例如增加、删除、修改、查询等,每个SQL语句都有一个唯一的ID来标识。
- 参数映射:SQL语句中可能会包含一些参数,通过参数映射可以将方法参数与SQL语句中的参数进行绑定。
- 结果映射:查询语句返回的结果可以是一个对象,也可以是一组对象,通过结果映射可以将查询结果映射到Java对象上。
ORM框架会根据SQL映射文件中的配置信息,自动生成相应的数据库操作代码,简化了程序开发过程,提高了开发效率。同时,SQL映射文件的存在也使得SQL语句与Java代码分离,提高了代码的可维护性和可读性。
SQL映射文件的几个顶级元素
- mapper – SQL映射文件的根元素,有一个namespace属性
- cache – 配置给定命名空间的缓存
- cache-ref – 从其他命名空间引用缓存配置
- resultMap – 用来描述数据库结果集和对象的对应关系
- sql – 可以重用的SQL块,也可以被其他语句引用
- insert – 映射插入语句
- update – 映射更新语句
- delete – 映射删除语句
- select – 映射查询语句
Mapper
Mapper
(映射器)是指在ORM(对象关系映射)框架中用于定义数据库操作的接口或类。它作为数据访问层(DAO)的一部分,负责实现与数据库之间的数据映射和交互。
在Java开发中,Mapper
通常是指MyBatis框架中的映射器接口。映射器接口定义了对数据库的各种操作方法,例如插入、更新、删除、查询等。通过编写映射器接口,我们可以将数据库表与Java对象进行映射,并且可以定义一系列的SQL语句来操作数据库。
MyBatis框架根据映射器接口的定义,自动创建相应的SQL语句,并将其与具体的数据库操作绑定起来。通过调用映射器接口的方法,我们可以方便地执行数据库操作,而无需手动编写繁琐的SQL语句。
除了MyBatis,在其他ORM框架中,也有类似的概念和用法。不同的框架可能有不同的实现方式,但基本思想都是为了简化数据库操作和提高开发效率。
<mapper namespace="cn.cvs.dao.sysUser.SysUserMapper">
<select id="getUserList" … >
……
</select>
</mapper>
SELECT
- select是MyBatis中最常用的元素之一
- select元素有很多属性,可以详细配置每一条查询语句
- id
- 命名空间中唯一的标识符
- 接口中的方法与映射文件中的SQL语句id一一对应
- parameterType
- 传入SQL语句的参数类型
- uresultType
- SQL语句返回值类型的完整类名或别名
- parameterType
- 使用复杂数据类型
- Java实体类
- Map
- 通过 #{属性名} 或者 #{map的keyName} 获取传入的值
- 使用多个简单数据类型
- int、String、Date等,一个参数传递单一数值
- 使用@Param注解为参数命名,通过 #{参数名} 获取传入的值
resultMap:数据库字段信息与对象属性不一致;复杂的联合查询
resultMap自动映射匹配前提:字段名column与属性名property一致
resultMap的自动映射级别(autoMappingBehavior)三个匹配级别:
PARTIAL(默认):自动匹配所有属性,内部嵌套除外
NONE:禁止自动匹配
FULL:自动匹配所有
<settings>
<setting name="autoMappingBehavior" value="NONE"/>
</settings>
实例:
<select id="selectSysUserById" resultType="com.mybatis.pojo.TSysUser" parameterType="integer" >
select * from t_sys_user
<where>
<if test="id!=null">
id=#{id}
</if>
</where>
</select>
select元素通过resultMap属性引用resultMap元素定义的映射规则:
resultMap元素包含以下属性:
- id:映射规则集的唯一标识,可以被select元素的resultMap属性引用。
- type:映射的结果类型,这里指定封装成SysUser实例。
resultMap元素包含以下子元素:
- id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。
- result:指定结果集字段和实体类属性的映射关系。
嵌套结果映射:
1、association元素
- association属性
- resultMap:外部引用 值为id值
- property:为你在这个类创建的类对象名称
- javaType:为完整java类名或者别名
子元素
- id:一般用于主键
- result元素属性
- property :属性名
column:数据库列名或者别名
<resultMap type="User" id="userRoleResult">
<result property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<association property="role" javaType="Role" resultMap="aaaa" />
</resultMap>
<resultMap type="Role" id="aaaa">
<result property="id" column="r_id"/>
<result property="roleCode" column="roleCode"/>
<result property="roleName" column="roleName"/>
</resultMap>
collection元素
1.collection属性
- resultMap:外部引用 值为id值
- property:为这个类内的集合名称
- ofType:完整的类名或别名,就是集合包含的类型
2.子元素
- id:一般用于主键
- result元素属性
- property :属性名
- column:数据库列名或者别名
<resultMap type="Provider" id="providerAndAllBillList">
<id property="id" column="p_id"/>
<collection property="billList" ofType="Bill" resultMap="billResult"/>
</resultMap>
<resultMap type="Bill" id="billResult">
<id property="id" column="id"/>
<result property="productName" column="productName"/>
</resultMap>