Java笔记 -Mybatis/MybatisPlus

Mybatis

一款优秀的持久层框架,用于简化JDBC开发

框架

半成品软件,是一套可重用的、通用的、软件基础代码模型,在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

三层架构

  • 表现层: 页面
  • 业务层: 实现功能
  • 持久层: 与数据库相关

JDBC缺点

  • 硬编码
  • 操作繁琐

使用步骤

  1. 导入依赖
  2. 编写核心配置文件
  3. 准备接口
  4. 编写映射配置文件(该文件的文件名、路径必须和接口一样,映射文件的namespace也必须和接口的文件名、文件路径一样)
  5. 根据接口配置sql语句

在这里插入图片描述

加载映射文件

方式1(加载sql映射文件)
<mapper resource="com/xlrong/mapper/xxx.xml"/>
方式2(Mapper代理方式)
<package name="com.itheima.mapper"/>

解决驼峰与下划线查询问题

  • 字段起别名
  • sql 片段
select
	<include refid="brand_cloumn" />
from tb_brand;
  • resultMap
    • id: 完成主键字段的映射
    • result: 完成其他字段的映射
<result id="brandResultMap" type="brand">
	<result column="brand_name" property="brandName" />
	<result column="company_name" property="companyName" />
</resultMap>
  • 开启驼峰命名

传参数

  • #{}: 占位符
  • ${}: 拼接字符串,存在 sql 注入问题,表名或者列名不固定的情况下可以使用
  • parameterType: 用于设置参数类型,可以省略
  • 特殊字符
    • 转义字符
    • <![CDATA[内容]]>: CD 提示

多条件查询

  • 散装参数: @Param("test)int test
  • 封装成对象
  • 封装成 Map

动态SQL查询

  • <if>标签
  • <where>标签
  • <choose> <when> </when> </choose> 标签,类似于 switch

Mybatis事物

  • openSession();: 默认不开启事物
  • openSession(true);: 开启事物

批量查询

  • <foreach>: mybatis 会自动将传进来的数组封装为一个 map,默认 array = 数组/list = 集合,可以使用 @Param 注解修改该键名称

多参数底层

  • 如果没有使用 @Parem 注解,每个参数会创建两个 map 一个 arg0,一个 param1,以此类推

mybatis注解开发

可以实现简单的功能,和配置文件一样,配置文件怎么写,这里就怎么写

具体注解
  • 查询: @Select
  • 修改: @Update
  • 删除: @Delete
  • 添加: @Insert
映射关系
  • @Results
    • @Result
  • @ResultMap

  • logback在maven中不用写配置文件,有默认的配置
<!--开启驼峰命名法-->
<settings>
    <setting name="mapUnderscoreToCamelCase" value="true" />
</settings>

<!--起别名-->
<!-- <typeAliases>将该包下的所有实体类起别名,不区分大小写 -->
<typeAliases>
    <package name="work.xlrong.pojo"/>
</typeAliases>
  • _parameter: 表示 mybatis 中参数整体

  • 只要返回值是基本数据类型,就可以不用写返回值类型

  • 添加主键返回

useGeneratedKeys="true" keyProperty="列名"
arameter`: 表示 `mybatis` 中参数整体

* 只要返回值是基本数据类型,就可以不用写返回值类型

* 添加主键返回

​```java
useGeneratedKeys="true" keyProperty="列名"

Mybatis转义符

在这里插入图片描述

  • 或者直接使用CDATA区: <![CDATA[ >= ]]>

MybatisPlus

公共字段自动填充

MybatisPlus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值

使用它的好处就是可以统一对这些字段进行处理,避免了代码重复

实现步骤
  1. 在实体类的属性上加入@TableField注解,指定自动填充的策略
@TableField(fill = FieldFill.DEFAULT)	// 默认不处理
@TableField(fill = FieldFill.INSERT)	// 插入时填充字段
@TableField(fill = FieldFill.UPDATE)	// 更新时填充字段
@TableField(fill = FieldFill.INSERT_UPDATE)	// 插入和更新时填充字段
  1. 按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入操作时自动填充
     *
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        metaObject.setValue("字段1", 数据1);
        metaObject.setValue("字段2", 数据2);
        metaObject.setValue("字段3", 数据3);
        ...
    }

    /**
     * 更新操作时自动填充
     *
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("字段1", 数据1);
        metaObject.setValue("字段2", 数据2);
        metaObject.setValue("字段3", 数据3);
        ...
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值