• mybatis笔记


    1.支持注解和映射器, 配置文件,映射器Mapper接口(可以以类型安全的方式调用映射的SQL语句)

    定制化SQL,存储过程,高级映射,

    嵌套结果,嵌套查询

    2.Mybatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象,Java对象的数据持久化数据库中 的过程;

    Java对象映射到SQL语句参数,sql结果集映射成Java对象

    mybatis-config.xml或者Java API->SqlSessionFactory对象,线程不安全的

    映射器mapper接口,方法名与id的值相同,namesapce为映射器接口的权限的名

     接口调用映射的SQL语句,

    java对象中的属性设置成查询参数,从SQL结果集上生成Java对象这两个过程

    3. My流行起来有以下原因:
     它消除了大量的 JDBC冗余代码
     它有低的学习曲线
     它能很好地与传统数据库协同工作
     它可以接受 SQL语句
     它提供了与 Spring  和 Guice框架的集成支持 框架的集成支持
     它提供了与第三方缓存类库的集成支持
    4.

    1.他支持复杂的SQL结果集数据映射到嵌套对象图结构

    2.支持一对一和一对多的结果集和Java对象的映射

    3.支持根据输入的数据构建动态的SQL语句

    5.typeAlias 类型别名:Alias注解将会覆盖配置文件中的 注解将会覆盖配置文件中的 <typeAliases>定义

    @Alias("StudentAlias") public class Student { };
    6.typeHandlers 类型处理器:public void setNonNullParameter(PreparedStatement ps, int i, PhoneNumber parameter, JdbcType jdbcType)

    throws SQLException { ps.setString(i, parameter.getAsString()); }

    <typeHandlers>

    <typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" />

    </typeHandlers>

    7.输入参数类型和结果返回类型有效

    8.SqlSession是线程不安全的

    9.sqlSession.insert() 方法 返回 执行INSERT语句 后所影响的行数

    10.MyBatis的结果集映射 ResultMaps特性非常 强大 ,你可以 使用它将简单的SELECT语句映射到复杂的一对 语句映射到复杂的一对 一和一对多关系的Select语句上

    11.resultType='map'  java.Util.HashMap的别名  resultMap

    12.圆点技法,一对一映射

    <resultMap Type = "" id ="" >

    <result property="address.addrId" column="addr_id" />

    <result property="address.street" column="street" />

    <result property="address.city" column="city" />

    <result property="address.state" column="state" />

    </resultMap>

    13.嵌套结果ResultMap,

    <association property="address" resultMap="AddressResult" />

    元素 <association>被用来 导入 “有一个 ”(has-one)类型 的关联。

    嵌套Select查询语句

    <association property="address" column="addr_id" select="findAddressById" />

    14.一对多

    <collection>元素 被用来将多行课程 结果映射成一个Course对象的一个集合

    嵌套Select语句查询会导致N+1选择问题。首先,主查询将会执行(1次),对于主查询返回的每一行,另外一个查询将会被执行(主查询N行,则此查询N次)。对于大型数据库而言,这会导致很差的性能问题。

    15.<if><choose><where><foreach><trim> OGNL(object Graph Navigation Language)表达式来构建动态SQL语言,

    if:<if test="courseName != null"> AND NAME LIKE #{courseName} </if>

    只使用一种查询条件:choose when otherwise:<choose> <when test="searchBy == 'Tutor'"> WHERE TUTOR_ID= #{tutorId} </when> <when test="searchBy == 'CourseName'"> WHERE name like #{courseName} </when> <otherwise> WHERE TUTOR start_date >= now() </otherwise> </choose>

    16.criteria查询条件

    17.所有的查询 条件 (criteria)应该 是可选的。 是可选的。 在需要使用至少 一种查询条件 的情况下, 我们应该 使用 WHERE子句

    <where> <if test=" tutorId != null "> TUTOR_ID= #{tutorId} </if> <if test="courseName != null"> AND name like #{courseName} </if> <if test="startDate != null"> AND start_date >= #{startDate} </if> <if test="endDate != null"> AND end_date <= #{endDate} </if> </where>

    如果 WHERE子句 以 AND或者 OR 打头,则 打头 的AND或 OR 将会移除

    18. trim和where类似,,但是 ,<trim>提供 了在添加前缀 了在添加前缀 /后缀 或者 移除前缀 /后缀方面提供更大的灵活性。 <trim prefix="WHERE" prefixOverrides="AND | OR">

    19.foreach,迭代遍历一个数组或者列表,构造AND/OR 条件或一个IN字句

    <foreach item="tutorId" collection="tutorIds"> OR tutor_id=#{tutorId} </foreach>

    <if test="tutorIds != null"> <where> tutor_id IN <foreach item="tutorId" collection="tutorIds" open="(" separator="," close=")"> #{tutorId} </foreach> </where> </if>

    20.set条件,<set> <if test="name != null">name=#{name},</if> <if test="email != null">email=#{email},</if> <if test="phone != null">phone=#{phone},</if> </set>

    21.传入多个输入参数

    <select id="findAllStudentsByNameEmail" resultMap="StudentResult"> select stud_id, name,email, phone from Students where name=#{param1} and email=#{param2} </select>

    22、多行结果集映射成map

    23.使用rowbounds对结果集进行分页,

    int offset =0 , limit =25; RowBounds rowBounds = new RowBounds(offset, limit); List<Student> = studentMapper.getStudents(rowBounds);

    @Alias("StudentAlias") public class Student { }

  • 相关阅读:
    JavaScript-4.5 事件大全,事件监听---ShinePans
    SparseArray具体解释,我说SparseArray,你说要!
    Spark Core源代码分析: RDD基础
    我的 Android 开发实战经验总结
    物联网的一种參考架构
    【LeetCode】 Rotate List 循环链表
    放苹果(整数划分变形题 水)poj1664
    ps白平衡
    jfinal对象封装Record原理
    ps通道混合器
  • 原文地址:https://www.cnblogs.com/lelouchKOP/p/5978707.html
Copyright © 2020-2023  润新知