From 701a08fd9e6288a872ec47773d7dc89711d56823 Mon Sep 17 00:00:00 2001
From: Coding Zhang <2291200076@qq.com>
Date: Thu, 20 Jan 2022 14:56:41 +0800
Subject: [PATCH] 2022.01.20 1229
---
张博凯的Java学习笔记.md | 404 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 403 insertions(+), 1 deletion(-)
diff --git a/张博凯的Java学习笔记.md b/张博凯的Java学习笔记.md
index 1339caa..c297df5 100644
--- a/张博凯的Java学习笔记.md
+++ b/张博凯的Java学习笔记.md
@@ -1528,6 +1528,8 @@ password=111111
##### 导入PageHelper依赖
+
+
https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper/5.3.0
```xml
@@ -1606,6 +1608,8 @@ https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper/5.3.0
##### log4j依赖
+
+
https://mvnrepository.com/artifact/log4j/log4j/1.2.17
```xml
@@ -1621,6 +1625,8 @@ https://mvnrepository.com/artifact/log4j/log4j/1.2.17
##### 导入log4j.propertites文件
+
+
[log4j.properties](张博凯的Java学习笔记.assets\file\log4j.properties)
src/main/resources/log4j.properties
@@ -3506,7 +3512,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.List;
-@RunWith(SpringJUnit4ClassRunner.class)
+@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringUserTest {
// 需要调用接口中的方法进行测试
@@ -3523,12 +3529,408 @@ public class SpringUserTest {
}
```
+> 通过@RunWith,声明当前测试类位于Spring容器管理
+>
+> 通过@ContextConfiguration声明加载配置文件
+
运行结果

+#### TKMapper快速开发
+
+> tk.mapper是mybatis第三方提供的一个插件。简化接口,不需要映射文件
+
+##### 导入依赖
+
+> 基于上一个项目(Spring整合MyBatis)
+
+https://mvnrepository.com/artifact/tk.mybatis/mapper/4.1.5
+
+```xml
+
+
+ tk.mybatis
+ mapper
+ 4.1.5
+
+```
+
+##### 修改Spring的核心配置文件
+
+**去掉以下部分**
+
+```xml
+
+
+
+
+
+
+```
+
+**修改以下部分**
+
+```xml
+
+
+```
+
+改为
+
+```xml
+
+
+```
+
+
+
+##### 删除映射文件
+
+src/main/resources/mappers/
+
+##### 实体类添加注解
+
+src/main/java/org/example/entity/User.java
+
+```java
+package org.example.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import tk.mybatis.mapper.annotation.KeySql;
+
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "user") // 对应数据库表名
+public class User {
+ /* ***** 如果表中字段名和实体类中属性名一致,就可以直接测试 ***** */
+ @Id // 主键
+ @KeySql(useGeneratedKeys = true) // 自增
+ private Integer user_id;
+ private String user_name;
+ private String user_pwd;
+ private String user_realname;
+ private Integer user_age;
+
+ /* 其实写成驼峰命名,经测试也可以 */
+ @Id // 主键
+ @KeySql(useGeneratedKeys = true) // 自增
+ private Integer userId;
+ private String userName;
+ private String userPwd;
+ private String userRealname;
+ private Integer userAge;
+
+ /* ***** 如果表中字段名和实体类中属性名不一致,需要谈价@Column注解 ***** */
+ @Id // 主键
+ @KeySql(useGeneratedKeys = true) // 自增
+ @Column(name = "user_id")
+ private Integer id;
+ @Column(name = "user_name")
+ private String name;
+ @Column(name = "user_pwd")
+ private String pwd;
+ @Column(name = "user_realname")
+ private String realname;
+ @Column(name = "user_age")
+ private Integer age;
+}
+```
+
+##### mapper接口改为extends,接口函数删掉
+
+src/main/java/org/example/mapper/UserMapper.java
+
+```java
+package org.example.mapper;
+
+import org.example.entity.User;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface UserMapper extends Mapper {
+
+}
+```
+
+###### 测试类
+
+```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.selectAll();
+ for (User user : users) {
+ System.out.println(user);
+ }
+ }
+}
+```
+
+运行结果
+
+```bash
+User(user_id=1, user_name=小明, user_pwd=13579, user_realname=张小明, user_age=20)
+User(user_id=2, user_name=ad, user_pwd=asda, user_realname=dasd, user_age=48)
+
+Process finished with exit code 0
+```
+
+
+
+#### Spring整合MyBatis整合log4j
+
+> 基于上一个项目(TKMapper快速开发)
+
+##### 导入依赖
+
+[log4j](#log4j依赖)、commons-logging、slf4j-log4j12
+
+**导入commons-logging依赖**
+
+https://mvnrepository.com/artifact/commons-logging/commons-logging/1.2
+
+```xml
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+```
+
+**导入slf4j-log4j12依赖**
+
+https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.7.25
+
+```xml
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.25
+ test
+
+```
+
+##### 添加log4j配置文件
+
+[导入log4j.propertites文件](#导入log4j_propertites文件)
+
+进行测试,日志成功输出
+
+
+
+
+
+#### Spring和MyBatis整合后pageHelper分页插件的使用
+
+##### 导入依赖
+
+[导入PageHelper依赖](#PageHelper依赖)
+
+##### 在Spring核心配置文件中配置拦截器
+
+https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
+
+src/main/resources/applicationContext.xml
+
+```xml
+
+ ...
+
+
+
+
+
+
+
+ params=value1
+
+
+
+
+
+
+```
+
+##### 测试类
+
+src/test/java/org/example/test/SpringUserTest.java
+
+```java
+package org.example.test;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+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() {
+ // 设置当前页,页面容量
+ PageHelper.startPage(1,3);
+ List users = userMapper.selectAll();
+ PageInfo userPageInfo = new PageInfo<>(users);
+ System.out.println(userPageInfo);
+ }
+}
+```
+
+
+
+运行结果
+
+```bash
+PageInfo{pageNum=1, pageSize=3, size=3, startRow=1, endRow=3, total=5, pages=2, list=Page{count=true, pageNum=1, pageSize=3, startRow=0, endRow=3, total=5, pages=2, reasonable=false, pageSizeZero=false}[User(id=1, name=小明, pwd=13579, realname=张小明, age=20), User(id=2, name=ad, pwd=asda, realname=dasd, age=48), User(id=3, name=vb, pwd=13579, realname=张小明, age=20)], prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=2, navigatepageNums=[1, 2]}
+```
+
+
+
+#### AOP注解事务的使用
+
+##### 导入依赖
+
+spring-aspects
+
+https://mvnrepository.com/artifact/org.springframework/spring-aspects/5.2.19.RELEASE
+
+```xml
+
+
+ org.springframework
+ spring-aspects
+ 5.2.19.RELEASE
+
+```
+
+
+
+##### 修改Spring的核心配置文件
+
+修改文件头,添加事务管理器配置
+
+```xml
+
+
+
+ ...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+##### 应用
+
+创建UserService
+
+src/main/java/org/example/service/UserService.java
+
+```java
+package org.example.service;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class UserService {
+ @Transactional(propagation = Propagation.REQUIRED)
+ public void addUser() {
+ System.out.println("增加");
+ }
+ @Transactional(propagation = Propagation.REQUIRED)
+ public int updateUser() {
+ return 1;
+ }
+ @Transactional(propagation = Propagation.SUPPORTS) // 查询不需要事务
+ public int selectUser() {
+ return 1;
+ }
+}
+```
+
+>**Spring中七种Propagation类的事务属性详解**
+>
+> REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
+>
+> SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
+>
+> MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。
+>
+> REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
+>
+> NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
+>
+> NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
+>
+> NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。
+
+> REQUIRED和SUPPORTS用的较多。REQUIRED→增删改,SUPPORTS→查
+
+
+
### SpringMVC框架
> Web框架,Servlet角色