前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SSM_10】Mybatis-注解、扩展知识扩展

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

作者头像
用户8250147
发布2021-02-04 10:50:28
3390
发布2021-02-04 10:50:28
举报
文章被收录于专栏:黑马黑马

一、注解开发

代码语言:javascript
复制
//插入
@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. 主键返回
代码语言:javascript
复制
<!--
    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. 模糊查询
代码语言:javascript
复制
① ${}  //底层进行字符串拼接  --- sql注入 不适用
    --->  平
    select * from orders where name = '%${value}%'

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

扩展

一、延迟加载

1. 概述
代码语言:javascript
复制
- 等到需要用到数据的时候才去查询,不用的时候不查询。
    * 先从一张表中查询出外键字段,然后拿着这个字段去查另一张表
2. 延迟加载的 mapper 配置
代码语言:javascript
复制
<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. 开启延迟加载
代码语言:javascript
复制
<settings>
    <!--开启Mybatis支持延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"></setting>
</settings>

二、Mybatis 缓存

1. 概述
代码语言:javascript
复制
- 一级缓存是 sqlSession 级别的,存在于 sqlSession 中,sqlsession 存在,以及缓存就存在
- 二级缓存是 mapper 级别的,多个 sqlSession 操作同一个 mapper 映射的 sql,共用同一份 二级缓存
2. 一级缓存
代码语言:javascript
复制
- 发起一次用户请求时会先去一级缓存找,找不到再去数据库查询,并将数据存入一级缓存
- 一级缓存执行 增、删、改、commit()、close() 等方法时会清空缓存
3. 二级缓存使用
代码语言:javascript
复制
- 在 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>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、注解开发
  • 二、Mybatis补充
  • 扩展
    • 一、延迟加载
      • 二、Mybatis 缓存
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档