这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
框架阶段
个人理解:框架就是别人为我们提供的一个工具类的集合(提高个人开发效率), 当我们要使用该框架的时候,那么你就需要遵循框架的使用规则(约定),规则的基础下完成自己想完成事情(相对自由)
大工具类集合:拿来主义(只是关系class文件),就需要框架开发者提供给我们对应jar包
jar包:class文件的jar包、java源文件的jar包、html的API文件的jar包
1.为什么时候框架?
- 一阶段的时候有老师封装了一个工具类,那么他使用范围只能局限在几个人当中(如果新近人员,会不了解)
- 在没有框架的时候,每个开发人员根据自己的需求去构建自己的工具类,当该开发人员离职之后,对新来开发人员增加了使用成本,从而造成企业开发效率低下
- 当公司开始使用框架之后,就算某个员工离职,再招聘只是去招聘会使用该框架开发人员即可,降低公司时间成本,从而提高公司的开发效率
- 个人角度:学习框架是为了使用公司的招聘要求,我们学习使用框架应用(不涉及底层的实现),当你开发一段时间想提高自己的开发能力,那么就需求学习别人源代码(借鉴)
先应用,后底层
2.如何学习框架?
从Hello World开始,能运行最简单的使用即可,有一个简单的套路流程:
(1)框架提供对应jar包(Bulid Path)
(2)好的框架,必须有完成帮助文档(入门手册),例如:commons-fileupload的时候Apache提供文件上传的入门手册(代码步骤都是文档中提供的)
(3)可选:遵循框架规则,一般情况下框架都需要提供对应的核心配置XML文件(或者核心配置类JavaConfig.java)
核心配置文件:web.xml(部署描述JavaWeb的核心配置文件)、注解方式可以替换web.xml的而配置
(4)读文档,构建一个"Hello World",可以运行简单项目
MyBatis框架
源码地址:github.com中搜索mybatis,找到star
MyBatis有大版本:iBatis(2.0)/iBatis3.0(MyBatis)
1.MyBatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
-
了解持久化:
- 狭义说:将数据永久性的保存到某个介质当中(数据库、硬盘、光盘等等)
- 广泛说:针对于数据的操作,持久化操作(CreateRetrieveUpdateDelete)
-
持久层:跟数据库进行“打交道”层次(讲MVC思想的时候,DataAccessObject-DAO层[持久化层])
-
自定义SQL:提供了专门写SQL语句文件(或者类),称为映射文件
-
映射:表和类,字段和属性
-
Mybatis封装了JDBC的操作(1.加载驱动类,2.获取数据连接,默认情况JDBC的事务是自动提交,3.获取执行SQL语句对象,4.查询结果集ResultSet[处理结果转换为Java对象],5.关闭资源)
-
ORM框架:MyBatis框架、Hibernate框架(JPA标准)、JFinal框架
2.MyBatis的环境搭建
(1)下载Jar包,构建Maven的Java项目,父类维护MyBatis的版本和其他Jar包信息
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>maven-javaee</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.hanpang.mybatis</groupId>
<artifactId>01-MyBatis-HelloWorld</artifactId>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
(2)配置MyBatis的入口文件呢(核心配置文件-资源文件),才能给每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的
- XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。
<?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">
<!-- http://mybatis.org/dtd/mybatis-3-config.dtd 定义该XML中可以使用标签的名称和出现的规则 -->
<!--
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
-->
<configuration>
<environments default="development">
<environment id="development">
<!-- 默认使用JDBC事务管理并且将其设置connection.setAutoCommit(false) -->
<!-- 当执行变更操作(CUD),需要手动提交事务-->
<transactionManager type="JDBC"/>
<!-- 数据源的使用,MyBatis自己实现的连接池 POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/antu_mybatis"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- 自定义SQL语句的映射文件,构建记录和Java对象关系的映射文件 -->
<!-- 映射文件的默认的约定名称:XXXXMapper.xml类似于XXXXServlet.java-->
<mappers>
<mapper resource="mapper/SysUserMapper.xml"/>
</mappers>
</configuration>
(3)映射的 SQL 语句:映射文件,MyBatis执行映射文件中的SQL语句是通过定位完成(如何才知道你执行的是哪条SQL语句),namespace命名空间(可以重复),但是定位的规则组合之后必须唯一(com.hanpang.mapper.SysUserMapper.add)
执行SQL定位规则:namespace+"."+id
<?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">
<!-- http://mybatis.org/dtd/mybatis-3-mapper.dtd定义该XML中可以使用标签的名称和出现的规则 -->
<!-- <!ELEMENT mapper (cache-ref | cache | resultMap* | parameterMap* | sql* | insert* | update* | delete* | select* )+>
-->
<!-- MyBatis ,必须设置命名空间-->
<mapper namespace="com.hanpang.mapper.SysUserMapper">
<insert id="add">
INSERT INTO sys_user (username,password,nick_name,sex,age)
VALUES ('admin',MD5('123456'),'管理员',1,18)
</insert>
</mapper>
(4)熟悉的配方,一套路(跟JDBC的过程类似):代码就不帖了,太烂了,参考官方文档