Water's Blog

坚持更新博客中...


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

SpringMVC框架(5) —— 文件上传

发表于 2019-09-15 更新于 2020-01-31 分类于 Java , SpringMVC
本文字数: 20k 阅读时长 ≈ 18 分钟

项目结构(文件服务器)

  • webapp
    • uploads(图片存储位置)
    • WEB-INF
      • pages
        • success.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
  • pom.xml(maven项目配置文件)

项目结构(应用服务器)

  • java
    • controller
      • FileUploadController.java(Java文件)
  • resources
    • springmvc.xml(springmvc配置文件)
  • webapp
    • WEB-INF
      • pages
        • success.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
  • pom.xml(maven项目配置文件)
阅读全文 »

SpringMVC框架(4) —— 响应数据类型

发表于 2019-09-10 更新于 2020-01-31 分类于 Java , SpringMVC
本文字数: 23k 阅读时长 ≈ 21 分钟

项目结构

  • java

    • controller
      • ResponseController.java(Java文件)
    • domain
      • User.java(JavaBean文件)
  • resources

    • springmvc.xml(springmvc配置文件)
  • webapp

    • css
    • images
    • js
      • jquery.min.js(js文档)
    • WEB-INF
      • pages
        • success.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
    • jquery.jsp(web页面)
    • response.jsp(web页面)
  • pom.xml(maven项目配置文件)

阅读全文 »

SpringMVC框架(3) —— 注解

发表于 2019-09-07 更新于 2020-01-31 分类于 Java , SpringMVC
本文字数: 20k 阅读时长 ≈ 18 分钟

项目结构

  • java
    • controller
      • SessionController.java(Java文件)
  • resources
    • springmvc.xml(springmvc配置文件)
  • webapp
    • WEB-INF
      • pages
        • success.jsp(web页面)
        • session.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
    • annotation.jsp(web页面)
  • pom.xml(maven项目配置文件)
阅读全文 »

SpringMVC框架(2) —— 参数绑定

发表于 2019-09-03 更新于 2020-01-31 分类于 Java , SpringMVC
本文字数: 23k 阅读时长 ≈ 21 分钟

项目结构

  • java
    • controller
      • ParameterController.java(Java文件)
    • utils
      • StringToData(自定义类型转换文件)
    • domain
      • User(JavaBean本件)
      • Account(JavaBean本件)
      • CCollection(JavaBean本件)
      • DDate(JavaBean本件)
  • resources
    • springmvc.xml(springmvc配置文件)
  • webapp
    • WEB-INF
      • pages
        • success.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
    • parameters.jsp(web页面)
  • pom.xml(maven项目配置文件)
阅读全文 »

SpringMVC框架(1) —— 入门案例

发表于 2019-09-01 更新于 2020-01-31 分类于 Java , SpringMVC
本文字数: 8.9k 阅读时长 ≈ 8 分钟

项目结构

  • java
    • controller
      • HelloController.java(Java文件)
  • resources
    • springmvc.xml(springmvc配置文件)
  • webapp
    • WEB-INF
      • pages
        • success.jsp(web页面)
      • web.xml(web配置文件)
    • index.jsp(web页面)
  • pom.xml(maven项目配置文件)
阅读全文 »

Spring框架(12) —— 事务管理案例

发表于 2019-08-26 更新于 2020-01-31 分类于 Java , Spring
本文字数: 21k 阅读时长 ≈ 19 分钟

简介

  • 本文将在 Spring 框架中,分别使用使用“XML”,“XML+注释”和“注解+Java”三种方式来演示数据库的转账操作。

项目环境

数据库代码

  • 创建数据库spring,在数据库中创建 Account表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建数据库
CREATE DATABASE spring;

# 使用数据库
USE spring;

# 创建表
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(40),
money FLOAT
)CHARACTER SET utf8 COLLATE utf8_general_ci;

# 插入数据
INSERT INTO account(NAME,money) VALUES('Cat',1000);
INSERT INTO account(NAME,money) VALUES('Dog',1000);
INSERT INTO account(NAME,money) VALUES('Rat',1000);

Maven依赖

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    <dependencies>

<!-- Spring 框架 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- Spring AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>

<!-- spring JDBC框架 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>

<!-- Spring 事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>

<!-- MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

<!-- 【被 Spring JDBC 代替】 -->
<!-- 数据库连接池 -->
<!-- <dependency>-->
<!-- <groupId>c3p0</groupId>-->
<!-- <artifactId>c3p0</artifactId>-->
<!-- <version>0.9.1.2</version>-->
<!-- </dependency>-->

<!-- 【被 Spring JDBC 代替】 -->
<!-- 操作数据库的工具包 -->
<!-- <dependency>-->
<!-- <groupId>commons-dbutils</groupId>-->
<!-- <artifactId>commons-dbutils</artifactId>-->
<!-- <version>1.4</version>-->
<!-- </dependency>-->

<!-- Spring 测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>

<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

</dependencies>

Spring配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">


</beans>

实体类

Account.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class Account {

/* 成员变量 */
private int id;
private String name;
private float money;

/* 构造函数 */
public Account() {
}

public Account(int id, String name, float money) {
this.id = id;
this.name = name;
this.money = money;
}

/* 设值函数 */
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public float getMoney() {
return money;
}

public void setMoney(float money) {
this.money = money;
}

/* toString方法 */
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}

持久层接口

AccountDao.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface AccountDao {

/** 查询所有 */
List<Account> findAll();
/** 查询单个 */
Account findByID(int id);
/** 添加 */
void add(Account account);
/** 修改 */
void update(Account account);
/** 删除 */
void delete(int id);

}

业务层接口

AccountService.java

1
2
3
4
5
6
7
public interface AccountService {

/** 转账 */
void transfer(int sourceId, int targetId, float money);


}

测试类

junit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import xml.service.AccountService;


public class SpringTest {

/* 成员变量 */
private ApplicationContext app;
private AccountService service;

@Before
public void init(){
app = new ClassPathXmlApplicationContext("xml/Beans.xml");
service = app.getBean("serviceImp",AccountService.class);
}

/** 转账 */
@Test
public void test01() {
service.transfer(1,2,10f);
}

}

Spring整合junit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java_anno.config.SpringConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java_anno.service.AccountService;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class SpringTest {

/* 成员变量 */
@Autowired
private AccountService service;


/** 查询所有 */
@Test
public void test01() {
service.transfer(1,2,10f);
}


}
阅读全文 »

Spring框架(11) —— 事务管理

发表于 2019-08-25 更新于 2020-01-31 分类于 Java , Spring
本文字数: 1.1k 阅读时长 ≈ 1 分钟

事务管理

  • 一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS( 关系数据库管理系统 ) 面向企业应用程序,以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性说成是 ACID:
    • 原子性:事务应该当作一个单独单元的操作,这意味着整个序列操作要么是成功,要么是失败的。
    • 一致性:这表示数据库的引用完整性的一致性,表中唯一的主键等。
    • 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
    • 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

局部事物 vs. 全局事务

局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。

局部事务管理在一个集中的计算环境中是有用的,该计算环境中应用程序组件和资源位于一个单位点,而事务管理只涉及到一个运行在一个单一机器中的本地数据管理器。局部事务更容易实现。

全局事务管理需要在分布式计算环境中,所有的资源都分布在多个系统中。在这种情况下事务管理需要同时在局部和全局范围内进行。分布式或全局事务跨多个系统执行,它的执行需要全局事务管理系统和所有相关系统的局部数据管理人员之间的协调。

编程式 vs. 声明式

  • Spring 支持两种类型的事务管理:

    • 编程式事务管理 :这意味着你在编程的帮助下有管理事务。这给了你极大的灵活性,但却很难维护。
    • 声明式事务管理 :这意味着你从业务代码中分离事务管理。你仅仅使用注释或 XML 配置来管理事务。
  • 声明式事务管理比编程式事务管理更可取,尽管它不如编程式事务管理灵活,但它允许你通过代码控制事务。但作为一种横切关注点,声明式事务管理可以使用 AOP 方法进行模块化。Spring 支持使用 Spring AOP 框架的声明式事务管理。

Spring 声明式事务管理

声明式事务管理方法允许你在配置的帮助下而不是源代码硬编程来管理事务。这意味着你可以将事务管理从事务代码中隔离出来。你可以只使用注释或基于配置的 XML 来管理事务。 bean 配置会指定事务型方法。下面是与声明式事务相关的步骤:

  • 我们使用标签,它创建一个事务处理的建议,同时,我们定义一个匹配所有方法的切入点,我们希望这些方法是事务型的并且会引用事务型的建议。
  • 如果在事务型配置中包含了一个方法的名称,那么创建的建议在调用方法之前就会在事务中开始进行。
  • 目标方法会在 try / catch 块中执行。
  • 如果方法正常结束,AOP 建议会成功的提交事务,否则它执行回滚操作。

Spring框架(10) —— JDBCTemplate

发表于 2019-08-24 更新于 2020-01-31 分类于 Java , Spring
本文字数: 23k 阅读时长 ≈ 21 分钟

概述

  • 在我们使用普通的 JDBC 数据库时,操作步骤非常麻烦,我们需要写一些不必要的代码来处理异常,打开和关闭数据库连接等。
  • Spring JDBC 框架则会帮我们负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常,处理事务,到最后关闭连接。所以当从数据库中获取数据时,我们需要做的仅是定义连接参数,指定要执行的 SQL 语句,以及后续操作。
  • Spring JDBC 提供几种方法和数据库中相应的不同的类与接口。我将给出使用 JdbcTemplate 类框架的经典和最受欢迎的方法。这是管理所有数据库通信和异常处理的中央框架类。

JdbcTemplate 类

  • JdbcTemplate 类执行 SQL 查询、更新语句和存储过程调用,执行迭代结果集和提取返回参数值。它也捕获 JDBC 异常并转换它们到 org.springframework.dao 包中定义的通用类、更多的信息、异常层次结构。
  • JdbcTemplate 类的实例是*线程安全* 配置的。所以我们可以配置 JdbcTemplate 的单个实例,然后将这个共享的引用安全地注入到多个 DAOs 中。
  • 使用 JdbcTemplate 类时常见的做法是我们在 Spring 配置文件中配置数据源,然后共享数据源 bean 依赖注入到 DAO 类中,并在数据源的设值函数中创建了 JdbcTemplate。
阅读全文 »

Spring框架(9) —— 三种事务管理机制的转账案例

发表于 2019-08-23 更新于 2020-01-31 分类于 Java , Spring
本文字数: 36k 阅读时长 ≈ 33 分钟

简介

  • 本文的三个案例是为了更好的理解 Spring AOP 的机制,以及复习数据库事务管理。具体的功能是实现数据库的转账操作,核心知识主要分为三部分:数据库的连接、事务管理、依赖注入和功能测试。
    • 案例一:直接在业务层添加代码,来进行事务管理
      • 数据库的管理问题:通过Connection工具类来实现
      • 事务管理:通过 Transaction 工具类,在 Service 业务层中实现
      • 依赖注入:通过 xml配置文件
      • 测试:通过Junit测试
    • 案例二:通过代理模式增强代码,来进行事务管理
      • 数据库的管理问题:通过Connection工具类来实现
      • 事务管理:通过 Transaction 工具类,在 BeanFactory 代理类中实现。(获取增强过的业务层接口)
      • 依赖注入:通过 xml配置文件
      • 测试:通过 Junit 测试
    • 案例三:通过SpringAOP,来进行事务管理
      • 数据库的管理问题:通过Connection工具类来实现
      • 事务管理:完全通过 Transaction 工具类实现(AOP,高内聚)
      • 依赖注入:通过 xml配置文件 + 注解
      • 测试:通过 Spring Junit 测试
阅读全文 »

Spring框架(8) —— 面向切面编程(AOP)

发表于 2019-08-21 更新于 2020-01-31 分类于 Java , Spring
本文字数: 13k 阅读时长 ≈ 12 分钟

简介

  • Spring 框架的关键组件是 面向切面的编程(AOP,Aspect Oriented Programming),面向切面的编程需要把程序逻辑分解成不同的部分称为所谓的连接点。跨一个应用程序的多个点的功能被称为切入点,切入点在概念上独立于应用程序的业务逻辑。有各种各样的常见的很好的方面的例子,如日志记录、审计、声明式事务、安全性和缓存等。
  • 在 面向对象编程(OOP,Object Oriented Programming) 中,关键单元模块度是类,而在 AOP 中单元模块度是方面。依赖注入帮助你对应用程序对象相互解耦和 AOP 可以帮助你从它们所影响的对象中对切入点解耦。AOP 是像编程语言的触发物,如 Perl,.NET,Java 或者其他。
  • Spring AOP 模块提供拦截器来拦截一个应用程序,例如,当执行一个方法时,你可以在方法执行之前或之后添加额外的功能。
阅读全文 »
123…7
water.

water.

Few words,many deeds.
68 日志
21 分类
43 标签
GitHub E-Mail
Links
  • 残夜
  • Morty
  • Tmiracle
  • Dxoca
  • BlankYk
  • UncleGood
0%
© 2018 – 2020 water. | 658k | 9:58
|