MySQL-Mybatis入门

1、什么叫做笛卡尔积?笛卡尔积后所有结果都是有效的么?怎么去除无效数据?

什么叫做笛卡尔积?

笛卡尔积是指在数学中,两个集合,A集合 和 B集合的所有组合情况。

笛卡尔积后所有结果都是有效的么?

并不是所有结果都是有效的,在多表查询中,我们是需要消除无效的笛卡尔积,只保留两张表关联部分的数据。

怎么去除无效数据?

给多表查询加上连接查询的条件即可。

select * from emp , dept where emp.dept_id = dept.id;

​2、多表查询有几种方式?各自什么含义? ​

连接查询

内连接

  • 隐式内连接:使用where子句来指定连接条件

  • 显式内连接:使用join关键字来指定连接条件

外连接

  • 左外连接:查询左表所有数据,以及两张表交集部分数据
  • 右外连接:查询右表所有数据,以及两张表交集部分数据

自连接当前表与自身的连接查询,自连接必须使用表别名

子查询:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

根据子查询结果不同,分为:

A. 标量子查询(子查询结果为单个值)

B. 列子查询(子查询结果为一列)

C. 行子查询(子查询结果为一行)

D. 表子查询(子查询结果为多行多列)

​3、事务是什么?举例说明 ​

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

举例子:

比如学生部解散了,要删除部门及部门以下的员工, 如果删除部门成功了,而删除该部门的员工时失败了,此时就造成了数据的不一致。 要解决上述的问题,就需要通过数据库中的事务来解决。 此时只需要在业务逻辑执行之前开启事务,执行完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态。

4、MySQL默认事务是怎么提交的?

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句时,MySQL会立即隐式的提交事务

如果需要显式地控制事务的提交,可以使用start transaction 或 begin语句来开始一个事务,并使用commit语句来手动提交事务。同时,可以使用rollback语句来回滚事务,撤销已经执行的操作。

需要注意的是,如果在一个事务中执行了start transaction 或 begin语句,但没有显式地执行commit或rollback语句,那么事务将会在会话结束时自动回滚。这是因为MySQL默认使用的是自动提交模式,如果没有显式地提交或回滚事务,系统会自动回滚以保持数据的一致性。

如果需要关闭自动提交模式,可以使用set autocommit = 0语句来禁用自动提交,然后使用commit或rollback语句来手动控制事务的提交或回滚。

​5、如何自己开启事务,提交事务,回滚事务?

命令介绍
start transaction 或 begin开启事务
commit提交事务 (成功时执行)
rollback回滚事务 (出错时执行)

例如

-- 开启事务
start transaction ;

-- 删除学工部
delete from dept where id = 1;

-- 删除学工部的员工
delete from emp2 where dept_id = 1;

-- 提交事务 (成功时执行)
commit ;

-- 回滚事务 (出错时执行)
rollback ;

​6、事务的四大特性是什么含义? ​

【重点】事务的四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

7、MyBatis是什么,作用是什么?

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

MyBatis的作用主要有以下几个方面

  • 数据库访问
  • 对象映射
  • 缓存管理
  • 事务管理

​8、如果要创建一个SpringBoot项目要处理数据库数据需要哪些依赖?

  • Spring Boot Starter依赖:这是Spring Boot的核心依赖,包含了Spring Boot的基本功能和自动配置。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • Spring Boot JDBC依赖:这个依赖提供了与数据库进行交互的功能,包括连接数据库、执行SQL语句等。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • 数据库驱动依赖:根据你要使用的数据库类型,需要添加相应的数据库驱动依赖。
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
  • 如果我们想把默认的数据库连接池切换为 Druid 数据库链接
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

​9、简要描述我们如何创建一个SpringBoot项目支持MyBatis操作?

模拟需求:查询所有用户数据

①创建模块

创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。

②数据准备

创建用户表user,创建对应的实体类 User。

# 用户表
create table user(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(100) comment '姓名',
    age tinyint unsigned comment '年龄',
    gender tinyint unsigned comment '性别, 1:男, 2:女',
    phone varchar(11) comment '手机号'
) comment '用户表';

insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
//实体类

public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
    
    //省略GET, SET方法
}

③配置

配置数据库连接信息

#驱动类名称
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=1234

④持久层接口

创建一个接口 UserMapper 。

@Mapper
public interface UserMapper {
    @Select("select * from user")
    public List<User> list();
}

⑤测试

在创建出来的SpringBoot工程中,已经自动帮我们创建好了测试类要测试那个bean对象,直接通过@Autowired注解直接将其注入进行,就可以测试了。

@SpringBootTest
class Day09MySqlMybatisApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        List<User> list = userMapper.list();
        list.forEach(System.out::println);
    }
}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笑看夕阳染红天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值