前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >可以被用来定义可重用的 SQL 代码段用法

可以被用来定义可重用的 SQL 代码段用法

原创
作者头像
用户8983410
修改2021-10-08 14:55:20
6590
修改2021-10-08 14:55:20
举报

可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。比如:

代码语言:javascript
复制
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

<select id="selectUsers" resultType="map">
  select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
  from some_table t1
    inner join some_table t2
</select>

参数(Parameters)

  这不是一个顶级元素,但很重要。   默认情况下,使用#{}格式的语法会导致 MyBatis 创建预处理语句属性并安全地设置值(比如?)。这样做更安全,更迅速,通常也是首选做法。 比如:

代码语言:javascript
复制
<insert id="insertUser" parameterType="User">
  insert into users (id, username, password)
  values (#{id}, #{username}, #{password})
</insert>

  如果 User 类型的参数对象传递到了语句中,id、username 和 password 属性将会被查找,然后将它们的值传入预处理语句的参数中。你也可以

代码语言:javascript
复制
#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}

  但其实你只需要简单指定属性名,其他的事情 MyBatis 会自己去推断,最多你需要为可能为空的列名指定 jdbcType。

代码语言:javascript
复制
#{firstName}
#{middleInitial,jdbcType=VARCHAR}

字符串替换   不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:

代码语言:javascript
复制
ORDER BY ${columnName}

  这里 MyBatis 不会修改或转义字符串。   **注意:这种方式是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验(即将输入中的特殊字符转义处理,比如"&"→ "&", "<"→"<"," "→"  "。

Result Maps

  resultMap 元素是 MyBatis 中最重要最强大的元素。它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西。 ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句只需要描述它们的关系。   当应用程序使用 JavaBeans 或 POJOs(Plain Old Java Objects,普通 Java 对象)来作为领域模型,大部分可以省略 resultMap,MyBatis 会在幕后自动创建一个 ResultMap,基于属性名来映射列到 JavaBean 的属性上。   要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径。

代码语言:javascript
复制
<!-- In mybatis-config.xml file -->
<typeAlias type="com.someapp.model.User" alias="User"/>

<!-- In SQL Mapping XML file -->
<select id="selectUsers" resultType="User">
  select id, username, hashedPassword
  from some_table
  where id = #{id}
</select>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参数(Parameters)
  • Result Maps
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档