wangzhenhui1991 / Notes

3 stars 0 forks source link

ORM MyBatis:映射 #19

Open wangzhenhui1991 opened 7 years ago

wangzhenhui1991 commented 7 years ago

Mapper XML 文件

MyBatis 的真正强大在于它的映射语句,如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。 SQL 映射文件的几个顶级元素(按照它们应该被定义的顺序):

  1. 这个语句被称作 selectPerson,
  2. 接受一个 int(或 Integer)类型的参数,
  3. 并返回一个 HashMap 类型的对象,其中的key是列名,value是结果行中的对应值。
  4. #{id} 是告诉 MyBatis 创建一个预处理语句参数,类似JDBC的
    // Similar JDBC code, NOT MyBatis…
    String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
    PreparedStatement ps = conn.prepareStatement(selectPerson);
    ps.setInt(1,id);

    Select 深入探究

    select 元素有很多属性允许你配置,来决定每条语句的作用细节。如:

    id="selectPerson"
    parameterType="int"
    parameterMap="deprecated"
    resultType="hashmap"
    resultMap="personResultMap"
    flushCache="false"
    useCache="true"
    timeout="10000"
    fetchSize="256"
    statementType="PREPARED"
    resultSetType="FORWARD_ONLY">

    具体的含义:

更新语句:Insert,Update和Delete

insert,update和delete简单示例

下面就是 insert,update 和 delete 语句的示例:

<insert id="insertAuthor">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>
<update id="updateAuthor">
  update Author set
    username = #{username},
    password = #{password},
    email = #{email},
    bio = #{bio}
  where id = #{id}
</update>
<delete id="deleteAuthor">
  delete from Author where id = #{id}
</delete>

insert,update和delete深入探究

属性 描述

<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio})

### insert循环遍历插入多行
如果你的数据库还支持多行插入, 你也可以传入一个Authors数组或集合,并返回自动生成的主键。

<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username, password, email, bio) values

(#{item.username}, #{item.password}, #{item.email}, #{item.bio})

## sql
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被**静态地(在加载参数) 参数化**. 不同的属性值通过包含的实例变化. 比如:
`<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>`
这个 SQL 片段可以被包含在其他语句中,例如:
属性值可以用于包含的refid属性或者包含的字句里面的属性值,例如:
${prefix}Table from
## 参数Parameter

简单示例:
insert into users (id, username, password) values (#{id}, #{username}, #{password})

> 参数有两种设置方式,一种是#{字段名}和${字段名},前者会是推荐的用法,#{}会检测是否合法,而${}则不会修改字段中的内容(如?),容易导致sql注入的问题,所以更推荐 #{}.

## 结果集resultMap

## 参考
[MyBatis映射文件](http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps)