首页 > 代码库 > MyBatis学习-映射文件标签篇

MyBatis学习-映射文件标签篇

MyBatis 真正的核心在映射文件中。比直接使用 JDBC 节省95%的代码。而且将 SQL 语句独立在 Java 代码之外,可以进行更为细致的 SQL 优化。

 

一、 映射文件的顶级元素

  • resultMap:最复杂,最有力量的元素,用来描述如何从数据库结果集中加载你的对象
  • sql:可以重用的 sql 代码块
  • insert映射插入语句
  • update:映射更新语句
  • delete:映射删除语句
  • select:映射查询语句
  • cache:配置给定命名空间的缓存
  • cache-ref:从其他命名空间引用缓存配置

 

二、select 标签的属性信息

<select
  id="selectUser"
  parapeterType="int"
  resultType="hashmap"
  resultMap="USER_RESULT_MAP"
  flushCache="false"
  useCache="true"
  timeout="10000"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWORD_ONLY"
></select>

 

  • id:在当前命名空间中的唯一标识符
  • paramerType:将会传入这条 sql 语句的参数类的完全限定名或别名
  • resultType:从这条 sql 语句中返回的期望类型的类的完全限定名或别名。
  • resultMap:设置返回集合中的元素的完全限定名或别名
  • flushCache:将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认为false
  • useCache:设置为true,将会导致本条语句的结果被缓存。默认为true。
  • timeout:设置驱动程序等待数据库返回请求结果,并抛出异常事件的最大等待值。默认不设置
  • fetchSize:暗示驱动程序每次批量返回的结果行数。默认不设置
  • statementType:STATEMENT、PREPARED或CALLABLE的一种,这会让MyBatis使用选择Statement、PreparedStatement或
  • CallableStatement。默认值:PREPARED
  • resultSetType:设置游标FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认不设置

 

三、insert 标签的属性信息

<insert
    id="insertProject"
    paramterType="projectInfo"
    useGeneratedKeys="true"
    keyProperty="projectId"
>
  • useGeneratedKeys:设置为 true,并将 keyProperty 属性设为数据库主键对应的实体对象属性名称
  • keyProperty:与上面的配置相配合,用于获取数据库自动生成的主键

 

四、重用 sql 标签

<sql id="userColumns">id,username,password</sql>

这个 SQL 片段可以被包含在其他语句中,eg:

<select id="selectProjectList" paramertType="int" resultType="hashmap">
  SELECT 
      <include refid="userColumns"/>
  FROM 
      t_project_002_project_info
</select>

 

五、完全限定名使用别名替代

在 mybatis 配置文件中,使用如下配置

<typeAliases>
    <typeAlias type="com.enh.bean.ProjectInfo" alias="projectInfo"/>
</typeAliases>

那么在 Mapper 中,可以直接使用 projectInfo,即表示 com.enh.bean.ProjectInfo

 

六、命名空间

每个sql映射文件的要元素中,都需要指定一个名称空间,用以确保每个映射语句的id属性不会重复。如

<mapper namespace="com.enh.mapper.PersonMapper">

在Java代码中引用某个 sql 映射时,使用的亦是含有名称空间的全路径。如

session.update("com.enh.mapper.PersonMapper.udpateUser", user);  

 

MyBatis学习-映射文件标签篇