【29】
一、什么是框架
- 框架是偷懒的程序员将代码进行封装, 之后进行重复使用的过程.
- 框架其实是一个半成品, 以连接数据库为例, 连接数据库使用的驱动, url, 用户名, 密码必须告知框架.
- 程序员在使用框架的时候,通常以配置文件的方式告知框架需要的信息,多数会使用 xml 作为框架的配置文件.
- 因此, 在使用框架开发代码时, 需要编写配置文件, 代码的编写反而会减少.
- 框架都是第三方提供的, 提供的都是 jar 包. 因此, 使用框架前, 必须将框架涉及的 jar 包导入项目中.
常见的 java 开发的框架
- MyBatis, ORM 框架, 底层是对 jdbc 进行了封装
- Spring, 是一个容器
- SpringMVC, 分层框架
- Struts2, 功能类似于 SpringMVC
- Hibernate, 功能类似于 MyBatis
二、什么是Mybatis
这里借用官网的解释:
1、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
2、MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
3、MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
三、Mybatis相对JDBC有哪些优势
回顾之前jdbc连接数据代码,我们看有哪些不好的地方:
1.在创建connection的时候,存在硬编码问题(也就是直接把连接信息写死,不方便后期维护)
2.preparedStatement对象在执行sql语句的时候存在硬编码问题。
3.每次在进行一次数据库连接后都会关闭数据库连接,频繁的开启/关闭数据连接影响性能。
简单的说一下mybatis相对jdbc的优势:
1.mybatis是把连接数据库的信息都是写在配置文件中,因此不存在硬编码问题,方便后期维护。
2.mybatis执行的sql语句都是通过配置文件进行配置,不需要写在java代码中。
3.mybatis的连接池管理、缓存管理等让连接数据库和查询数据效率更高。
1、一个简单的Mybatis框架目录结构
2. MyBatis 环境搭建 jar 包详解
1、 MyBatis 核心 jar
mybatis-3.2.7.jar
2、 MyBatis 依赖的 jar
asm-3.3.1.jar 字节码解析包, 被cglib依赖
cglib-2.2.2.jar 动态代理的实现
commons-logging-1.1.1.jar 日志包
javassist-3.17.1-GA.jar 字节码解析包
log4j-1.2.17.jar 日志包
log4j-api-2.0-rc1.jar 日志
log4j-core-2.0-rc1.jar 日志
slf4j-api-1.7.5.jar 日志
slf4j-log4j12-1.7.5.jar 日志
3、 驱动 jar
mysql-connector-java-5.1.30.jar(或者oracel数据库中的ojdbc6.jar)
3. MyBatis 配置文件详解
1.1 <configuration>
这是配置文件的根元素, 所有的其他元素都要在这个标签下使用.
1.2 <environments>
用于管理所有的环境, 并可以指定默认使用哪个环境. 通过default 属性来指定.
1.3 <environment>
用于配置环境. id 属性用于唯一标识当前环境
1.4 <transactionManager>
用于配置事务管理器
1.4.1 type 属性
用于指定 MyBatis 采用何种方式管理事务
a) JDBC: 表示 MyBatis 采用与原生 JDBC 一致的方式管理事务
b) MANAGED: 表示将事务管理交给其他容器进行, 例如 Spring
1.5 <DataSource>
用于配置数据源, 设置 MyBatis 是否使用连接池技术, 并且配置数据库连接的四个参数
1.5.1 type 属性
用于设置 MyBatis 是否使用连接池技术
a) POOLED, 表示采用连接池技术
b) UNPOOLED, 表示每次都会开启和关闭连接, 不使用连接池技术
c) JNDI, 使用其他容器(例如 Spring)提供数据源
1.6 <property>
用于配置数据库连接参数(driver, url, username, password)
1.7 <mappers>
用于扫描 mapper 信息
2. mapper 映射配置文件详解
2.1 <mapper> 根元素
2.1.1 namespace 属性
用于指定命名空间, mybatis 是通过 namespace+id 的方式来定位 SQL
语句的, 所以必须指定namespace. 通常namespace被配置为全限定路径
2.2 <select>
用于定义查询语句(DQL)
2.2.1 id 属性
用于唯一表示 SQL 语句, 类似于方法的方法名
2.2.2 resultType 属性
用于设定查询返回的数据类型, 要写类型的全限定路径. 如果返回的是集合类型, 要写集合的泛型的类型
3. MyBatis 核心配置文件
1.1 核心配置文件要求:是一个 xml 文件, 命名无要求, 位置无要求, 一般叫mybatis.xml, 放在 src 目录下
<?xml version="1.0" encoding="UTF-8"?>
4. Mapper 映射文件
在 MyBatis 中, 推荐使用 mapper 作为包名, 我们只需要写一个映射配置文件即可. UserMapper.xml, 用于定义要执行的 SQL 语句, 同时设定返回结果的类型
<?xml version="1.0" encoding="UTF-8"?>
5. <properties>标签
1.1 功能
用于加载外部的 properties 文件
<!-- properties加载外部文件 -->
1.2 使用方式
获取 properties 文件中数据时, 要通过${}的方式获取.
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url= jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=scott
jdbc.password=scott
修改主配置文件为:
<environments
1.编写测试代码
首先需要先添加 JUnit 支持(在项目上右键点击buildpath 加入JUnit,后面会详细讲解JUnit的使用)
1. MyBatis 中常用的三个查询方法
1.1 selectList
用于查询多条数据的情况, 返回值是一个 list 集合. 如果没有查到任何数据, 返回没有元素的集合(空集合, 不是 null)
1.2 selectOne
用于查询单条数据的情况, 返回值是一个对象. 如果没有查到任何数据, 返回 null
1.3 selectMap
用于查询多条数据的情况, 多条数据要形成一个 Map 集合. 需要指定哪个属性作为 key. 如果查不到, 返回一个空 map 集合(不是 null)
pojo中的User实体类:
package
Test测试代码:
package
其中用到了日志记录工具log4j和JUnit,下篇会详细讲解