前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis进阶

MyBatis进阶

作者头像
Breeze.
发布2022-06-13 08:53:08
2430
发布2022-06-13 08:53:08
举报
文章被收录于专栏:一只无聊的清风

MyBatis日志管理与动态SQL

日志管理

  • 日志文件是用于记录系统操作事件的记录文件或文件集合
  • 日志保存历史数据,是诊断问题以及理解系统活动的重要依据

日志返回首页 (qos.ch)

日志输出级别(优先级 高到低) error: 错误 - 系统的故障日志 warn: 警告 - 存在风险或使用不当的日志 info: 一般性消息 debug: 程序内部用于调用信息 trace: 程序运行的跟踪信息

MyBatis 动态SQL

动态SQL是指根据参数数据动态组织SQL的技术

MyBatis 二级缓存

  • —级缓存默认开启,缓存范围SqlSession会话一级缓存
  • 二级缓存手动开启,属于范围Mapper Namespace
二级缓存运行规则
  1. 二级开启后默认所有查询操作均使用缓存
  2. 写操作commit提交时对该namespace缓存强制清空
  3. 配置useCache=false可以不用缓存
  4. 配置flushCache=true代表强制清空缓存

关联查询

一对多

代码语言:javascript
复制
<!--
    resultMap 可用于说明一对多或多对一的映射逻辑
    id 是 resultMap 属性引用的标志
    type 指向 One 的实体(Goods)
    -->
<resultMap id="rmGoods1" type="pers.hua.mybatis.entity.Goods">
    <!-- 映射 goods 对象的主键到 goods_id 字段-->
    <id column="goods_id" property="goodsId"/>
    <!--
        collection 的含义是:在 select * from t_goods limit 0,1
        得到结果后,对所有的 Goods 对象遍历得到 goods_id 字段值,
        并代入到 goodsDetail 命名空间的 findByGoodsId 的SQL中执行查询,
        将得到的"商品详情"集合赋值给 goodsDetails List对象
        -->
    <collection property="goodsDetails" select="goodsDetail.selectByGoodsId" column="goods_id"/>
</resultMap>
<select id="selectOneToMany" resultMap="rmGoods1">
    select * from t_goods limit 0,10
</select>

多对一

代码语言:javascript
复制
<resultMap id="rmGoodsDetail" type="pers.hua.mybatis.entity.GoodsDetail">
        <id column="gd_id" property="gdId"/>
        <result column="goods_id" property="goodsId"/>
<!--        association:多对一-->
        <association property="goods" select="goods.selectById" column="goods_id"/>
    </resultMap>
    <select id="selectManyToOne" resultMap="rmGoodsDetail">
        select * from t_goods_detail limit 0,1
    </select>

分页查询

Maven引入PageHelper分页插件、jsqlparser

代码语言:javascript
复制
    <plugins>
<!--        启用分页插件-->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--            设置数据库类型-->
            <property name="helperDialect" value="mysql"/>
<!--            分页合理化-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

整合C3P0连接池

Maven引入C3P0

代码语言:javascript
复制
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>

创建DataSource

代码语言:javascript
复制
/**
 * C3P0与MyBatis兼容使用的数据源工厂类
 */
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
    public C3P0DataSourceFactory(){
        this.dataSource = new ComboPooledDataSource();
    }
}

MyBatis批处理

代码语言:javascript
复制
<!--    INSERT INTO table-->
<!--    VALUES ("a","a1","a2"),("b","b1","b2"),(......);-->
<insert id="bachInsert" parameterType="java.util.List">
    insert into t_goods(title, sub_title, original_cost, current_price, discount, is_free_delivery, category_id) VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        (#{item.title},#{item.subTitle},#{item.originalCost},#{item.currentPrice},#{item.discount},#{item.isFreeDelivery},#{item.categoryId})
    </foreach>
</insert>

MyBatis注解开发方式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MyBatis日志管理与动态SQL
    • 日志管理
      • MyBatis 动态SQL
        • 二级缓存运行规则
    • MyBatis 二级缓存
    • 关联查询
    • 分页查询
    • 整合C3P0连接池
    • MyBatis批处理
    • MyBatis注解开发方式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档