diff --git a/张博凯的Java学习笔记.md b/张博凯的Java学习笔记.md
index 11fca10..1339caa 100644
--- a/张博凯的Java学习笔记.md
+++ b/张博凯的Java学习笔记.md
@@ -501,6 +501,80 @@ pom.xml中添加 `war` ,如下:
+#### 创建SpringIOC Maven项目
+
+
+
+##### 创建项目
+
+
+
+
+
+
+##### 添加依赖
+
+###### 添加Spring依赖
+
+core(核心依赖)、beans(组件)、aop(AOP处理)、context(context组件)
+
+
+
+Spring Context
+
+https://mvnrepository.com/artifact/org.springframework/spring-context/5.2.19.RELEASE
+
+```xml
+
+
+ org.springframework
+ spring-context
+ 5.2.19.RELEASE
+
+```
+
+导入Spring Context依赖相当于同时导入了 `pring-aop`,`spring-beans`,`spring-core`,`spring-expression` 依赖,所以**只需要导入Spring Context即可**
+
+
+
+###### 添加lombok依赖
+
+[传送门](#Lombok依赖)
+
+
+
+##### 创建Spring核心配置文件
+
+
+
+> Spring核心配置文件“告诉Spring容器创建什么对象”,给对象属性赋什么值
+
+在resources目录下创建applicationContext.xml文件(备注:名称可以自定义,但是建议一般使用applicationContext.xml)
+
+
+
+> 第一次需要新建模板,如图
+>
+> 
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+```
+
+
+
+
+
+
+
### 连接数据库
##### IDEA连接MySQL
@@ -793,7 +867,9 @@ redis
首先创建Maven项目(Maven普通或Mavenweb)
-添加Maven依赖(目前官网最新版是3.5.9)
+
+
+添加mybatis依赖(目前官网最新版是3.5.9)
https://mvnrepository.com/artifact/org.mybatis/mybatis
@@ -1156,10 +1232,12 @@ src/main/resources/mybatis-config.xml
##### 单元测试
-> junit单元测试
+> JUnit单元测试
###### 添加单元测试的依赖
+
+
https://mvnrepository.com/artifact/junit/junit/4.12
```xml
@@ -1543,6 +1621,8 @@ https://mvnrepository.com/artifact/log4j/log4j/1.2.17
##### 导入log4j.propertites文件
+ [log4j.properties](张博凯的Java学习笔记.assets\file\log4j.properties)
+
src/main/resources/log4j.properties
```
@@ -1732,9 +1812,9 @@ src/main/resources/mappers/UserMapper.xml
>
> ```xml
>
->
->
->
+>
+>
+>
>
> ```
@@ -1898,10 +1978,10 @@ src/main/resources/mappers/ClassesMapper.xml
>
> ```xml
>
->
->
->
->
+>
+>
+>
+>
>
> ```
@@ -2039,10 +2119,10 @@ src/main/resources/mappers/StudentMapper.xml
>
> ```xml
>
->
->
->
->
+>
+>
+>
+>
>
> ```
@@ -2073,9 +2153,9 @@ for(Student student:students) {
> # 三张表联合查询 inner join on
>
> select * from student s inner join grades g inner join course c on
-> s.sid=g.sid and g.course_id=c.course_id
+> s.sid=g.sid and g.course_id=c.course_id;
>
-> select * from student s,grades g,course c where s.sid=g.sid and g.course_id=c.course_id
+> select * from student s,grades g,course c where s.sid=g.sid and g.course_id=c.course_id;
> ```
###### 数据库表设计
@@ -2112,12 +2192,383 @@ CREATE TABLE `grades` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
```
+###### 创建实体类
+学生类
+
+src/main/java/org/example/entity/Student.java
+
+```java
+package org.example.entity;
+
+import lombok.Data;
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Student {
+ private int sid;
+ private String sname;
+ private int sage;
+ private List list; // 多个课程
+}
+```
+
+课程类
+
+src/main/java/org/example/entity/Course.java
+
+```java
+package org.example.entity;
+
+import lombok.Data;
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Course {
+ private int courseId;
+ private String courseName;
+}
+```
+
+###### mapper接口
+
+src/main/java/org/example/dao/ClassesMapper.java
+
+```java
+package org.example.dao;
+
+import org.example.entity.Student;
+
+import java.util.List;
+
+/**
+ * 接口
+ */
+public interface StudentMapper {
+ /**
+ * 查询学生对应的班级
+ * @return
+ */
+ public List showStu();
+}
+```
+
+###### mapper.xml文件
+
+src/main/resources/mappers/StudentMapper.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+> 记得在mybatis-config.xml中配置 ``
+>
+> ```xml
+>
+>
+>
+>
+>
+> ```
+
+###### 测试类
+
+src/test/java/org/example/test/StudentTest.java
+
+```java
+...
+StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
+List students = mapper.showStu();
+for(Student student:students) {
+ System.out.println(student.getSName() + "\t" + "对应班级:" + student.getClasses());
+}
+...
+```
+
+
+
+##### 总结
+
+1. 在多的一方添加集合,一的一方添加对象。
+
+2. 如果实体类中的属性与数据库的字段名不一致时,mapper文件中选择resultmap映射
#### 动态SQL
+##### 什么是动态SQL
+
+> 根据查询条件动态完成SQL拼接
+
+###### 创建数据库表
+
+```SQL
+CREATE TABLE `member` (
+ `member_id` int(11) NOT NULL AUTO_INCREMENT,
+ `member_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `member_age` int(255) DEFAULT NULL,
+ `member_city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ PRIMARY KEY (`member_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+```
+
+###### 创建实体类
+
+src/main/java/org/example/entity/Member.java
+
+```java
+package org.example.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Member {
+ private int memberId;
+ private String memberName;
+ private int memberAge;
+ private String memberCity;
+}
+```
+
+###### mapper接口
+
+src/main/java/org/example/mapper/MemberMapper.java
+
+```java
+package org.example.mapper;
+
+import org.example.entity.Member;
+
+import java.util.List;
+
+public interface MemberMapper {
+ /**
+ * 通过指定条件进行查询
+ * 1. 通过名称查新
+ * 2. 通过年龄查询
+ * 3. 通过城市查询
+ * @param member
+ * @return
+ */
+ public List showMember(Member member);
+
+ /**
+ * 修改
+ * @param member
+ * @return
+ */
+ public int updateMember(Member member);
+}
+```
+
+###### mapper.xml文件
+
+> if, where, trim, set
+
+src/main/resources/mappers/MemberMapper.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update member
+
+
+ member_name=#{memberName}
+
+
+ member_city=#{memberCity}
+
+
+ member_id=#{memberId}
+
+
+
+
+```
+
+> 记得在mybatis-config.xml中配置 ``
+>
+> ```xml
+>
+>
+>
+>
+>
+> ```
+
+###### 测试类
+
+src/test/java/org/example/test/MemberTest.java
+
+```java
+...
+// 条件查询
+MemberMapper mapper = sqlSession.getMapper(MemberMapper.class);
+Member member = new Member();
+member.setMemberName("admin");
+List members = mapper.showMember(member);
+for (Member member1 : members) {
+ System.out.println(member1);
+}
+...
+```
+
+```java
+...
+// 修改
+MemberMapper mapper = sqlSession.getMapper(MemberMapper.class);
+Member member = new Member();
+member.setMemberName("tom");
+member.setMemberId(1);
+int i = mapper.updateMember(member);
+sqlSession.commit();
+System.out.println(i);
+...
+```
+
+
+
+#### MyBatis逆向生成
+
+>MyBatis的快速生成实体类、mapper接口、mapper.xml文件
+
+附件: [generator.zip](张博凯的Java学习笔记.assets\file\generator.zip) (放在D盘根目录下:`D:\generator`)
+
+首先修改 `generator.xml` 配置文件
+
+然后使用cmd命令
+
+```
+# 1. 切换所在路径
+D:
+cd generator
+
+# 2.
+java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
+```
+
+> [生成文件]
+>
+> 1. 实体类 (pojo/User.java)
+>
+> > 生成的接口文件不含注解
+>
+> 2. Mapper (mapper/UserMapper.java)
+>
+> > deleteByPrimaryKey通过主键删除
+> >
+> > insert是添加,insertSelective是选择性添加(前者需要指定每一个字段的值)
+> >
+> > selectByPrimaryKey通过主键查询
+> >
+> > updateByPrimaryKey是通过主键修改,updateByPrimaryKeySelective是通过主键选择性修改(前者是修改所有字段)
+>
+> 3. (mapper/UserMapper.xml)
+>
+> > `` 中 `` 的jdbcType属性可以删除;
+> >
+> > `` 是公共SQL片段
+> >
+> > `#{xxx,jdbcType=xxx}` 中 `,jdbcType=xxx` 可以省略
+>
+> 想要生成多个表`generator.xml` 配置文件中就多复制几个 `` 标签
+
+> Integer是int类型(Integer是int的包装类,Integer效率比int高)
+
+> 抽象方法的语法:访问修饰符 abstract 返回值类型 方法名称();
+>
+> public abstract int xxxx(Integer xxx); // public abstract 可省略
+
### Spring框架
@@ -2125,6 +2576,956 @@ CREATE TABLE `grades` (
> 胶水框架(主要跟其他框架结合)
>
> Spring全家桶(SpringMVC,Springboot,Spring Cloud)
+>
+> - Spring Boot 简化SSM
+> - Spring Framework Spring核心(IOC AOP)
+> - Spring Cloud、Spring Cloud Data Flow 微服务架构
+> - Spring Data 数据验证(Spring提供的数据访问的客户端)
+> - Spring Security 权限验证(安全框架)类似框架:shiro
+
+官网:https://spring.io/
+
+
+
+> Spring是一个**轻量级的控制反转和面向切面编程**框架,用来解决企业项目开发的复杂问题
+>
+> 特点:
+>
+> - 轻量级,体积小,对代码没有侵入性
+>
+> - 控制反转IOC:把创建对象的工作交给Spring容器来完成
+> - 依赖注入DI:Spring在创建对象的时候给对象的属性赋值
+> - 面向切面编程AOP:做事务管理,可以在不改变原有业务逻辑的基础上实现对业务的增强
+> - 容器:管理
+
+Spring相关依赖:https://mvnrepository.com/search?q=spring
+
+> 1. Spring Context
+>
+> 2. Spring Core
+>
+> 3. Spring Web
+>
+> 做Web应用的
+>
+> 4. Spring Beans
+>
+> Beans组件
+>
+> 5. Spring Web MVC
+>
+> 6. Spring TestContext Framework
+>
+> 7. Spring AOP
+>
+> 事务处理
+>
+> 8. Spring Object/Relational Mapping
+>
+> 9. Spring Framework
+>
+> 
+
+
+
+#### Spring IOC和DI的使用
+
+> IOC:控制反转,可以完成对象的创建
+>
+> DI:对象属性赋值,对象管理
+
+##### Spring IOC基于XML
+
+###### 创建SpringIOC Maven项目
+
+[创建SpringIOC Maven项目](#创建SpringIOC_Maven项目)
+
+
+
+###### 创建实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+package org.example.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class User {
+ private int id;
+ private String name;
+ private int age;
+ private String address;
+}
+```
+
+
+
+**使用Spring之间**
+
+src/test/java/org/example/test/UserTest.java
+
+```java
+package org.example.test;
+
+import org.example.entity.User;
+
+public class UserTest {
+ public static void main(String[] args) {
+ // 创建对象
+ User user = new User();
+
+ // 对象赋值
+ user.setName("aa");
+ user.setId(1);
+ }
+}
+```
+
+**使用Spring后**
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+###### 初始化Spring对象工厂,进行测试
+
+src/test/java/org/example/test/UserTest.java
+
+```java
+package org.example.test;
+
+import org.example.entity.User;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class UserTest {
+ public static void main(String[] args) {
+ // 加载Spring的核心配置文件
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
+ // 通过Spring容器来获取对象
+ User user = (User) context.getBean("user");
+ System.out.println(user);
+ }
+}
+```
+
+
+
+##### DI依赖注入
+
+> DI:给对象的属性赋值,Spring容器加载配置文件之后,通过**反射**创建累的对象,并给属性赋值。
+>
+> Spring容器通过反射实现注入有三种方式:
+>
+> - set方法注入(用的较多)
+> - 构造器注入
+> - 接口注入(不常用)
+
+###### set注入
+
+>在bean标签中通过property标签给属性赋值,实际上是通过set方式完成属性注入的
+
+**简单类型及字符串**
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+```
+
+
+
+**自定义对象类型**
+
+假设有两个实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+public class User {
+ private int id;
+ private String name;
+ private int age;
+ private String address;
+ private Book book;
+}
+```
+
+src/main/java/org/example/entity/Book.java
+
+```java
+public class Book {
+ private int bookId;
+ private String bookName;
+ private String author;
+}
+```
+
+方式1:在property标签中通过ref引用Spring容器中的另一个对象
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+方式2:在property标签中,添加字标签bean来指定对象(内部bean)
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+**集合类型**
+
+假设有实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+public class User {
+ private int id;
+ private String name;
+ private int age;
+ private String address;
+ private List list;
+}
+```
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+ 吃饭
+ 睡觉
+ 打豆豆
+
+
+
+
+```
+
+测试
+
+src/test/java/org/example/test/UserTest.java
+
+```java
+package org.example.test;
+
+import org.example.entity.User;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class UserTest {
+ public static void main(String[] args) {
+ // 加载Spring的核心配置文件
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
+ // 通过Spring容器来获取对象
+ User user = (User) context.getBean("user");
+ System.out.println(user);
+ }
+}
+```
+
+
+
+
+
+###### 构造器注入
+
+**简单类型**
+
+假设有实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+public class User {
+ private int id;
+ private String name;
+ private int age;
+ private String address;
+}
+```
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+**自定义对象类型**
+
+假设有两个实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+public class User {
+ private int id;
+ private String name;
+ private int age;
+ private String address;
+ private Book book;
+}
+```
+
+src/main/java/org/example/entity/Book.java
+
+```java
+public class Book {
+ private int bookId;
+ private String bookName;
+ private String author;
+}
+```
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+**集合类型**
+
+同理
+
+
+
+##### Spring IOC基于注解
+
+因为Spring容器初始化时,只会加载applicationContext.xml文件,那么我们在实体类中添加注解的话,注解不会被Spring扫描,所以需要在applicationContext.xml中配置扫描的范围,以达到Spring初始化时扫描到对应有注解的实体类并完成初始化工作。
+
+###### 修改头部
+
+> 添加xmlns:context属性
+>
+> `xmlns:context="http://www.springframework.org/schema/context"`
+>
+> 并在xsi:schemaLocation属性中添加
+>
+> `http://www.springframework.org/schema/context`
+>
+> `http://www.springframework.org/schema/context/spring-beans.xsd`
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+
+
+
+```
+
+```xml
+
+
+
+
+
+
+
+
+```
+
+
+
+###### IOC常用的注解
+
+**@Component**
+
+> 类注解:声明此类被Spring容器进行管理,相当于bean标签的作用
+>
+> ```java
+> @Data
+> @AllArgsConstructor
+> @NoArgsConstructor
+> @Component
+> public class Book {
+> private int bookId;
+> private String bookName;
+> private String author;
+> }
+> ```
+
+> @Component(value = "user")
+>
+> value属性用于指定当前bean的id,相当于bean标签的id属性,value属性可以省略,如果省略当前id的值默认为**类名首字母小写**
+
+
+
+**@Service**
+
+> 类注解,声明业务层处理类配置给Spring容器管理,service接口的实现类
+
+
+
+**@Controller**
+
+> 类注解,声明将控制器类配置给Spring容器管理,例如:Servlet
+
+
+
+**@Autowired**
+
+> 属性注解,用于声明属性
+
+
+
+**@Resource**
+
+> 属性注解,用于声明属性
+
+
+
+###### 实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Component
+public class User {
+ @Value("1")
+ private int id;
+ @Value("aa")
+ private String name;
+ @Value("12")
+ private int age;
+ @Value("武汉")
+ private String address;
+ @Resource // 或 @Autowired
+ private Book book;
+}
+```
+
+src/main/java/org/example/entity/Book.java
+
+```java
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Service
+public class Book {
+ @Value("3")
+ private int bookId;
+ @Value("Java编程")
+ private String bookName;
+ @Value("dd")
+ private String author;
+}
+```
+
+测试
+
+```java
+package org.example.test;
+
+import org.example.entity.User;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class UserTest {
+ public static void main(String[] args) {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
+ User user = (User) context.getBean("user");
+ System.out.println(user);
+ }
+}
+```
+
+输出
+
+```bash
+D:\Program\Java\jdk1.8.0_201\bin\java.exe ...
+User(id=1, name=aa, age=12, address=武汉, book=Book(bookId=3, bookName=Java编程, author=dd))
+
+Process finished with exit code 0
+```
+
+
+
+#### Spring整合MyBatis
+
+##### 创建项目
+
+###### 创建普通Maven项目
+
+
+
+
+
+###### 导入依赖
+
+需要导入的依赖:[MyBatis](#mybatis依赖)、[MySQL](#mysql依赖)、[Lombok](#Lombok依赖)、[JUnit](#junit依赖)、[Spring](#spring依赖)、MyBatis Spring、Druid
+
+**MyBatis Spring依赖**
+
+https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.6
+
+```xml
+
+
+ org.mybatis
+ mybatis-spring
+ 2.0.6
+
+```
+
+
+
+**Druid依赖**(阿里巴巴数据源)
+
+https://mvnrepository.com/artifact/com.alibaba/druid/1.2.8
+
+```xml
+
+
+ com.alibaba
+ druid
+ 1.2.8
+
+```
+
+
+
+**Spring测试依赖**
+
+https://mvnrepository.com/artifact/org.springframework/spring-test/5.2.19.RELEASE
+
+```xml
+
+
+ org.springframework
+ spring-test
+ 5.2.19.RELEASE
+ test
+
+```
+
+> Spring框架的依赖版本最好保持一致
+
+
+
+**Spring JDBC**
+
+https://mvnrepository.com/artifact/org.springframework/spring-jdbc/5.2.19.RELEASE
+
+```xml
+
+
+ org.springframework
+ spring-jdbc
+ 5.2.19.RELEASE
+
+```
+
+
+
+综上
+
+pom.xml
+
+```xml
+
+
+ 4.0.0
+
+ org.example
+ spring_and_mybatis
+ 1.0-SNAPSHOT
+
+
+ 8
+ 8
+
+
+
+
+ org.mybatis
+ mybatis
+ 3.5.9
+
+
+ mysql
+ mysql-connector-java
+ 5.1.49
+
+
+ org.projectlombok
+ lombok
+ 1.18.22
+ provided
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-context
+ 5.2.19.RELEASE
+
+
+ org.mybatis
+ mybatis-spring
+ 2.0.6
+
+
+ com.alibaba
+ druid
+ 1.2.8
+
+
+ org.springframework
+ spring-test
+ 5.2.19.RELEASE
+ test
+
+
+ org.springframework
+ spring-jdbc
+ 5.2.19.RELEASE
+
+
+
+```
+
+
+
+###### 创建db.properties文件
+
+在resources目录下创建db.properties文件,配置键值对
+
+src/main/resources/db.properties
+
+```properties
+driver=com.mysql.jdbc.Driver
+url=jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8
+username=root
+password=111111
+```
+
+
+
+###### 创建Spring核心配置文件
+
+在resources目录下创建applicationContext.xml文件:[传送门](#创建Spring核心配置文件)
+
+>当Spring和MyBatis整合后,MyBatis核心配置文件mybatis-config.xml可以不要
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+###### 数据库建表语句
+
+用户表
+
+```sql
+CREATE TABLE `user` (
+ `user_id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
+ `user_pwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
+ `user_realname` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
+ `user_age` int(11) DEFAULT NULL,
+ PRIMARY KEY (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
+```
+
+
+
+###### 实体类
+
+src/main/java/org/example/entity/User.java
+
+```java
+package org.example.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+ private Integer userId;
+ private String userName;
+ private String userPwd;
+ private String userRealname;
+ private Integer userAge;
+}
+```
+
+
+
+###### mapper接口
+
+src/main/java/org/example/mapper/UserMapper.java
+
+```java
+package org.example.mapper;
+
+import org.example.entity.User;
+
+import java.util.List;
+
+public interface UserMapper {
+ /**
+ * 查询所有用户信息
+ * @return
+ */
+ public List showUser();
+}
+```
+
+
+
+###### mapper.xml文件
+
+src/main/resources/mappers/UserMapper.xml
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
+##### 测试类
+
+> 当Spring和MyBatis整合后,单表不需要使用 `sqlSession.commit();` 事务提交,可以自动提交
+
+src/test/java/org/example/test/SpringUserTest.java
+
+```java
+package org.example.test;
+
+import org.example.entity.User;
+import org.example.mapper.UserMapper;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:applicationContext.xml")
+public class SpringUserTest {
+ // 需要调用接口中的方法进行测试
+ @Resource
+ private UserMapper userMapper;
+
+ @Test
+ public void show() {
+ List users = userMapper.showUser();
+ for (User user : users) {
+ System.out.println(user);
+ }
+ }
+}
+```
+
+运行结果
+
+