diff --git "a/08 \345\256\230\346\226\207\350\257\232/20231219 Maven\347\254\224\350\256\260.md" "b/08 \345\256\230\346\226\207\350\257\232/20231219 Maven\347\254\224\350\256\260.md"
new file mode 100644
index 0000000000000000000000000000000000000000..0d531b85e37dafd8c94730779d4814105985fc1a
--- /dev/null
+++ "b/08 \345\256\230\346\226\207\350\257\232/20231219 Maven\347\254\224\350\256\260.md"
@@ -0,0 +1,93 @@
+## 笔记
+
+### Maven
+
+```
+Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
+
+提供了一套标准化的项目结构
+
+提供了一套标准化的构建流程(编译,测试,打包,发布……)
+
+提供了一套依赖管理机制
+
+
+仓库分类:
+本地仓库:自己计算机上的一个目录
+
+中央仓库:由Maven团队维护的全球唯一的仓库
+
+地址: https://repo1.maven.org/maven2/
+
+远程仓库(私服):一般由公司团队搭建的私有仓库,国内镜像也是远程仓库的一种
+当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar
+包:
+如果有,则在项目直接引用;
+
+如果没有,则去中央仓库中下载对应的jar包到本地仓库。
+
+
+Maven 坐标详解
+
+什么是坐标?
+Maven 中的坐标是==资源的唯一标识==
+使用坐标来定义项目或引入项目中需要的依赖
+
+Maven 坐标主要组成
+groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:
+com.mdd)
+artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、
+goods-service)
+version:定义当前项目版本号
+
+
+使用坐标引入jar包
+使用坐标引入jar包的步骤:
+
+在项目的 pom.xml 中编写 标签
+在 标签中 使用 引入坐标
+定义坐标的 groupId,artifactId,version
+点击刷新按钮,使坐标生效
+
+
+依赖范围
+通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试
+环境、运行环境。
+如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就
+只能作用在测试环境,其他环境下不能使用。
+
+compile :作用于编译环境、测试环境、运行环境。
+test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope
+指定为该值
+provided :作用于编译环境、测试环境。我们后面会学习 servlet-api ,在使
+用它时,必须将 scope 设置为该值,不然运行时就会报错
+runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,
+当然不设置也没有任何问题
+注意:
+如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分
+jar包都是使用默认值。
+```
+
+## 作业
+
+```java
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+import org.junit.Test;
+
+public class APP {
+ @Test
+ public void test01(){
+ System.out.println(999);
+ }
+ @Test
+ public void test02(){
+ System.out.println("11111");
+ }
+}
\ No newline at end of file
diff --git "a/08 \345\256\230\346\226\207\350\257\232/20231220 Mybatis\347\254\224\350\256\260.md" "b/08 \345\256\230\346\226\207\350\257\232/20231220 Mybatis\347\254\224\350\256\260.md"
new file mode 100644
index 0000000000000000000000000000000000000000..75fd67946efa24b871caa51fecd96981d5209c61
--- /dev/null
+++ "b/08 \345\256\230\346\226\207\350\257\232/20231220 Mybatis\347\254\224\350\256\260.md"
@@ -0,0 +1,222 @@
+## 笔记
+
+### Mybatis 概念
+
+- MyBatis 是一款优秀的==持久层框架==,用于简化 JDBC 开发
+
+- MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github
+
+- 官网:https://mybatis.org/mybatis-3/zh/index.html
+
+**持久层:**
+
+- 负责将数据到保存到数据库的那一层代码。以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
+
+- JavaEE三层架构:表现层、业务层、持久层
+
+三层架构在后期会给大家进行讲解,今天先简单的了解下即可。
+
+**框架:**
+
+- 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
+
+- 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
+
+### **JDBC** 缺点
+
+- 硬编码,耦合度高(注册驱动、获取连接、SQL语句,不方便后期维护)
+
+- 操作繁琐(手动设置参数,手动封装结果集,没有什么技术含量,而且特别耗费时间的)
+
+### Mybatis 优化
+
+- 硬编码可以配置到==配置文件==
+
+- 操作繁琐的地方mybatis都==自动完成==
+
+### 几个概念:
+
+1. 文档官网:https://mybatis.org/mybatis-3/zh_CN/index.html 或 http://mybatis.net.cn
+
+2. 核心配置文件:mybatis-config.xml
+
+3. SQL 映射文件:xxMapper.xml --> 统一管理sql语句,解决硬编码问题
+
+
+
+## 作业
+
+#### 导入坐标
+
+~~~xml
+
+
+
+ com.mysql
+ mysql-connector-j
+ 8.1.0
+
+
+
+ org.mybatis
+ mybatis
+ 3.5.13
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+
+~~~
+
+#### 编写 MyBatis 核心配置文件 -- > 替换连接信息
+
+~~~ xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+~~~
+
+#### 编写 SQL 映射文件 --> 统一管理sql语句
+
+~~~ xml
+
+
+
+
+
+
+
+ insert into db_user(name,age,gender) value(#{name},#{age},#{gender})
+
+
+
+ delete from db_user where id = #{id}
+
+
+
+ update db_user set name = #{name},age = #{age},gender = #{gender} where id = #{id}
+
+
+~~~
+
+#### 编写测试类
+
+~~~ java
+package com.mdd;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+public class TestUser {
+
+ private SqlSessionFactory getSqlSessionFactory() throws IOException {
+ String resource = "mybatis-config.xml";
+ InputStream inputStream = Resources.getResourceAsStream(resource);
+ SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
+ return sqlSessionFactory;
+ }
+
+ @Test
+ public void testSelectAll() throws IOException {
+ // 获取 sqlSessionFactory 对象
+ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
+ // 获取执行 sql 的对象
+ SqlSession sqlSession = sqlSessionFactory.openSession(true);
+ List list = sqlSession.selectList("test.selectAll");
+
+ System.out.println(list);
+ // 释放资源
+ sqlSession.close();
+
+ }
+
+ // 增
+ @Test
+ public void testInsert() throws IOException {
+ // 获取 sqlSessionFactory 对象
+ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
+ // 获取执行 sql 的对象
+ SqlSession sqlSession = sqlSessionFactory.openSession(true);
+ // 创建一个对象
+ User user = new User();
+ user.setName("老八");
+ user.setAge(18);
+ user.setGender("男");
+
+ sqlSession.insert("test.insert",user);
+ System.out.println("添加成功!");
+ // 释放资源
+ sqlSession.close();
+
+ }
+
+ // 删
+ @Test
+ public void testDelete() throws IOException {
+ // 获取 sqlSessionFactory 对象
+ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
+ // 获取执行 sql 的对象
+ SqlSession sqlSession = sqlSessionFactory.openSession(true);
+
+ sqlSession.delete("test.delete",5);
+ System.out.println("删除成功!");
+ // 释放资源
+ sqlSession.close();
+ }
+
+ // 改
+ @Test
+ public void testUpdate() throws IOException {
+ // 获取 sqlSessionFactory 对象
+ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
+ // 获取执行 sql 的对象
+ SqlSession sqlSession = sqlSessionFactory.openSession(true);
+
+ // 创建一个对象
+ User user = new User();
+ user.setId(6);
+ user.setName("小七");
+ user.setAge(20);
+ user.setGender("女");
+
+ sqlSession.delete("test.update",user);
+ System.out.println("修改成功!");
+ // 释放资源
+ sqlSession.close();
+ }
+}
\ No newline at end of file
diff --git "a/08 \345\256\230\346\226\207\350\257\232/20231225 Mybatis\345\242\236\345\210\240\346\224\271\346\237\245.md" "b/08 \345\256\230\346\226\207\350\257\232/20231225 Mybatis\345\242\236\345\210\240\346\224\271\346\237\245.md"
new file mode 100644
index 0000000000000000000000000000000000000000..19da4a74aac151cd665259a5553477df50bbc4b5
--- /dev/null
+++ "b/08 \345\256\230\346\226\207\350\257\232/20231225 Mybatis\345\242\236\345\210\240\346\224\271\346\237\245.md"
@@ -0,0 +1,486 @@
+### 笔记
+
+使用Mapper代理方式,必须满足以下要求:
+1.定义与SQL映射文件同名的Mapper接口,
+2.在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持
+参数类型和返回值类型一致
+
+# 作业
+
+创建实体类
+
+```java
+public class User {
+ private Integer id;
+ private String username;
+ private String password;
+ private String email;
+ private String phone;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public User() {
+ }
+
+ public User(Integer id, String username, String password, String email, String phone) {
+ this.id = id;
+ this.username = username;
+ this.password = password;
+ this.email = email;
+ this.phone = phone;
+ }
+ @Override
+ public String toString() {
+ return "User{" +
+ "id=" + id +
+ ", username='" + username + '\'' +
+ ", password='" + password + '\'' +
+ ", email='" + email + '\'' +
+ ", phone='" + phone + '\'' +
+ '}';
+ }
+
+}
+
+
+```
+
+创建maven项目
+
+```java
+
+
+ 4.0.0
+
+ org.example
+ mybatis
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 1.9
+ 1.9
+
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.19
+
+
+
+ org.mybatis
+ mybatis
+ 3.5.4
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ RELEASE
+ compile
+
+
+
+
+
+
+
+
+
+
+ src/main/java
+
+ **/*.properties
+ **/*.xml
+
+ false
+
+
+
+
+
+
+```
+
+mybatis配置文件
+
+```java
+
+
+
+
+
+
+
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+mybatis工具类
+
+```java
+public class MyBatisUtils {
+
+ private static SqlSessionFactory factory = null;
+
+ static {
+ //读取mybatis.xml配置文件
+ String config="mybatis.xml";
+ try {
+ //将配置文件加入到流中
+ InputStream in = Resources.getResourceAsStream(config);
+ //创建factory对象
+ factory = new SqlSessionFactoryBuilder().build(in);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+
+ }
+ public static SqlSession getSqlSession(){
+ SqlSession sqlSession = null;
+ if (factory!=null){
+ //如果 factory!=null 就创建 sqlSession对象
+ sqlSession = factory.openSession(false);//非自动提交事务
+ }
+
+ return sqlSession;
+ }
+}
+
+```
+
+接口
+
+```java
+public interface UserManagerDao {
+
+ /**
+ * 查询所有的数据 用于视图展示
+ * @return 返回一个List集合
+ */
+ public List queryUser();
+
+
+ /**
+ * 添加
+ * @param user 一个user对象
+ * @return 成功返回true 失败返回false
+ */
+ public Boolean addUser(User user);
+
+ /**
+ * 删除用户
+ * @param id 需要删除的用户id
+ * @return 成功返回true 失败返回false
+ */
+ public Boolean delUser(String id);
+
+ /**
+ * 修改用户信息
+ * @param user 需要一个user对象
+ * @return 成功返回true 失败返回false
+ */
+ public Boolean updateUser(User user);
+
+ /**
+ * 按照用户名查找用户
+ * @param name 需要查找的用户名
+ * @return 返回一个List集合
+ */
+ public List likeUser(String name);
+
+
+
+}
+
+```
+
+xml文件
+
+```java
+
+
+
+
+
+
+
+
+
+ insert into t_user values(#{id},#{username},#{username},#{email},#{phone})
+
+
+
+ delete from t_user where id=#{id}
+
+
+
+ update t_user set username=#{username},password=#{password},email=#{email},phone=#{phone} where id=#{id}
+
+
+
+
+```
+
+daoImpl
+
+```java
+
+public class UserManagerDaoImpl implements UserManagerDao {
+
+ /**
+ * 查询所有的数据 用于视图展示
+ *
+ * @return 返回一个List集合
+ */
+ @Override
+ public List queryUser() {
+ //获取sqlSession对象
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ String sqlId = "com.mybatis.dao.UserManagerDao.queryUser";
+ //执行sql语句
+ List userList = sqlSession.selectList(sqlId);
+ // sqlSession.commit(); //mybatis默认不会手动提交事务,在修改数据之后要 提交事务
+ //关闭连接
+ sqlSession.close();
+ return userList;
+ }
+
+
+ /**
+ * 添加
+ *
+ * @param user 一个user对象
+ * @return 成功返回true 失败返回false
+ */
+ @Override
+ public Boolean addUser(User user) {
+ //获取sqlSession对象
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ String sqlId = "com.mybatis.dao.UserManagerDao.addUser";
+ //执行sql语句
+ int updateCount = sqlSession.update(sqlId,user);
+ sqlSession.commit(); //mybatis默认不会手动提交事务,在修改数据之后要 提交事务
+ //关闭连接
+ sqlSession.close();
+ if(updateCount>0){
+ return true;
+ }else{
+ return false;
+ }
+
+ }
+
+ /**
+ * 删除用户
+ *
+ * @param id 需要删除的用户id
+ * @return 成功返回true 失败返回false
+ */
+ @Override
+ public Boolean delUser(String id) {
+ //获取sqlSession对象
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ String sqlId = "com.mybatis.dao.UserManagerDao.delUser";
+ //执行sql语句
+ int delete = sqlSession.delete(sqlId, id);
+ sqlSession.commit(); //设置为自动提交事务
+ //关闭连接
+ sqlSession.close();
+ if(delete>0){
+ return true;
+ }else {
+ return false;
+ }
+
+ }
+
+ /**
+ * 修改用户信息
+ *
+ * @param user 需要一个user对象
+ * @return 成功返回true 失败返回false
+ */
+ @Override
+ public Boolean updateUser(User user) {
+ //获取sqlSession对象
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ String sqlId = "com.mybatis.dao.UserManagerDao.updateUser";
+ //执行sql语句
+ int updateCount = sqlSession.update(sqlId,user);
+ sqlSession.commit(); //设置为自动提交事务
+ //关闭连接
+ sqlSession.close();
+ if(updateCount>0){
+ return true;
+ }else {
+ return false;
+ }
+
+ }
+
+ /**
+ * 按照用户名查找用户
+ *
+ * @param name 需要查找的用户名
+ * @return 返回一个List集合
+ */
+ @Override
+ public List likeUser(String name) {
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ String sqlId = "com.mybatis.dao.UserManagerDao.likeUser";
+ List userList = sqlSession.selectList(sqlId, name);
+ sqlSession.commit();
+ //关闭连接
+ sqlSession.close();
+ return userList;
+ }
+}
+
+```
+
+Test类
+
+```
+
+```java
+class UserManagerDaoImplTest {
+
+ UserManagerDaoImpl userManagerDao = new UserManagerDaoImpl();
+
+ @Test
+ void queryUser() {
+ List userList = userManagerDao.queryUser();
+ for (User user : userList) {
+ System.out.println(user);
+ }
+ }
+ @Test
+ void ListUser() {
+
+ SqlSession sqlSession = MyBatisUtils.getSqlSession();
+ UserManagerDao userDao = sqlSession.getMapper(UserManagerDao.class);
+ List userList = userDao.queryUser();
+ for (User user : userList) {
+ System.out.println(user);
+ }
+ }
+
+ @Test
+ void addUser() {
+ User user = new User(null,"admin","root","root@qq.com","1008644");
+ Boolean flag = userManagerDao.addUser(user);
+ System.out.println(flag);
+
+ }
+
+ @Test
+ void delUser() {
+ Boolean flag = userManagerDao.delUser("23");
+ System.out.println(flag);
+ }
+
+ @Test
+ void updateUser() {
+ User user = new User(19,"admin2","root2","root@qq.com2","1008644");
+ Boolean flag = userManagerDao.updateUser(user);
+ System.out.println(flag);
+ }
+
+ @Test
+ void likeUser() {
+ List userList = userManagerDao.likeUser("admin");
+ for (User user : userList) {
+ System.out.println(user);
+ }
+ }
+}