diff --git a/source/_posts/Mybatis基本介绍.md b/source/_posts/Mybatis基本介绍.md
new file mode 100644
index 0000000..a25bc15
--- /dev/null
+++ b/source/_posts/Mybatis基本介绍.md
@@ -0,0 +1,340 @@
+# Mybatis
+
+***
+
+## Maven引入Mybatis
+
+版本号最好去Maven Repository中查找
+
+```xml
+
+ 3.5.7
+
+
+
+ org.mybatis
+ mybatis
+ ${mybatis.version}
+
+
+```
+
+## Mybatis配置文件 *mybatis-config.xml*
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+## Springboot中 *application.yml*
+
+```yaml
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://localhost:3306/ssm?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+ username: root
+ password: 123456
+
+mybatis:
+ type-aliases-package: com.wyd.mybatis20210702.entity
+ mapper-locations: classpath*:/mapper/*.xml
+```
+
+
+## Mybatis interface *UserMapper*
+
+```java
+package com.wyd.mybatis20210702.dao;
+
+import com.wyd.mybatis20210702.entity.User;
+
+public interface UserMapper {
+ User selectUserById(Integer id);
+
+ int insertUser(User user);
+
+ int updateUser(User user);
+
+ int deleteUser(Integer id);
+}
+
+```
+
+每个Mapper接口都有对应的xml映射文件,如果idea安装有MybatisX插件可以单击类名 ALT+ENTER 快捷键即可创建对应xml映射文件
+
+映射文件夹一般命名为mapper 存放于resources文件夹下
+
+在Mapper接口每声明一个方法可以通过MybatisX创建对应的映射,但命名需遵循一定规范,否则需自己选择crud
+
+## Mybatis xml映射文件 ***UserMapper.xml***
+
+```xml
+
+
+
+
+
+
+ insert into user (username,password) values (#{username},#{password})
+
+
+
+ update user set username = #{username},password = #{password},birthday = #{birthday} where id = #{id}
+
+
+
+ delete from user where id = #{id}
+
+
+```
+
+可以发现xml映射文件头跟mybatis-config.xml配置文件头很像
+
+就有一个单词不同
+
+一个是config 一个是mapper,这决定了这个xml文件可以写什么语句
+
+每个参数都接#{},{}里就写接口中的参数名
+
+重点来了
+
+### #{}和${}的区别
+
+学过jdbc知道有Statement和PreparedStatement
+
+一个是固定好的sql语句,一个是预处理语句
+
+PreparedStatement #{}就很像 ? 后面接参数名,这就很好地防止了 Sql Injection 也就是sql'注入
+
+我这些sql语句都没有写${}就是因为防止sql注入,开发时严谨使用
+
+1、Statement和PreparedStatement区别是一样
+2、#代表使用的底层是PreparedStatement。占位符的写法,预加载
+3、$代表使用的底层是Statement。字符串的拼接的写法。SQL注入
+
+那么什么时候使用${}呢?最多的是模糊查询,但是也不推荐这样用
+
+```xml
+
+```
+
+为了拼接上参数就必须使用${}来固化sql
+
+应该在Java代码上来实现模糊查询
+
+```java
+String username = ;
+if(username != null && !"".equals(username.trim())){
+ username = "%" + username + "%";
+ }else{
+ username = "%%";
+}
+```
+
+这样就可以避免sql注入
+
+---
+
+resultType 就是 返回的数据类型,有点儿Java方法中的return 不过这是返回的类型而不是变量名
+
+parameterType 就是参数类型,实体类要写包名类名
+
+而Java基本数据类型,比如int就直接写int就行了,引用数据类型比如Integer,String 要把首字目小写,integer,string,这是因为用到了别名,也可以像实体类一样写java.lang.Integer,java.lang.String
+
+## Mybatis xml映射文件特性
+
+动态sql
+
+应用场景,条件查询
+
+```xml
+
+```
+
+标签可动态拼接条件,如果where后条件字段都为null,则where以及后面语句都不会拼接
+
+标签则相当于if判断,test等于约束条件,需要注意的是其中只要写字段名即可
+
+---
+
+```xml
+
+```
+
+标签有点像Java中的switch语句,其中的标签则向当于case,但这个case中是带有break的,也就是说每满足一个条件则此标签后续语句都不会执行,有一点需要说的是中可以有多个,满足一个则会跳出这个标签,继续执行后续语句,如果都不满足,如果有标签,则会执行,这有点儿像default语句了
+
+---
+
+```xml
+
+```
+
+这个例子中,标签中的**prefix**属性会使*where* 元素会动态地在行首插入 where关键字,**prefixOverrides**属性会删掉额外的and(这些and是在使用条件语句给列赋值时引入的)
+
+如果都不满足则不会插入where关键字
+
+---
+
+Update同样适用动态sql
+
+```xml
+
+ update user
+
+
+ username = #{username}
+
+
+ ,password = #{password}
+
+ where id = #{id}
+
+
+```
+
+这个例子中,*set* 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)。
+
+也相当于上面标签
+
+```xml
+
+
+ username = #{username}
+
+
+ ,password = #{password}
+
+ where id = #{id}
+
+```
+
+动态 SQL 的另一个常见使用场景是对集合进行遍历
+
+
+Mapper接口
+
+```java
+List selectUserByIds(@Param("ids") List ids);
+```
+
+这里需要注意的是@Param注解必须加上,Mybatis内部解析参数时,会把接口中的方法形参列表当作一个Map
+当参数不是一个时,key是arg0,arg1,...或param1,param2,...
+```xml
+
+```
+
+这里看到标签不要慌,这是引入公共sql语句,很像Java中的引包,多用于重复的sql语句,减少代码量,增加简洁性
+
+```xml
+
+ select id,username,password,birthday from user
+
+```
+
+使用标签来定义公共sql,其中**id**属性是这个公共sql独有的命名,切忌命名不能重复
+
+引用就看上面的集合遍历实例
+
+再继续看集合遍历实例
+
+先把想要生成的sql语句写上
+
+select id,username,password,birthday from user where id in(1,2,3,5)
+
+看到in了吧,这是包含,意思是查询id 是1,2,3,5符合条件的行
+
+相当于 id = 1 or id =2 or id = 3 or id = 5
+
+这里用到了标签是不是很熟悉,确实很像JavaScript中的forEach,这个标签中**collection**属性就是需要遍历的对象名,
+
+那么后面的**open**和**close**属性是干啥的,顾名思义,前者相当于前缀suffix,后者就是后缀了presuffix了,相当于这个标签最终生成的sql语句前后都有(),**separator**属性每遍历出一个元素就会在元素后加上逗号最后的元素不加,**item**属性就是生成sql语句参数名
+
+也就是往#{id}中传值
\ No newline at end of file