Mybatis增删查改基础

  1. 查询

    <select id="selectPerson" parameterType="int" resultType="hashmap">
      SELECT * FROM PERSON WHERE ID = #{id}
    </select>
    

    id: 表示命名空间中唯一标识符,可以被用来引用这条语句

    parameterType:传入这条语句的参数的类型,这个属性是可选的,mybatis可以根据TypeHandler推断出具体传入语句的参数,默认值为unset

    resultType:返回值类型的完全限定名或别名,如果是集合的情形,则应该是集合属性的类型,而不是集合本身

  2. 增删改

    增删改基本同查询,需要注意的是,增删改没有resultType属性,不能指定返回值类型,但可以使用整形(int long)或布尔型(bool)来判断受影响的行数。

​ useGeneratedKeys:(仅对insert 与 update 有用)这会使Mybatis 使用JDBC 调用getGeneratedKeys 方法来取出数据库内部生成的主键(比如:像mysql,sql server这种数据库的自增字段,Oracle没有自增字段),默认值为false

​ keyProperty:(仅对 insert 和 update 有用)唯一标记一个属性,mybatis会通过getGeneratedKeys方法的返回值或insert语句的字标签selectKey (Oracle没有自增字段,它使用selectKey 这种方式)设置它的键值 ,默认值为unset,如果希望得到多个生成的列,可以指定逗号分隔的列表

  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
  </selectKey>

order=“BEFORE”:表示这条语句在insert 语句之前执行

  1. 参数处理
  • 单个参数mybatis不会做特殊处理,直接用#{任意名称} 即可取到值

  • 多个参数mybatis 会做处理,将所有参数封装成一个Map,默认key 分别为param1…param2…,取值时使用#{param1 或 索引下标}

  • 多个参数的情况可以使用@Param 注解指定封装成Map时的key

  • 多个参数都是数据模型对应属性的情况,可以直接传入POJO,取值时使用#{POJO 对应属性名}

  • 多个参数没有对应POJO 的情况,则可以使用传入Map,取值时使用#{Map 对应的key}

  • 多个参数没有对应POJO 的情况还可以构造一个TO(Transfer Object),然后直接传入即可

  • public Employee getEmp(@Param(“id”) Integer id, String lastName);

取值:id ==> #{id/param1} lastName ==> #{param2}

  • public Employee getEmp(Integer id, @Param(“e”) Employee emp);

取值:id ==> #{param1} lastName ==> #{param2.lastName/e.lastName}

  • 对于集合与数组类型,即使只有一个参数也会封装成Map
  • public Employee getEmp(List ids);

取值:取第一个id值,#{list[0]}

  1. #{} 与${} 的区别
  • #{} 相当与原生JDBC 中 PrepareStatement 的方式,是预编译的方式,可以防止sql注入
  • ${} 相当于原生JDBC 中Statement 的方式,是直接拼接的方式,有安全问题
  • 大部分情况下都应该使用#{},只有在PrepareStatement 方式中占位符? 无法使用的情况下,才使用${},如分库分表的情况下
  1. 参数处理其他情况
  • jdbcType:指定映射的数据库类型,如字段为空时,默认被映射为OTHER类型, Oracle 不支持,所以要指定为NULL类型。也可以在全局配置文件中指定JdbcTypeForNull 字段值为NULL
  1. 对于返回值为集合或Map的情况
  • 对于集合注意resultType 指定为集合元素类型即可,接口方法返回值声明为集合类型
  • 对于将一个数据模型映射为Map的情况,resultType 指定为map(mybatis 内置别名),接口方法返回值声明为Map,返回Map的key即数据模型属性名
  • 对于将一组数据模型映射为Map的情况,resultType 指定为数据模型类型,用@MapKey 注解在接口方法上指定Map 的key

猜你喜欢

转载自blog.csdn.net/u013738122/article/details/84841171