0.引言:软件框架技术简介
软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。
总的来说:框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求!
如图下图所示:我们可以拿不同的框架来搭建我们自己的成品。
1. 为什么需要框架技术:
软件系统随着业务的发展,变得越来越复杂,不同领域的业务所涉及到的知识、内容、问题非常非常多。如果每次都从头开发,那都是一个很漫长的事情,且并不一定能将它做好。团队协作开发时,没有了统一标准,大家各写各的,同样的重复的功能到处都是。由于没有统一调用规范,很难看懂别人写的代码,出现Bug或二次开发维护时,根本无从下手。(无框架不堪回首的黑暗日子请看前面章节的讲述)
而一个成熟的框架,它是模板化的代码,它会帮我们实现很多基础性的功能,我们只需要专心的实现所需要的业务逻辑就可以了。而很多底层功能操作,就可以完完全全不用做太多的考虑,框架已帮我们实现了。这样的话,整个团队的开发效率可想而知。另外对于团队成员的变动,也不用太过担心,框架的代码规范让我们能轻松的看懂其他开发人员所写的代码。
2. 优势:
- 不用再考虑公共问题
- 专心在业务实现上
- 结构统一,易于学习、维护
- 新手也可写出好程序
不要重复造轮子(Stop Trying to Reinvent the Wheel),已经成为开发人员的基本原则。
Java世界中的主流框架技术: Spring、SpringMVC、MyBatis、Struts、Hibernate、SpringBoot等。
1.MyBatis简介
1.1.ORM思想的提出
数据库中数据是以表的形式存在的,而java中使用的数据都是对象型的。所以不得不要将表数据转换成对象数据。 这样就会产生大量的没有技术含量的纯 “体力” 型代码。
while(rs.next()) { Business business = new Business(); business.setBusinessId(rs.getInt("businessId")); business.setPassword(rs.getString("password")); business.setBusinessName(rs.getString("businessName")); business.setBusinessAddress(rs.getString("businessAddress")); business.setBusinessExplain(rs.getString("businessExplain")); business.setStarPrice(rs.getDouble("starPrice")); business.setDeliveryPrice(rs.getDouble("deliveryPrice")); list.add(business); }
上面代码就属于纯 “体力” 型代码。这些代码工作量大、单调枯燥、占用大量开发时间。为了解决这个问题,出现了ORM思想。
ORM(对象-关系映射):完成对象数据到关系型数据映射的机制称为对象-关系映射。
ORM指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。
如图所示的映射模式:
具体和数据库中映射关系如下图:
1.2.MyBatis框架
MyBatis就是一个ORM框架。当然,也是一个持久层框架。
MyBatis封装了JDBC, 将数据库中的表数据自动封装到对象中。这样就可以以面向对象的方式操作数据了。它的出现,使得开发工作量变小了,可以将精力集中在业务逻辑的处理上。代码精简易读。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。 也就是说:iBatis3.0之后都要改名为MyBatis 。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
实际上,MyBatis最核心的功能,就是实现了输入映射和输出映射。
1.3 原始jdbc操作(查询数据)
1.4 原始jdbc操作(插入数据)
1.5 原始jdbc操作的分析
原始 JDBC 的操作问题分析
- 频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能。
- sql 语句在代码中硬编码,如果要修改 sql 语句,就需要修改 java 代码,造成代码不易维护。
- 查询操作时,需要手动将结果集中的数据封装到实体对象中。
- 增删改查操作需要参数时,需要手动将实体对象的数据设置到 sql 语句的占位符。
原始 JDBC 的操作问题解决方案
- 使用数据库连接池初始化连接资源。
- 将 sql 语句抽取到配置文件中。
- 使用反射、内省等底层技术,将实体与表进行属性与字段的自动映射
1.6 Mybatis是什么操作?
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
MyBatis官网地址:http://www.mybatis.org/mybatis-3/
1.7 Mybatis的快速入门
MyBatis开发步骤:
传统项目是这样的(现在大仙们应该都用maven,没事):
①添加MyBatis的jar包(maven项目自动下就行)
②创建Student数据表
③编写Studentr实体类
④编写映射文件StudentMapper.xml
⑤编写核心文件MyBatisConfig.xml(maven项目写在yml里就行)
⑥编写测试类
1.7.1 环境搭建
1)导入MyBatis的jar包
- mysql-connector-java-5.1.37-bin.jar
- mybatis-3.5.3.jar
- log4j-1.2.17.jar
2)创建student数据表
CREATE DATABASE db1; USE db1; CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT ); INSERT INTO student VALUES (NULL,'张三',23); INSERT INTO student VALUES (NULL,'李四',24); INSERT INTO student VALUES (NULL,'王五',25); SELECT * FROM student;
3)编写Student实体
public class Student { private Integer id; private String name; private Integer age; //省略get个set方法 }
4)编写StudentMapper.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!--MyBatis的DTD约束--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper:核心根标签 namespace属性:名称空间 --> <mapper namespace="StudentMapper"> <!-- select:查询功能的标签 id属性:唯一标识 resultType属性:指定结果映射对象类型 parameterType属性:指定参数映射对象类型 --> <select id="selectAll" resultType="student"> SELECT * FROM student </select> </mapper>
5)编写MyBatis核心文件
<?xml version="1.0" encoding="UTF-8" ?> <!--MyBatis的DTD约束--> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration 核心根标签--> <configuration> <!--引入数据库连接的配置文件--> <properties resource="jdbc.properties"/> <!--配置LOG4J--> <settings> <setting name="logImpl" value="log4j"/> </settings> <!--起别名--> <typeAliases> <typeAlias type="com.itheima.bean.Student" alias="student"/> <!--<package name="com.itheima.bean"/>--> </typeAliases> <!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个--> <environments default="mysql"> <!--environment配置数据库环境 id属性唯一标识--> <environment id="mysql"> <!-- transactionManager事务管理。 type属性,采用JDBC默认的事务--> <transactionManager type="JDBC"></transactionManager> <!-- dataSource数据源信息 type属性 连接池--> <dataSource type="POOLED"> <!-- property获取数据库连接的配置信息 --> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- mappers引入映射配置文件 --> <mappers> <!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 --> <mapper resource="StudentMapper.xml"/> </mappers> </configuration>
1.7.2编写测试代码
/* 控制层测试类 */ public class StudentController { //创建业务层对象 private StudentService service = new StudentServiceImpl(); //查询全部功能测试 @Test public void selectAll() { List<Student> students = service.selectAll(); for (Student stu : students) { System.out.println(stu); } } }
运行结果如下:
1.8 知识小结
- 框架:框架是一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求。
- ORM:对象关系映射,数据和实体对象的映射。
- MyBatis:是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC。
3. 导入我的项目步骤指导
3.1 项目链接
https://download.csdn.net/download/weixin_45525272/85720643
3.2 导入数据库
SQL文件在下载链接里
3.3 导入项目
打开项目结构
点击project,设置jdk
添加个依赖包