Java_MyBatis

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:支持丰富的自定义设置,可以充分满足客户端个性化要求(换肤、声音显示设置、按键设置…)
    • 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地址:端口 访问到应用程序
  1. 浏览器和服务器之间通过HTTP协议进行通信

4. 服务器架构

前面我们已经清楚了BS架构的特点,接下来我们看看后端开发的应用程序的结构特点

4.1. 三层架构的意义

三层架构的目的着重点是解耦,也就是项目开发强调的“高内聚,低耦合”。不同的层级负责不同的工作。好比厨房后厨的分工:切菜、炒菜、传菜

在这里插入图片描述

  • 用户下单:
  1. 表现层(controller)负责接收客户端请求:购买商品ID,购买数量
  2. controller 调用业务层(service)处理下单业务,
  3. service 通过持久层(dao)获取数据库中的数据:判断是否黑名单用户、判断商品是否存在、是否限制购买数量、判断库存…下单(扣减库存、生成订单…).
  4. 数据持久层:完成对数据库中数据的读写操作,查询用户、查询商品、查询库存、修改库存、生成订单,将数据提供给service完成逻辑处理。
  5. service层完成下单功能,将下单结果返回给controller。
  6. controller再将业务层处理的下单结果返回给客户端(下单成功/失败)
4.2. MVC

三层架构是对整个项目的结构划分,MVC是针对表现层再度进行了划分,MVC分别表示 Model-View-Controller,最典型的MVC就是JSP + servlet + javabean的模式

Model(模型):模型对象负责封装数据(User、Student…)

View(视图):视图用于对模型数据进行展示,例如可以把一组数据展示为柱状图或者饼状图。

Controller(控制器):控制器负责从视图读取用户输入,将对应的模型数据转交给视图展示,起到控制协调作用

  • 各层的框架

SpringMVC:表现层框架,用于接收客户端请求,响应业务逻辑层的处理结果给客户端

Spring/SpringBoot:业务逻辑层框架,用于整合其他框架,提供非常丰富的业务处理功能,事务处理、定时任务、权限校验…

MyBatis:数据访问层(持久层)框架,负责和数据库打交道,从数据库中查询数据、写入数据。

4.3. 总结:
  1. java主要用来开发BS架构的web应用。
  2. 客户端与服务器端通过HTTP协议进行通信。
  3. 服务端应用程序为了解耦,分为三层架构设计:表现层、业务层、持久层。
  4. 其中表现层又进行了细分:模型、视图、控制器。
  5. 我们要掌握每一层对应框架的应用。

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表中的数据

  1. 配置数据库连接

  2. 设置mybatis核心配置文件

  3. 编写mybatis的sql映射文件

  4. 测试

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开发过程总结
  1. 编写mybatis-config.xml
  2. 编写mapper.xml
  3. 编程通过配置文件创建SqlSessionFactory
  4. 通过SqlSessionFactory获取SqlSession
  5. 通过SqlSession操作数据库:
    1. 如果执行添加、更新、删除需要调用SqlSession.commit()
  6. SqlSesion使用完成要关闭

3. XML配置

MyBatis 的配置文件(mybatis-config.xml)包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • 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">
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值