初学SpringSpringMVC以及Mybatis时,将其整合时步骤繁多,新手容易不理解,面对繁多的XML配置,往往也不易跑通代码,这里用于记录一次整合的配置。

整合的目的:通过SpringIoCAOP对组件进行管理。即:通过IoC解决组件间的动态依赖注入;通过AOP来对事务进行控制,即通过Spring来整合SpringMVCMybatis

想法:对Mybatis的整合是,在Service层调用dao层的接口时,使其自动装配。

首先:一张数据库表对应一个实体类,一个实体类对应一张Mapper.xml配置文件。在resources文件夹下创建一个mapper文件夹,用于存放实体类的Mapper文件。这里创建EmployeeMapper.xml配置文件。

一、介绍与定义

本章用于记录自定义Springboot-starter的学习过程。

在我们自定义starter之前,我们首先观察一下SpringBoot自身的starter的形式都是什么样的。我们以spring-boot-starter-web为例。

Spring-boot-starter-web

通过spring-boot-starter-web,可以看出当前引入的依赖是空的JAR文件。它的作用是仅提供辅助依赖管理,这些依赖可用于自动装配或者其他类库。继续点入,可以看见其引入了spring-boot-starter,再进一步点入,又能看见其引入了spring-boot-autoconfigure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 在spring-boot-starter-web中引入了以下依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.4.0</version>
<scope>compile</scope>
</dependency>
<!-- 在spring-boot-starter中引入了以下依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.4.0</version>
<scope>compile</scope>
</dependency>

本文记载一次在阿里云服务器装载Mongodb并远程连接成功使用的过程记录。

基本安装环境:本次安装环境:CentOS7、Mongodb版本为4.2.10

一、安装

通过Mongodb官网,安装Mongodb社区版本,选择自己需要安装的版本以及依赖的环境。如下图:

mongodb

  1. 在服务器打开终端,应用centos中网络下载的方式下载Mongodb的安装包。

首先,进入服务器端的usr/local,在其路径下创建文件夹:

1
2
mkdir mongodb4
cd mongodb4

在此文件夹下远程网络下载Mongodb的安装包:

1
wegt https://fastdl.mongodb.org/linux/mongodb-shell-linux-x86_64-rhel70-4.4.1.tgz

解压文件夹:

1
tar -zxvf mongodb-linux-x86_64-rhel70-4.2.10.tgz

修改压缩包名称:

1
mv mongodb-linux-x86_64-rhel70-4.2.10 mongodb4.2

一、字节流与字符流

  • 输入流:用于读取数据 – 将数据写入内存进行展示,即将数据从其他设备读取到内存中的流。
  • 输出流:用于数据保存 – 将数据写入磁盘,可持久化存储,即将数据从内存中写出到其他设备上的流。

在字节流(以字节为单位)中,输出数据使用OutStream类完成,输入使用的是InputStream类完成。(所有字节流的父类)

在字符流(以字符为单位)中,输出数据使用Writer类完成,输入使用Reader完成。(所有字符流的父类)

其中,字节流主要操作byte类型数据,以byte数组为准。

如果想对文件进行读写,首先需要创建一个文件对象,如下:

1
2
3
4
5
6
7
public class FileDemo01 {
public static void main(String[] args) {
String pathname = "a.txt";
File file = new File(pathname);
System.out.println(file); // a.txt
}
}

从上面代码段可以看出,File接收的参数是文件路径,返回的是File对象。但是,直接打印File时,返回的是pathname,即为传入的参数。所以,在File类中,重写了toString方法。后面当我们拿到File对象后,就可以进行后续对当前文件的一系列操作了。

0 、概述

服务器端分成三层架构。

三层架构

一、环境搭建

1.1 Maven环境的创建

  1. 导入坐标依赖

    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
    <!-- 版本锁定 -->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!-- 配置依赖 -->
    <dependencies>
    <!-- spring IOC -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <!-- spring web -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
    </dependency>
    </dependencies>
  2. 配置核心的控制器(类似servlet类 – dispatcherServlet)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" >

    <web-app>
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    </web-app>

<url-pattern>/</url-pattern>时,默认就是拦截所有路径连静态资源也不能访问。但是Controller中配置@RequestMapping的路径是不会被拦截的,配置了@RequestMapping就相当于在web.xml中注<servlet>

Mybatis框架介绍与基本使用笔记

注意:一般的一个Maven工程首先注入的依赖包含数据库驱动依赖,日志依赖,测试依赖

domain中的实体类实现serizlizable接口序列化的原因:

最重要的两个原因是:

  1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;

  2、按值将对象从一个应用程序域发送至另一个应用程序域。

  实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列.

namespace:名称空间;写接口的全类名;相当于告诉Mybatis这个配置文件是实现哪个接口的;

由于在学习框架时,经常会遇到反射,故此篇文章用于对反射的基本学习。

一、概述

基本定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

对其简单的理解就是将类的各个组成部分封装为其他对象,以便我们能够更加细化的使用。同时,我们也都知道,Java中程序是运行在虚拟机中,我们平常用文本编辑器或者是IDE编写的程序都是.java格式的文件,这是最基础的源码,但这类文件是不能直接运行的,必须经过编译成.class字节码文件进而加载进内存供JVM虚拟机执行。要想理解反射,就先需要谈起Java代码在计算机中经历的三个阶段,见下图。

java代码经历的三个阶段

一、概念

FilterJava Web的三大组件之一。Java Web三大组件分别是ServletFilterListener

Filter的作用一般用于完成通用的操作。例如:登录验证、统一编码处理、敏感字符过滤…在实际开发中,过滤器就是对Web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理,或者对返回的response进行拦截处理。其处理流程见下图:

Filter执行原理

拦截request可以简单理解为,在客户端向后端发送请求时,我们需要对其请求加一些”修饰”,将”修饰”后的请求带到后端。其中这个”修饰”是需要在这个请求的过程中完成的,这里因为是通用操作,可能是对所有的request进行”修饰”,所以并没有在客户端进行编写,否则当再加入一个request请求时,我们又要编写对应的规则,因此我们借用过滤器在请求过程中,对我们需要改写的request进行”修饰”。

其中,这里的”修饰”就可以理解为在原有的request请求中,再加入一些”修改”。例如:在Servlet中过多字符集编码发生变化需要修改时,你是选择对每个Servlet都进行修改,还是会选择一个通用的”规则”,来自动判断帮我们进行修改呢?而这里通用的”规则”就是Filter,我们可以把这些通用的字符集编码配置等工作放在Filter中,由Filter在请求过程中或返回过程中帮我们来实现。

在之前的总结Java初试MVC及三层架构中,查看其目录结构仅仅对于User对象的操作就写了6,7个servlet,而每一个servlet只对应一个功能,但随着以后项目的扩大,业务逻辑的复杂化,我们需要操作的对象不仅仅是一个User类时,换句话说,我们操作数据库中的表不止一张时,那么可想而知我们的servlet需要写多少!

未优化前的目录结构

思考:我们能否像service层和dao层一样,将关于User的操作都写在一个类当中,方便我们的使用呢。从而减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。

我们编写的所有servlet都继承了HttpServlet,与此同时都复写了doGet以及doPost方法。查看HttpServlet源码,可以看见对doGet以及doPost的方法的调用都写在service中。