1.1 框架技术概述
1.1.1 框架的概念及作用
1、概念:框架是一种经过检验的、具有特定功能的半成品软件。
2、优点:
①无须顾虑开发中的公共、基础问题
②专注业务逻辑设计、提升开发效率,有助于提高核心业务的开发质量
③架构统一,便于沟通协作、便于与修改维护
④架构汇集了软件分析、设计、实现的成功经验,帮助开发者快速构架结构 优美、运行稳定且性能优良的高质量应用
1.1.2 主流框架技术简介
1、MyBatis框架:
①基于ORM(对象/关系映射)的优秀持久性框架
②特点:
SQL映射器机制。使用XML或注解讲Java中的接口和POJO与SQL 语句结合在一起,使用灵活、简单易学、性能优秀
2、Spring框架
一个开源的、轻量级的企业级应用框架,覆盖了Java EE技术的方方面面
设计目标:
使现有的Java EE技术更容易使用,促进开发人员养成良好的编程习惯
3、Spring MVC框架(全名:Spring Web MVC)
基于Servlet API构建的Web框架,目前最主要的MVC框架
4、Hibernate框架
优秀的持久化框架,典型的ORM解决方案,具有出色的封装性和移植性
5、Struts 2框架
基于Web的MVC框架,借鉴了WebWork框架的优秀设计,大大减少了XML配置
1.2 数据的持久化及ORM
1.2.1 持久化简介
将内存中有用的数据以某种技术保存起来,并且可以再次取出来用(例如说:以文件的方式保存)
1.2.2 ORM简介
是一种在关系型数据库和面向对象编程语言之间进行的数据转换的编程技术
1.3 使用MyBatis框架实现数据库操作
主要思想:是将SQL语句从程序代码中分离出来,配置在XML文件中
1.3.1 搭建基于MyBatis框架的开发环境
1、步骤:
①编写测试类
②创建SQL映射文件
③创建Mapper接口
④建实体类
⑤编写MyBatis框架的核心配置文件
⑥创建项目并添加所需的jar文件
⑦下载所需的jar文件
2、配置文件的部分核心配置文件的常用元素
1、configuration:根节点元素
2、properties:包含数据库连接的相关参数
3、settings
4、environments
5、environment
6、mappers
7、mapper
1.3.2 MyBatis框架的优缺点及其适用场合
1、封装:
SqlSession是对数据库连接的管理,包括事务管理
MyBatis框架通过XML文件管理SQL语句、查询条件及结果累心搞得映射
MyBatis框架实现查询结果集到Java对象的封装
2、缺点:
SQL语句的编写工作量较大,且对开发人员的SQL使用经验有一定要求
原生SQL语句依赖特定的数据库产品,导致数据库移植性差,不能方便的更换数据库
1.4 MyBatis框架的基本要素
三个基本要素:
核心接口和类
核心配置文件
SQL映射文件
1.4.1 MyBatis框架的核心对象:核心接口和类
SqlSessionFactoryBuilder:负责根据配置信息构建SqlSessionFactory实例
1)、方法
①build(Reader,String,Properties)
②build(inputSream,String,Properties)
③build(Configuration)
2)、SqlSessionFactory:是创建SqlSession实例的“工厂”,提供了openSession()方法获取SqlSession实例
openSession():boolean类型的参数用于控制是否开启自动提交
true是开启自动提交,关闭事务控制
false是关闭自动提交,开启事务控制
3)、SqlSession:提供了面向数据库执行SQL命令的能力,最佳的作用域是一次HTTP请求,或方法作用域内
package mapper;
import mapper.sz.RecordQuery;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pojo.Record;
import java.io.InputStream;
import java.util.List;
public class RecordQueryTest {
// 记录日志
private Logger logger = Logger.getLogger(RecordQueryTest.class);
SqlSession sqlSession = null;
/**
* 执行操作之前
* @throws Exception
*/
@Before
public void setUp() throws Exception {
//读取MyBatis框架的核心配置xml
String resource = "mybatis-config.xml";
//获取mybatis-config.xml的输入流
InputStream is = Resources.getResourceAsStream(resource);
//使用SqlSessionFactoryBuilder读取配置文件并构建
//闯进SqlSessionFactory实例
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
sqlSession = factory.openSession();
assert true;
}
@Test
public void testRecordQuery() {
Record record = new Record();
/**
* 赋值
*/
record.setGoodsName("习");
record.setSupplierId(1);
record.setPayStatus(0);
// 获取入库记录
List<Record> list = sqlSession.getMapper(RecordQuery.class).getRecord(record);
System.out.println("srCode\t" + "goodsName\t" + "supplierId\t" + "totalAmount\t" + "payStatus\t" + "createdTime");
for (Record record1 : list){
System.out.println(record1.toString());
}
}
/**
* 执行操作后
* @throws Exception
*/
@After
public void tearDown() throws Exception {
if (sqlSession != null){
sqlSession.close();
}
assert true;
}
}
1.4.2 MyBatis框架的核心配置文件
核心配置文件:MyBatis框架的核心配置文件(mybatis-config.xml)z中设置的是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>
<!--引入包含数据库连接参数的database.properties 文件-->
<properties resource="database.properties">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///cvs_db?serverTimezone=GMT-8"/>
<property name="username" value="root"/>
<property name="password" value="root1234"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--设置别名-->
<typeAliases>
<typeAlias alias="record" type="pojo.Record"/>
</typeAliases>
<!--2.配置MuyBatis框架的运行环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<!--配置文件-->
<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>
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<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="RecordMapper.xml"></mapper>
</mappers>
</configuration>
1、properties元素
是一个配置属性的元素,通过外部配置来动态替换内部定义的属性
2、settings元素
元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等。
3、typeAliases元素
元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少全限定类名的冗余。使用<typeAliases>元素配置别名的方法如下:
<!--定义别名-->
<typeAliases>
<typeAlias type="user" type="com.ssm.po.User"/>
</typeAliases>
除了可以使用<typeAliases>元素自定义别名外,MyBatis框架还默认为许多常见的Java类型(如数值、字符串、日期和集合等)提供相应的类型别名。
4、environment元素
元素用于在配置文件中对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,可以通过<environments>元素配置多种数据源,即配置多种数据库。
使用<environments>元素进行环境配置的示例如下。
<environments default="development">
<environment id="development">
<!--使用JDBC的事务管理-->
<transactionManager type="JDBC" />
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
5、mappers元素
在配置文件中,<mappers>元素用于指定MyBatis映射文件的位置,一般可以使用以下4种方法引入映射器文件,具体如下所示。
(1)使用类路径引入
<mappers>
<mapper resource="com/ssm/mapper/UserMapper.xml" />
</mappers>
(2)使用本地文件路径引入
<mappers>
<mapper url=file:"///D:/com/ssm/mapper/UserMapper.xml" />
</mappers>
(3)使用接口类引入
<mappers>
<mapper class="com.ssm.mapper.UserMapper" />
</mappers>
(4)使用包名引入
<mappers>
<package name="com.ssm.mapper" />
</mappers>
MyBatis配置文件中的主要元素如下所示
<configuration>
<!-- 属性 -->
<properties/>
<!-- 设置 -->
<settings/>
<!-- 类型命名 -->
<typeAliases/>
<!-- 类型处理器 -->
<typeHandlers/>
<!-- 对象工厂 -->
<objectFactory/>
<!-- 插件 -->
<plugins/>
<!-- 配置环境 -->
<environments>
<!-- 环境变量 -->
<environment>
<!-- 事务管理器 -->
<transactionManager/>
<!-- 数据源 -->
<dataSourse/>
</environment>
</environments>