原创

MyBatis你需要知道的事

#{}和${} 的区别

  • {}解析传递进来的参数数据
  • ${}对传递进来的参数原样拼接在SQL中
  • #{}是预编译处理,${}是字符串替换。
  • 使用#{}可以有效的防止SQL注入,提高系统安全性

    当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

    第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致
    如下我们将 order_id重命名为id 了,这样在返回的实体中就可以接收到这样的参数了。
    file

第2种: 通过<resultMap>标签来映射字段名和实体类属性名的一一对应的关系
我们建立的这种关系就可以使得完美对应上。
file
此外,如果不想用实体进行接收数据库返回的参数,那我们可以使得resultType为map类型接收(java.util.HashMap),具体使用哪种类型由自己业务决定,
写法看下面

<!--执行自定义的sql语句 -->
  <select id="ourMethod" parameterType="String" resultType="java.util.LinkedHashMap">
    <![CDATA[
            SELECT *  FROM (${value}) obj
          ]]>
  </select>

如何获取自动生成的(主)键值?

参考:https://www.haohaowang.top/articles/113
需求:
user对象插入到数据库后,新记录的主键要通过user对象返回,通过user获取主键值。
解决思路:

通过LAST_INSERT_ID()获取刚插入记录的自增主键值,在insert语句执行后,执行select LAST_INSERT_ID()就可以获取自增主键。
mysql:
file

oracle:
实现思路:
先查询序列得到主键,将主键设置到user对象中,将user对象插入数据库。
file

在mapper中如何传递多个参数?

第一种:使用占位符的思想

在映射文件中使用#{0},#{1}代表传递进来的第几个参数
使用@param注解:来命名参数

#{0},#{1}方式
file
@param注解方式
file
第二种:使用Map集合作为参数来装载
file
file

Mybatis动态sql是做什么的?都有哪些动态sql?动态sql的执行原理?

Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。
Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。
其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能

下面是一些来自官网例子:
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html

正文到此结束(点击广告是对作者最大的支持)