MyBatis进阶

2022-06-13 08:53:08 浏览数 (1)

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注解开发方式

0 人点赞