Mybatis

Mybatis介绍

MyBatis 是一个基于 Java 的持久层(数据访问层)框架,它允许开发者使用 SQL 语句来操作数据库,同时提供了一些高级特性来简化数据库访问和对象关系映射(ORM)。同时起到了简化JDBC(JDBC(Java Database Connectivity)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问)开发的作用

Mybatis入门

使用mybatis查询所有用户的数据

在这里插入图片描述
利用java语句编写查询语句然后传送给服务器的数据库获取数据。

在这里插入图片描述
需要在Spring的application.properties中进行配置
在这里插入图片描述

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

利用下图注解@Mapper,表示当前是访问mybatis的接口,此时框架会自动执行sql语句。并将sql语句封装到当前方法中。
在这里插入图片描述

创建项目时记得勾选mybatis的框架和mysql的驱动

在这里插入图片描述

可以看到SpringBoot自动帮我们引入了以下的依赖,包括
mybatis,mysql,和mybatis的启动测试依赖
在这里插入图片描述

编写用户类

对应数据库表单进行用户类的编写

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

    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Short getAge() {
        return age;
    }

    public void setAge(Short age) {
        this.age = age;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Short getGender() {
        return gender;
    }

    public void setGender(Short gender) {
        this.gender = gender;
    }
}

编写mabatis操作的接口

//在运行时会自动生成该接口的实现类对象,并交给IOC容器进行管理
@Mapper
public interface UserMapper {

    @Select("select * from User")
    public List<User> getUserList();
    //查询全部用户信息

}
编写测试
@SpringBootTest //springboot整合单元测试的注解
class MybatisPro1ApplicationTests {
    @Autowired //依赖注入注解
    private UserMapper mapper; //自动成为IOC容器的bean,根据依赖注入的方式

    @Test //表示一个单元测试,不加该注解springboot会找不到这个单元测试
    public void test(){
        List<User> l = mapper.getUserList(); //获取用户的集合元素

        l.stream()
                .forEach(System.out::println); //用Stream进行输出
    }
}

执行单元测试的结果:
在这里插入图片描述
成功查询到提前的数据库中插入的数据

记得定义toString方法,不然似乎会输出当前对象的地址

配置Sql提示

由于IDEA不会识别sql语句的语法错误,所以即便写错了也不会报错

1.选择切换数据源到mysql
在这里插入图片描述

2.配置mysql数据库的连接
在这里插入图片描述

JDBC

在这里插入图片描述
原始的JDBC
在这里插入图片描述
在这里插入图片描述
从链接池中获取连接,避免频繁的获取和释放,实现了连接的复用

数据库连接池

在这里插入图片描述
如果没有数据库连接池:
在这里插入图片描述

每一次都要开启一个连接,用完之后立刻关闭

在这里插入图片描述
用的时候从连接池中取用,用完之后归还给连接池。如果客户端获取了连接但是一致处于空闲状态,如果空闲时间超过了数据库中的预设时间,那么连接池会强制连接的归还

在这里插入图片描述
在这里插入图片描述
可以发现在查询的过程中,实际上是利用了Hikari连接池
在这里插入图片描述
查出来数据编程null是因为刚刚把查询语句改成了select name

切换连接池的方法
1.引入起步依赖
2.完成properties的配置
在这里插入图片描述
第二种方法:
在这里插入图片描述

小结

在这里插入图片描述

lombok

硬写实体类会导致代码的臃肿,可以直接利用lombok的注解进行缩减
在这里插入图片描述

常见的注解

在这里插入图片描述

引入依赖见 lombok学习

原理:在程序编译的时候,根据注解生成相应的方法

Mybatis基础操作

利用mybatis完成数据库的增删改查

预编译sql

在这里插入图片描述
在这里插入图片描述

sql注入

在这里插入图片描述
登录实际上就是查询操作
在这里插入图片描述

如果count(*)的结果大于0,那么就登陆成功了

在这里插入图片描述
输入如下错误的密码和账号也能登陆成功?

实际上通过注入完成了以下的sql语句,此语句判断永远为真,所以用户最终可以登录成功
在这里插入图片描述

通过预编译sql可以解决这个问题:

此外,可以通过如下方法查看mybatis语句执行的sql语句
在这里插入图片描述
在这里插入图片描述
把整个字符串作为一个参数传递给了password

参数占位符:

在这里插入图片描述

区别:

在这里插入图片描述

删除操作

其中#{}是mybatis提供的占位符,用于获取被注释的方法所传递的参数

@Delete("delete from emp where emp.id = #{id}")
    public Emp deleteEmpById(int id);
查询

在这里插入图片描述
查询完成后,我们发现有三个字符值没有封装
在这里插入图片描述
原因:
在这里插入图片描述
**方法一:**给字段起别名,让其与类中的属性一致
在这里插入图片描述

方法二通过mybatis的注解进行手动的映射和封装
在这里插入图片描述
方案三开启mybatis的驼峰命名自动映射开关
在这里插入图片描述

条件查询

在这里插入图片描述
在这里插入图片描述
错误 #{}不能写在‘ ’内,所以需要使用${}

解决方法二:利用函数concat(),直接对% 和 所传递的参数进行拼接
在这里插入图片描述
第一种方法不安全,存在sql注入问题

增加

直接传递一个类对象,然后对各个属性进行传递
在这里插入图片描述

新增(主键返回)

在这里插入图片描述
实现:

在这里插入图片描述

修改

在这里插入图片描述

一点小拓展:
在这里插入图片描述

xml映射文件

在这里插入图片描述

记得创建包时,使用‘/’而非.进行分隔

在这里插入图片描述
这里记得也要使用全类名

mybatis定位的方式:
在这里插入图片描述
插件:
在这里插入图片描述
在这里插入图片描述

装了插件之后,直接Alt+enter 好像也可以直接生成xml映射文件,这里因为创建过了所以提示没有给出来。
在这里插入图片描述

动态SQL

在这里插入图片描述

在这里插入图片描述

<if>标签

如果满足条件,就将对应的语句拼接到对应sql语句的后面

在这里插入图片描述

<where>标签

根据对应的条件判断是否需要生成 where 或者 是否需要去除语句前面的 and 或者 or
在这里插入图片描述

forEach标签

forEach的五个属性:
在这里插入图片描述
在这里插入图片描述

总结:

总结

<sql> <include>

如果写成这样,代码块过于臃肿,难以维护。
在这里插入图片描述
利用<sql>标签进行sql片段的抽取,并进行id的指定
在这里插入图片描述
根据对应的id,使用<include>标签进行引用
在这里插入图片描述

动态sql总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值