Java开发加强
1. 目标
掌握主流的web开发框架,能够使用SSM(springMVC SpringBoot Mybatis)开发web应用
在学习web开发之前,有一些需要清楚的前置知识。
2. Java的用武之地
常见的软件架构体系主要分为两种:CS架构、BS架构
java主要用于开发BS架构的应用
2.1. CS架构
- client客户端 server服务端
- 需要在本地安装客户端程序才能访问服务端
- QQ 、杀毒软件、网游
2.2. BS架构
- 即浏览器/服务器(Browser/Server);
- 本地只要有浏览器即可
- 用浏览器打开的任何应用:淘宝、优酷、哔哩哔哩、论坛、博客、地图…
2.3. BS与CS架构的区别
- 性能方面
- CS:能充分发挥客户端PC的处理能力,大部分数据处理由客户端完成,
处理能力强,速度快,用户体验好
,但是对客户端电脑的配置要求高,客户群体受限,使用成本高。 - BS:所有数据处理由服务器完成,客户端能安装浏览器即可,客户端要求低。
- CS:能充分发挥客户端PC的处理能力,大部分数据处理由客户端完成,
- 个性化
- CS:支持丰富的自定义设置,可以充分满足客户端个性化要求(换肤、声音显示设置、按键设置…)
- BS:支持部分个性化定制功能,不如BS架构丰富
- 更新问题
- CS:服务端更新,客户端不更新无法使用
- BS:只需要服务器端更新,客户端刷新浏览器即可
- 开发成本
- CS:不同的系统需要开发一套不同的客户端
- BS:只需要开发一个版本,客户端能安装浏览器即可
- 设备依赖性
- CS:其他没有安装客户端的电脑无法使用;重装系统需要重装客户端
- BS:客户端能安装浏览器即可
小结:
java主要用于开发BS架构的应用,客户端只需要有浏览器即可访问服务端
3. BS架构通信问题
问题:
- 为什么输入网址能访问到天猫服务,而没有访问其他服务器(京东/苏宁…)
- 浏览器和服务器是如何通信的
- 浏览器如何告诉服务器要获取那些数据
- 服务器怎么知道浏览器要要获取哪些数据
- 服务器如何将数据响应给浏览器
3.1. IP地址和端口
因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址,但是这个地址是一串数字,不方便记忆,为了方便记忆,互联网提供了域名。一个IP地址可以绑定一个或多个域名。
www.baidu.com 180.101.49.11
找到这台计算机(服务器)之后,但是这台计算机上启动了N多个服务(百度地图、百度翻译、百度贴吧…),怎么访问到百度搜索的程序呢?
通过端口就能确定要访问计算机上的哪个程序了。默认端口80
3.2. HTTP协议
HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。
HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这个两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。
3.3. 请求协议与响应协议
-
请求协议的格式如下:
- 请求首行
- 请求头
- 请求空行
- 请求体
-
响应协议
-
响应首行
-
响应头
-
响应空行
-
响应体
-
-
POST请求
- GET请求
3.5. 小结:
1. 浏览器通过IP地址:端口 访问到应用程序
- 浏览器和服务器之间通过HTTP协议进行通信
4. 服务器架构
前面我们已经清楚了BS架构的特点,接下来我们看看后端开发的应用程序的结构特点
4.1. 三层架构的意义
三层架构的目的着重点是解耦,也就是项目开发强调的“高内聚,低耦合”。不同的层级负责不同的工作。好比厨房后厨的分工:切菜、炒菜、传菜
- 用户下单:
- 表现层(controller)负责接收客户端请求:购买商品ID,购买数量
- controller 调用业务层(service)处理下单业务,
- service 通过持久层(dao)获取数据库中的数据:判断是否黑名单用户、判断商品是否存在、是否限制购买数量、判断库存…下单(扣减库存、生成订单…).
- 数据持久层:完成对数据库中数据的读写操作,查询用户、查询商品、查询库存、修改库存、生成订单,将数据提供给service完成逻辑处理。
- service层完成下单功能,将下单结果返回给controller。
- controller再将业务层处理的下单结果返回给客户端(下单成功/失败)
4.2. MVC
三层架构是对整个项目的结构划分,MVC是针对表现层再度进行了划分,MVC分别表示 Model-View-Controller,最典型的MVC就是JSP + servlet + javabean的模式
Model(模型):模型对象负责封装数据(User、Student…)
View(视图):视图用于对模型数据进行展示,例如可以把一组数据展示为柱状图或者饼状图。
Controller(控制器):控制器负责从视图读取用户输入,将对应的模型数据转交给视图展示,起到控制协调作用
- 各层的框架
SpringMVC:表现层框架,用于接收客户端请求,响应业务逻辑层的处理结果给客户端
Spring/SpringBoot:业务逻辑层框架,用于整合其他框架,提供非常丰富的业务处理功能,事务处理、定时任务、权限校验…
MyBatis:数据访问层(持久层)框架,负责和数据库打交道,从数据库中查询数据、写入数据。
4.3. 总结:
- java主要用来开发BS架构的web应用。
- 客户端与服务器端通过HTTP协议进行通信。
- 服务端应用程序为了解耦,分为三层架构设计:表现层、业务层、持久层。
- 其中表现层又进行了细分:模型、视图、控制器。
- 我们要掌握每一层对应框架的应用。
MyBatis
官网地址:https://mybatis.org/mybatis-3/zh/getting-started.html
目标:
掌握使用XML配置以及注解两种方式,能够完成各种简单已经复杂的需求,将数据写入到数据库,以及从数据将数据从数据库中查询出来。并掌握相关延伸功能:分页插件、逆向工程、通用mapper。
1. 环境准备
1.1. 创建表和类
- 创建数据库mybatis ,执行【资料】- 【mybatis.sql】完成表的创建和数据插入。
- 新建包com.czxy.mybatis,将【资料】- 【model】文件夹复制到com.czxy.mybatis包下
1.2. 创建maven项目
1.3. 导入依赖
pom.xml
<!-- mybatis核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql连接依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- log4j日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
1.4. 添加日志配置
将【资料】- 【log4j.properties】复制到项目的resource目录下
2. MyBatis 入门案例(xml)
使用xml配置的方式查询出user
表中的数据
-
配置数据库连接
-
设置mybatis核心配置文件
-
编写mybatis的sql映射文件
-
测试
2.1. 数据库连接
jdbc.properties
注意mybatis版本>=6.0使用如下驱动,如果<6.0使用com.mysql.jdbc.Driver
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&&serverTimezone=Hongkong&useSSL=false
username=root
password=root
2.2. MyBatis核心配置
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入jdbc属性配置-->
<properties resource="jdbc.properties"></properties>
<!--mybatis的核心环境配置-->
<environments default="development">
<environment id="development">
<!--
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施
MANAGED – 这个配置几乎没做什么
-->
<transactionManager type="JDBC"/>
<!--type可选值:UNPOOLED 不使用连接池
POOLED使用连接池
JNDI 从配置好的JNDI数据源获取连接池-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.3. mapper.xml
在resource目录下新建mapper目录,存放UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<!--
id:sql片段的唯一标识,同一个mapper文件中不能重复
parameterType:参数类型
resultType:返回值类型
-->
<select id="selectOne" parameterType="int" resultType="com.czxy.mybatis.model.User">
SELECT
uid,
username,
birthday,
phone,
sex,
address
FROM `user`
WHERE uid = #{aa}
</select>
</mapper>
2.4. 测试
测试类:MyBatisTest.java
public class MyBatisTest {
@Test
public void selectOne() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
//可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过 namespace.id的方式确定要执行的SQL片段
User user = sqlSession.selectOne("test.selectOne",10);
System.out.println(user);
//用完后必须管理连接
sqlSession.close();
}
}
总结:
- mybatis开发过程总结
- 编写mybatis-config.xml
- 编写mapper.xml
- 编程通过配置文件创建SqlSessionFactory
- 通过SqlSessionFactory获取SqlSession
- 通过SqlSession操作数据库:
- 如果执行添加、更新、删除需要调用SqlSession.commit()
- SqlSesion使用完成要关闭
3. XML配置
MyBatis 的配置文件(mybatis-config.xml)包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
3.1. 配置文件详解
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入jdbc属性配置-->
<properties resource="jdbc.properties"></properties>
<settings>
<!--开启驼峰规则映射-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--设置别名,在mapper.xml中指定类型时可以简化书写-->
<!--
resultType="com.czxy.mybatis.model.User"
简化为
resultType="user"
-->
<typeAliases>
<!--给某一个类取别名-->
<typeAlias type="com.czxy.mybatis.model.User" alias="user"></typeAlias>
<!--扫描某一个包下的类,指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean-->
<!--这样有10个或者100个类不用一个个取指定别名-->
<package name="com.czxy.mybatis.model"/>
</typeAliases>
<!--mybatis的核心环境配置-->
<environments default="development">