mybatis基础

本文详细介绍了如何在SpringBoot项目中集成MyBatis,包括配置数据库连接、创建实体类和Mapper、SQL提示、数据库连接池切换、Lombok的使用、日志输出、基础操作如增删改查,以及动态SQL和XML映射的规范。
摘要由CSDN通过智能技术生成

一、简单案例-编写入门程序

1、创建项目,创建一个springboot项目,并引入mybatis依赖

image-20240302123244588

image-20240302122451664


2、依赖支持,在pom文件中主要就是这三个依赖

image-20240302123510240

3、设置springboot数据库链接信息

image-20240302125341547

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=
#连接数据库的密码
spring.datasource.password=

image-20240302125710446

4、根据数据库表创建实体类

image-20240302124910532

5、创建Mapper包

mapper类似于三层架构下面的dao层

创建一个简单的查询

image-20240302131321363

6、利用单元测试测试代码

image-20240302131829750

image-20240302131838796

利用依赖注入的方式来调用接口进行测试

image-20240302131957350

二、配置SQL提示

默认情况下mybatis中编写sql语句是不识别的,可以进行以下设置

1、选中sql语句

image-20240302132116639

2、右键

image-20240302132144364

image-20240302132304744

这样设置后就会提示sql语句,同时在连接数据库的时候可以指定要使用的表,这样idea可以对你进行提示,避免报错。

三、切换数据库连接池

官方默认的连接池为hikari,如果需要切换Druid,首先就需要去pom文件配置

image-20240302134013649

四、lombok

Lombok是一个使用的Java类库,能够通过注解的形式自动生成构造器。。。。,并可以自动化生成日志变量,简化java开发

image-20240302134623487

1、引入依赖

在pom文件中加入依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

然后就可以在实体类中取消掉getter setter这些直接使用注解的方式

image-20240302135246019

五、日志输出

可以在application.properties中打开mybatis日志,并输出到控制台

#输入到日志到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

六、mybatis基础操作

占位符 #{ }

执行sql时会生成预编译sql 自动设置参数值

使用时机:参数传递都使用#

占位符 ${ }

拼接SQL,直接将参数拼接在SQL语句中,存在SQL注入问题

使用时机:如果对表名、列表进行动态设置时使用

6.1、删除

image-20240302141808073

6.2、新增

如果插入的数据过多,可以通过直接插入对象的方式,利用#{}获取对象属性进行插入

image-20240302144756279

6.2.1、主键返回

在某些场景下添加成功后需要获取刚插入的主键,例如点外卖时候添加购物车功能

@Options(keyProperty = "id",useGeneratedKeys = true)

将自动生成的主键值,赋值给对象的id属性

6.3、更新

image-20240302150632457

6.4、查询

image-20240302151658477

使用这个可能会导致你没有查询的字段为null,可以使用@Results,手动映射封装(不太推荐)

也可以使用mybatis自带的驼峰命名自动映射开关(推荐)

需要再application.properties中配置

#开启驼峰命名自动映射开关
mybatis.configuration.map-underscore-to-camel-case=true

6.4.1、条件查询

根据自己的开发需求来进行模糊匹配或者精确匹配

image-20240302155543524

‘%${name}%’ 不建议这样使用,利用content进行字符拼接防止sql注入

image-20240302155750930

七、XML映射文件

规范

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
  • XML映射文件的namespace属性为Mapper接口全限定名一致。
  • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

7.1、配置过程

XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。

image-20240302160743949

与mapper结构和名字一致,在xml里面写上规范

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper>
    
</mapper>

XML映射文件的namespace属性为Mapper接口全限定名一致。

<mapper namespace="com.example.crudtest.mapper.EmpMapper">

</mapper>

XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

image-20240302161519049

八、动态SQL

随着用户的输入或者外部条件变换而变化的sql

8.1、if标签

用于判断条件是否成立,用test属性进行条件判断

            <if test="name !=null">
                name like concat('%', #{name}, '%')
            </if>

8.2、where标签

用于在子元素中有内容的时候出现,会自动去除子句中的and或者or

       <where>
            <if test="name !=null">
                name like concat('%', #{name}, '%')
            </if>
            <if test="gender !=null">
                and gender = #{gender}
            </if>
            <if test="begin !=null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>

8.3、set标签

动态地在行首插入SSET关键字,并会删除额外的逗号。(update语句中)

        update emp
        <set>
        <if test="username!=null">username = #{username},</if>
        <if test="name !=null">name = #{name},</if>
        <if test="gender !=null">gender = #{gender},</if>
        <if test="image !=null">image = #{image},</if>
        <if test="job !=''">job = #{job},</if>
        <if test="entrydate !=null">entrydate = #{entrydate},</if>
        <if test="deptId !=null">dept_id = #{deptId},</if>
        <if test="updateTime !=null">update_time = #{updateTime}</if>
        </set>
        where id = #{id}

8.4、foreach标签

用于批量操作

    <!--批量删除
    -->
    <!--
        collection:遍历的集合
        item:遍历出来的元素
        separator:分隔符
        open:遍历开始前凭借的sql片段
        close:遍历结束后拼接的片段
    -->
    <delete id="deleteByIds">
        delete from emp where id in
        <foreach collection="list" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

注意这里的需要写成list,, mybatis 会把这个集合参数重新封装到一个 map中, 而 map 中这个集合对应的key 写死成了 list.

8.5、sql标签

用于查询出复用的表id字段

    <sql id="commonSelect">
        select id,username,password,name,gender,image,job,entrydate,dept_id,create_time,update_time
        from emp
    </sql>

将查出来的字段封装到commonSelect 在需要使用的地方使用include引入

        <include refid="commonSelect"></include>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周粥粥ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值