zoukankan      html  css  js  c++  java
  • mybatis

    mybatis 是持久层中的一种框架  用于管理SQL语句与数据库交互。  

    它是友友半自动的运行机制   需要自己来写SQL语句  是一种比较灵活 的框架   

    它将SQL语句与代码分离了  写在配置文件中 提高了可修改性 主要操作是为借口类配置相应的XML实现文档

    最具特点是缓存机制  满足缓存的条件  1 数据量小  2数据不容易发生改变  3数据并发关系小   缓存分为一级和二级

    一级缓存 对应一个session  调用同一个session得到的结果是同一个  

    二级缓存 对应的是session工厂  在二级缓存下引用的是同一个东西 但是 存储路径不同

    以<mapper namespace="配置路径">  来表示此XML实现的是哪一接口     主要操作为SQL语句的增 删 改 查  

    增加标签   id为实现的哪个接口方法   parameterType是传入的参数类型   useGeneratedKeys获取自增长  keyProperty将自增长赋值ID

    <insert id="实现接口的哪个方法" parameterType="传入的参数类型" useGeneratedKeys="true"  keyProperty="ID">

    SQL语句

    </insert>   

    其他大致相同   需要注意再有返回时resultType="返回类型"      

    resultMap标签 用于传入参数比较多的时候    是比较重要的一个标签  使用resultMap需要先设置键值对  

    <resultMap type="哪一个对象" id="为此标签取别名">
    <id property="id(属性的别名)" column="hid(对象中的属性)" javaType="java.lang.Long(属性的类型)"/>  
    <result property="name" column="hName" javaType="java.lang.String"/>
    <!-- 关联,关系   在对象中包含对象时   使用association 标签 -->
    <association property="别名" javaType="属性名">
    <id property="内置对象的别名" column="内置对象的属性" javaType="java.lang.Long(属性的类型"/>
    <result property="name" column="wName" javaType="java.lang.String"/>
    </association>
    </resultMap>

    配制好map 在标签中使用resultMap="配置MAP别名"

    <select id="实现接口的哪个方法" resultMap="配置MAP别名">
    SQL语句
    </select>

    为了更灵活的操作数据库 mybatis提供了7种动态拼接 

    foreach循环 

    <insert id="batchSaveGames" parameterType="java.util.List">
    insert into t_game (game_name,create_time) values

    在values后插入foreach标签 循环
    <foreach collection="传入参数" item="参数别名" separator=",(分割符号)"> 
    (#{g.game},#{g.createTime})
    </foreach>
    </insert>

    where 判断拼接

    <select id="countStusByParams" resultType="int">
    select count(s.id) from t_stu as s,t_class as c

    判断标签凭借  
    <where>
    <include refid="commonSql"></include>
    </where>
    </select>

    set-if

    在普通标签中嵌入下面这一段

    <set>
    <if test="u.userName != null">  判断标签 判断成功会运行标签里的内容
    user_name = #{u.userName},
    </if>

    <if test="u.sex != null">
    sex = #{u.sex}
    </if>

    </set>

    SQL 公共标签 需要先写好公共SQL语句

    <sql id="公共SQL的别名">

    SQL语句

    </sql>

    然后在其它标签中引用  include 将SQL嵌入

    <include refid="公共SQL的别名"></include>  

    prim 和where 作用一样  区别不大

    choose when 多选一 在choose中 以when判断 符合就嵌入包含语句  适用于多选一

    <choose>
    <when test="name != null"> 
    user_name like CONCAT('%',#{name},'%')
    </when>
    <when test="sex != null">
    and sex like CONCAT('%',#{sex},'%')
    </when>
    <otherwise>1=1</otherwise>
    </choose>

  • 相关阅读:
    bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
    luoguP1886 滑动窗口 [单调队列]
    bzoj1047: [HAOI2007]理想的正方形
    bzoj1012: [JSOI2008]最大数maxnumber [单调队列]
    树与二叉树之二--二叉树的性质与存储
    树与二叉树之一--基本概念与存储结构
    Markdown段首空格
    C++ atan2
    凸包学习笔记
    Codeforces Round #545 (Div. 1) E. Train Car Selection
  • 原文地址:https://www.cnblogs.com/waxlh/p/5686739.html
Copyright © 2011-2022 走看看