Mybatis学习记录

Mybatis介绍

什么是mybatis?

● Mybatis是作用于持久层的框架,用于简化JDBC的开发。                (是Apache的一个开源项目)

快速入门

以前我们是在图形化客户端工具中编写SQL查询代码,发送给数据库执行,数据库执行后返回操作结果。

图形化工具会把数据库执行的查询结果,使用表格的形式展现出来

现在使用Mybatis操作数据库,就是在Mybatis中编写SQL查询代码,发送给数据库执行,数据库执行后返回结果。

 实例:编写入门程序,并进行测试

步骤:

1、准备工作,创建springboot工程、数据库表user、实体类User

2、引入Mybatis的相关依赖、配置Mybatis(数据库连接信息)

3、编写SQL语句(注解/XML)

步骤1:工程结构、表结构创建命令以及实体类代码如下:

步骤2:相关依赖如下,记得刷新Maven,连接数据库,数据库名Mybatis

                                        

步骤3:properties文件修改了很久 ,按这个格式可以跑通,可以在控制台查看六条信息

           

附:可以在IDEA中配置 SQL语句的自动填充,按以下步骤操作即可。

     

        ​​​​​​​        ​​​​​​​        

JDBC介绍

详细知识可以专门去学。

JDBC VS Mybatis

优势1:JDBC将连接信息写入代码,变动就要修改代码,Mybatis将其写入properties中方便配置

优势2:JDBC需要手动获取字段,Mybatis全是自动封装

优势3:JDBC需要频繁获取连接关闭连接造成资源浪费,Spring会将Mybatis的连接放入连接池

Mybatis需要关注的两个方面:

总结:JDBC是SUN公司开发的一套操作关系型数据库的API(规范),各数据库厂商来提供对应的实现,这套实现通常被叫做数据库的驱动,比如mysql。由于JDBC操作起来繁琐且效率低下,所以市面上出现了类似Mybatis这样的持久层(dao层)框架,对JDBC程序实现封装,从而简化开发。

数据库连接池

● 数据库连接池是个容器,负责分配、管理数据库连接(Connection)

● 它允许应用程序重复使用一个现有的数据库连接(提前创立多个连接对象),而不是再重新建立一个

● 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势:

● 资源复用

● 提升系统响应速度

● 避免数据库连接遗漏 

标准接口:Datasource

● 官方提供的数据库连接池接口,由第三方组织实现此接口

● 功能:获取连接   

常用连接池:Druid(德鲁伊)、Hikari(springboot默认)

如何切换Druid数据库连接池

1.在pom.xml中添加依赖(springboot3添加以下代码)

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-3-starter</artifactId>
   <version>1.2.8</version>
</dependency>                            

2.在application.properties中配置信息

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/Mybatis
#连接数据库的用户名
spring.datasource.username=zimo
#连接数据库的密码
spring.datasource.password=0428
#切换druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

lombok

● Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

首先需要引入lombok的依赖

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

一个实体类的构建对象可简化为如下:

package com.itheima.pojo;

import lombok.*;

@Data
@NoArgsConstructor
@AllArgsConstructor

public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
}

注意事项:Lombok会在编译时,自动生成对应的java代码,我们使用lombok时,还需要安装一个lombok的插件(idea自带)

Mybatis基础操作(核心)

准备工作

● 准备数据库表 emp

● 创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、 lombok)

● application.properties中引入数据库连接信息

● 创建对应的实体类 Emp(实体类属性采用驼峰命名)

● 准备Mapper接口EmpMapper

根据主键删除员工

在前端页面点击删除按钮后,前端给服务端发送请求,删除数据,数据库删除数据时,需要获取该数据的唯一标识(主键id),所以前端发送请求时会将唯一标识(主键id)传递过来。

在EmpMapper接口中定义delete方法,同时在上方添加@Delete注解,其中SQL语句中的 #{}为字符串插值匹配id值

日志输出

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

# 指定mybatis输出日志的位置,输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

打开日志后运行可以得到如下红框内容,为预编译SQL,?为实际传入的参数的占位符

预编译SQL

参数占位符(${...}是拼接,会有SQL注入的风险)

新增员工

注意:接口方法中#{...}的属性名必须和Emp中变量名相同,不然会报错

示例:

主键返回

描述:在数据添加成功后,需要获取插入数据库数据的主键

示例:

由于我前几次因为插入了相同的数据,主键产生了冲突,但是默认情况下,数据表中ID列是自增的,所以ID并不连续。

        ​​​​​​​        

更新员工信息

示例:

更新id为18的员工数据

查询员工信息

根据ID查询

示例:

我们发现,有三个数据,deptId,createTime,updateTime 在数据表中是有值的,但是在输出中却为null,它们没有被封装起来

数据封装

● 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装

● 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装

所以我们知道了,这三个数据 实体类属性名和数据库表查询返回字段不一样,我们有以下几种方法解决此问题:使用第三种就行,但是要严格遵循驼峰命名规范(数据库字段名a_column,类中的属性名aColumn)

条件查询

参数名说明

XML配置文件

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

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

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

XML映射文件

MybatisX是一款基于IDEA的快速开发Mybatis的插件,为效率而生

● 安装

使用Mybatis的注解,主要是来完成一些简单的增删改查功能,入宫需要实现复杂的SQL功能,建议使用XML来配置映射语句

Mybatis动态SQL

随着用户输入或外部条件的变化而变化的SQL语句,我们称之为动态SQL

之前的查询语句,只能输入所有带条件字段才能查询,现在用动态SQL可以实现不用输入全部字段,即可进行查询。

通过 if 条件改造

        ​​​​​​​        

标签

<if>

用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

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

动态更新员工信息

<set>:动态地在行首插入SET关键字,并会删除掉额外的逗号(用在update语句中)

<foreach>

<sql><include>

主要是用来将多个字段封装起来。sql标签负责公共的字段的抽取,include标签表示引用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值