zoukankan      html  css  js  c++  java
  • mybatis

    mybatis
    usermapper.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.easytopit.demo.mybatis.mapper.UserMapper">
    <insert id="insert" useGeneratedKeys="true" keyProperty="id" >
    INSERT INTO et_user (username, truename, login_time) VALUES(#{username}, #{truename}, #{loginTime});
    </insert>

    <update id="update">
    UPDATE et_user SET username=#{username}, truename=#{truename}, login_time=#{loginTime} WHERE id=#{id}
    </update>

    <delete id="delete" parameterType="int">
    delete from et_user where id=#{id}
    </delete>

    <select id="queryAll" resultType="com.easytopit.demo.mybatis.bean.User">
    SELECT id, username, truename, login_time loginTime FROM et_user LIMIT 10
    </select>

    <select id="queryAllByPage" parameterType="java.util.HashMap" resultType="com.easytopit.demo.mybatis.bean.User">
    <!-- SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{param1}, #{param2} -->
    SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{pageOffset}, #{pageSize}
    </select>

    <select id="query" resultType="com.easytopit.demo.mybatis.bean.User">
    SELECT id, username, truename, login_time loginTime FROM et_user WHERE id = #{id}
    </select>
    </mapper>
    namespace:
    是为了解决相同名字的sql操作问题,有标识的作用
    例如如果访问的路径是/add.do,如果namespace为/user,则访问路径为/user/add.do
    select id="selectid"
    id是为了唯一标识sql语句
    resultType=java.util.map
    标识当行记录的类型

    // 手工查询(根据命名空间 - 命名空间与Mapper接口一致) -> com/easytopit/demo/mybatis/mapper/persistent/UserMapperNS.xml
    users = session.selectList("NS.queryAll");
    参数的三种方法
    1:使用#{0}索引
    2:使用参数#{param1} 从1开始
    3:注解 @param(“name”)
    jdk1.8支持参数注解,其他的不支持 参数名字和param(“”)名字一致
    注意事项
    #{} 实际上使用的jdbc的?占位符,是安全的
    11:41:56.728 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = ?
    ${} 底层实际上使用的替换,要记得加单引号,是不安全的
    11:47:29.831 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = 67
    结果集映射
    resulttype
    映射一个具体的类
    resultmap
    先定义一个resultmap,然后映射
    多对一映射
    相当于先查询一个属性,然后自动使用属性作为参数调用其他的方法,再讲结果返回
    column ''deptno ,property='dept',javaType=dept.class,one = @one(select = "命名空间.方法名")
    一对多映射
    懒加载
    设置
    需要的时候加载
    出现的原因在于,应为一对多情况,有可能出现内存不足,所以当需要的时候,重新发起sql语句
    insert selectkey标签
    先通过sql语法,查询当前的列的最大值+1,放入到map中,然后insert into语句
    <insert id="addRecord" parameterType="map" >
    <!--取主键,通过取主键的最大值+1,适合单线程,不建议使用
    然后将主键设置为key放到map中

    -->
    <selectKey keyColumn="mykey" keyProperty="scoreNo" order="BEFORE" resultType="int" >
    select max(s_id)+1 as mykey from ex_score
    </selectKey>
    insert into ex_score (s_id,u_id,s_score,s_create_date,s_level) values(#{scoreNo},#{userId},#{userScore},#{createTime},#{level})
    </insert>
    sql和include标签
    将相同的sql语句封装放到sql标签里面,然后使用include标签调用sql
    sql里面的特殊符号
    在xml转义
    小写 &lt;
    小于等于&lt;=
    maven插件出故障
    C:UsersAdministrator.m2 epositoryorgapachemavenpluginsmaven-resources-plugin
    删除
    导致的问题,在网路的情况下自动更新插件,如果中途网络出现故障,就会出现问题
    动态sql
    trim
    prefix='where' prefixoverrides='and'
    意思是如果前缀有and,将and覆盖成where
    注意,要在每个条件前面加上and
    trim转set
    trim prifix = 'set' prefixoverrides='' suffix='' suffixoverride=','
    意思是将前面空格替换成set,将后面的,替换成空格
    set
    开头添加set,结尾去掉逗号
    where
    作用:如果有条件满足,自动添加上where,并且会自动去掉满足第一个条件的and
    foreach
    大部分用于循环in里面的数据
    foreach collection='传进来对象的属性' close=') item=''变量' open='(' separator='每个数据之前用逗号分开'
    不建议在where1=1 ,因为会读取所有的表,有性能问题
    缓存
    缓存的意思是,所有查询的过一次的数据临时存储在内存中,第二次则判断内存是否存在,不存在就去读取数据库
    要考虑的问题,当内存不足 时,考虑将某些数据踢出去
    一级缓存
    是session级别的缓存,必须是session相同,取出来的缓存数据才相同
    不然你每次插叙查询一次都会去数据库查找
    效果:同一个session操作数据时,第二次操作直接去缓存里面去,无需重新去数据库操作
    对增差改查
    二级缓存
    是sessionfactory级别
    效果,使用同一个sesseionfactory,当第一个sesseion的数据存入到sesseion中,然后session关闭,如果有启用了二级缓存,数据会被推送到二级缓存里面,然后下次使用新的sesseion时,会直接从二级缓存里面读取
    启动二级缓存
    在mapper里面,使用<cache></cache>
    子主题 4
    不建议使用二级缓存
    相当于之前的全局变量
    对查询安全
    算法
    fifo
    将队列最右端的数据踢出去
    lfu:least frequently used
    使用次数最少的踢出去
    也就是数据存到数据库到删除使用次数最少的
    LRU:least recently userd
    最近使用次数最少的
    在指定时间内使用次数最少的
    实现缓存
    缓存的每行数据必须有唯一标识符(表中的主键),也就是map
    如果有就从map中取,没有就添加
    子主题 1

  • 相关阅读:
    js获取元素位置和style的兼容性写法
    javascript正则表达式---正向预查
    Typescript学习笔记(五) 模块机制
    Typescript学习笔记(四)class 类
    Typescript学习笔记(三)变量声明及作用域
    Typescript学习笔记(二)枚举
    Typescript学习笔记(一)基础类型
    tar命令
    linux的nohup命令的用法。
    vue.js移动端app实战1
  • 原文地址:https://www.cnblogs.com/wdx330616/p/7109733.html
Copyright © 2011-2022 走看看