专栏首页黑马【SSM_10】Mybatis-注解、扩展知识扩展

【SSM_10】Mybatis-注解、扩展知识扩展

一、注解开发

//插入
@Insert("insert into orders value(null,#{ordertime},#{total},#{uid})")
void save(Orders orders);

//删除
@Delete("delete from orders where id = #{vaalue}")
void del(int id);

//修改
@Update("update orders set ordertime = #{ordertime},total = #{total},uid = #{uid} where id = #{id}")
void edit(Orders orders);

//查询所有
@Select("select * from orders")
List<Orders> findAll();

//查询指定字段
@Select(" select * from orders where id = #{value}")
Orders findById(int id);

//一对一 查询
@Select("select * from orders")
@Results({
@Result(property = "id",column = "id"),
@Result(property = "ordertime",column = "ordertime"),
@Result(property = "total",column = "total"),
@Result(
    property = "user",
    column = "uid",
    javaType = User.class,
    one = @One(select = "com.softwareMan.dao.UserDao.findById")
    )
})
List<Orders> findOne_One();

//一对多/多对多,区别在与many = @Many(select = "执行方法")
@Select("select * from user")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "username",column = "username"),
@Result(property = "password",column = "password"),
@Result(property = "birthday",column = "birthday"),
@Result(
    property = "ordersList",        //要封装的属性
    column = "id",                  //根据已查出的那个字段作为条件去查询 orders 表
    javaType = List.class,          //属性类型
    many = @Many(select = "com.softwareMan.dao.OrdersDao.findByUserId")     //执行那个接口的那个方法
    )
})
List<User> findone_two();

二、Mybatis补充

1. 主键返回

<!--
    last_insert_id()    :    查询刚插入数据自增id
    order               :    执行的时机 after 之前执行; before 之后执行
    keyProperty         :    与实体类属性保持一致
    keyColumn           :    与数据库字段保持一致
-->
<insert id="save" parameterType="orders" >
    <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER" >
        select last_insert_id();
    </selectKey>
    
    insert into orders value(null,#{ordertime},#{total},#{uid})
</insert>

2. 模糊查询

① ${}  //底层进行字符串拼接  --- sql注入 不适用
    --->  平
    select * from orders where name = '%${value}%'

② #{}  //底层预编译sql
    ---> %平%
    select * from orders where name = '#{value}'

扩展

一、延迟加载

1. 概述

- 等到需要用到数据的时候才去查询,不用的时候不查询。
    * 先从一张表中查询出外键字段,然后拿着这个字段去查另一张表

2. 延迟加载的 mapper 配置

<resultMap id="userAccountMap" type="user">
    <id property="id" column="id"></id>
    <result property="username" column="username"></result>
    <result property="address" column="address"></result>
    <result property="sex" column="sex"></result>
    <result property="birthday" column="birthday"></result>

    <!-- 
        配置 user 对象中 accounts 集合的映射 
        使用 select 调用另一个方法按照已查出字段 id 查询信息
    -->
    <collection property="accounts" 
                column="id" 
                ofType="account" 
                select="com.softwareMan.dao.AccountDao.findAccountByUid">
    </collection>
</resultMap>

<select id="findAll" resultMap="userAccountMap">
    select * from user
</select>

3. 开启延迟加载

<settings>
    <!--开启Mybatis支持延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"></setting>
</settings>

二、Mybatis 缓存

1. 概述

- 一级缓存是 sqlSession 级别的,存在于 sqlSession 中,sqlsession 存在,以及缓存就存在
- 二级缓存是 mapper 级别的,多个 sqlSession 操作同一个 mapper 映射的 sql,共用同一份 二级缓存

2. 一级缓存

- 发起一次用户请求时会先去一级缓存找,找不到再去数据库查询,并将数据存入一级缓存
- 一级缓存执行 增、删、改、commit()、close() 等方法时会清空缓存

3. 二级缓存使用

- 在 mubatis 中开启二级缓存
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

- 在 mapper 中开启 二级缓存 支持
    <cache/>

- statement 上添加 useCache 属性
    <select id="findById" parameterType="INT" resultType="user" useCache="true">
        select * from user where id = #{uid}
    </select>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 知识扩展----快速阅读

    而快速阅读就是充分利用左右脑,协调快速处理视觉信息。快速阅读也叫“全脑速读”。

    令仔很忙
  • PHP的Mcrypt加密扩展知识了解

    今天我们来学习的是 PHP 中的一个过时的扩展 Mcrypt 。在 PHP7 之前,这个扩展是随 PHP 安装包一起内置发布的,但是现在新版本的 PHP 中已经...

    硬核项目经理
  • 测试技能扩展 | Nginx知识

    nginx几乎是众多大型网站必用技术, 大多数情况下, 我们不需要亲自去配置,但了解他在应用程序中的角色, 以及如何解决这些问题是非常有帮助的.

    louiezhou001
  • iOS扩展——颜色相关的知识

    1 颜色的基本组成     - 一种颜色由N个颜色通道组成 2 颜色通道     - 1个颜色通道占据8bit     - 1个颜色通道的取值范围       ...

    mukekeheart
  • Linux快速入门04-扩展知识

    这部分是快速学习的最后一部分知识,其中最重要的内容就是源码的打包和软件的安装的学习,由于个人的Linux学习目的就是自己能在阿里云Ubuntu上搭建一个简单的n...

    用户1216676
  • python程序文件扩展名知识点详解

    python程序的扩展名有.py、.pyc、.pyo和.pyd。.py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语...

    砸漏
  • spring4.1.8扩展实战之八:Import注解

    版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boli...

    程序员欣宸
  • Spring全注解开发--扩展原理

    BeanPostProcessor:bean的后置处理器,bean创建对象初始化前后进行拦截工作的

    大忽悠爱学习
  • 知识扩展----404错误页面那些事

         对这个东西,貌似有点印象,之前浏览网页的时候,也是经常出现的事,只不过弹出的页面不同罢了。举个例子:

    令仔很忙
  • 框架扩展:注解 RPC Consumer属性动态注入

    分布式系统架构时代,RPC框架你一定不会陌生。目前主流的RPC框架有 dubbo、thrift、motan、grpc等。

    用户7676729
  • 小结ES6基本知识点(四):数组的扩展

    ES6初学者,通过阅读本文可对ES6知识点有个大体的概念,强烈建议阅读阮一峰大大的ES6入门

    前端林子
  • 小结ES6基本知识点(五):对象的扩展

    ES6初学者,通过阅读本文可对ES6知识点有个大体的概念,强烈建议阅读阮一峰大大的ES6入门

    前端林子
  • 字符处理——大小写转换编码知识扩展

    前面实现的字符处理,大小写转换是使用了VBA内置函数实现的,如果不使用VBA的UCase和LCase函数,我们如何完成大小写转换?

    xyj
  • Java多线程相关知识点扩展实例分析

    PS:工具是根据场景来的,达到某个场景这个工具才有它的价值,如果你不存在这个场景这个工具也就没有价值。多线程这块设计到3块的知识:筑基阶段(JMM,lock,c...

    IT架构圈
  • 基于MyBatis注解扩展,实现无需配置就可拥有增删改 顶

          如果项目本身基于SpringMVC+Mybatis构建,不需添加任何配置Mapper类只需继承

    用户2603479
  • 知识扩展——轻量级和重量级框架的区别

      不管是iOS开发还是前端、Java、Android开发中,我们经常需要用到第三方库,而在搜索第三方库的介绍和使用文档时,经常会看到轻量级、重量级等字眼,那么...

    mukekeheart
  • python中利用py帮助命令扩展开发知识面

    往往企业中的生产环境比较简单,但是需要我们可能去解决一些bug,需要现场调试,此时,现场开发,可能用到帮助来提示我们一些函数的用法。

    刘金玉编程
  • 高频Spring面试题你能答对几个?

    Spring 框架,作为一个非常优秀的轻量级容器,在企业级项目开发中非常受欢迎,Spring 框架也早已成为 Java 后端开发事实上的行业标准,如何用好 Sp...

    java思维导图
  • Mybatis插件扩展以及与Spring整合原理

    前面几篇文章分析了Mybatis的核心原理,但模块较多,没有一一分析,更多的需要读者自己下来研究。不过Mybatis的插件扩展机制还是非常重要的,像PageHe...

    夜勿语

扫码关注云+社区

领取腾讯云代金券