目录
Mybatis框架简介
框架介绍
什么是框架,为什么使⽤框架,框架优点 ?
框架( framework )是⼀个基本概念上的结构,⽤于去解决或者处理复杂的问题。
框架,即framework。其实就是某种应⽤的半成品,就是⼀组组件,供你选⽤完成你⾃⼰的系统。简单说就是使⽤别⼈搭好的舞台,你来做表演。 框架是在特定的领域内解决问题。
优点 :
1). 重⽤代码⼤⼤增加,软件⽣产效率和质量也得到了提⾼。
2). 使⽤框架开发,它提供统⼀的标准,⼤⼤降低了我们的后期维护。
java 开发中常⽤框架 :
1). springmvc spring mybatis(ibatis) -- SSM
2). SpringData SpringBoot SpringCloud
SSM框架在JavaEE开发中所处的位置:
原始JDBC操作查询
-
@Test
-
public void testQuery(){
-
Connection connection = null;
-
PreparedStatement preparedStatement = null;
-
ResultSet resultSet = null;
-
try {
-
//加载数据库驱动
-
Class.forName("com.mysql.cj.jdbc.Driver");
-
//通过驱动管理类获取数据库链接
-
connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/test_wensong","root", "root");
-
//定义sql语句 ? 表示占位符
-
String sql = " select * from user where username = ?";
-
//获取预处理statement
-
preparedStatement = connection.prepareStatement(sql);
-
//设置参数,第⼀个参数为sql语句中参数的序号(从1开始),第⼆个参数为设置的参数值
-
preparedStatement.setString(1, "Tom");
-
//向数据库发出sql执⾏查询,查询出结果集
-
resultSet = preparedStatement.executeQuery();
-
List<User> userList = new ArrayList<User>();
-
//遍历查询结果集
-
while(resultSet.next()){
-
User user = new User();
-
user.setId(resultSet.getInteger("id"));
-
user.setUsername(resultSet.getString("username"))
-
user.setSex(resultSet.getString("sex"));
-
user.setAddress(resultSet.getString("address"));
-
userList.add(user);
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
}finally{
-
//释放资源
-
if(resultSet!=null){
-
try {
-
resultSet.close();
-
} catch (SQLException e) {
-
e.printStackTrace();
-
}
-
}
-
if(preparedStatement!=null){
-
try {
-
preparedStatement.close();
-
} catch (SQLException e) {
-
e.printStackTrace();
-
}
-
}
-
if(connection!=null){
-
try {
-
connection.close();
-
} catch (SQLException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
原始JDBC操作问题分析
原始 jdbc 开发存在的问题如下:
① . 数据库连接创建、释放频繁造成系统资源浪费从⽽影响系统性能 。
② . sql 语句在代码中硬编码,造成代码不易维护,实际应⽤ sql 变化的可能较⼤, sql 变动需要改变 java 代码 。
③ . 查询操作时需要⼿动将结果集中的数据⼿动封装到实体中。插⼊操作时需要⼿动将实体的数据设置到 sql 语句的占位符位置 。
应对上述问题给出的解决⽅案:
① . 使⽤数据库连接池初始化连接资源 。
② . 将 sql 语句抽取到 xml 配置⽂件中 。
③ . 使⽤反射等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射 。
Mybatis框架介绍
mybatis 是⼀个优秀的基于 java 的持久层框架,它内部封装了 jdbc ,使开发者只需要关注 sql语句本身,⽽不需要花费精⼒去处理加载驱动、创建连接、创建 statement 等繁杂的过程 。
mybatis 通过 xml 或注解的⽅式将要执⾏的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进⾏映射⽣成最终执⾏的 sql 语句 。
最后 mybatis 框架执⾏ sql 并将结果映射为 java 对象并返回。采⽤ ORM思想解决了实体和数据库映射的问题,对 jdbc 进⾏了封装,屏蔽了 jdbc api 底层访问细节,使我们不⽤与 jdbc api 打交道,就可以完成对数据库的持久化操作 。
MyBatis 官⽹地址: https://mybatis.org/mybatis-3/
Mybatis 架构
1). mybatis 配置⽂件
SqlMapConfig.xml ,此⽂件作为 mybatis 的全局配置⽂件,配置了 mybatis的运⾏环境等信息。mapper.xml ⽂件即 sql 映射⽂件,⽂件中配置了操作数据库的 sql语句。此⽂件需要在SqlMapConfig.xml 中加载。
2). 通过 mybatis 环境等配置信息构造 SqlSessionFactory 即会话⼯⼚
3). 由会话⼯⼚创建 sqlSession 即会话,操作数据库需要通过 sqlSession 进⾏。
4). mybatis 底层⾃定义了 Executor 执⾏器接⼝操作数据库, Executor接⼝有两个实现,⼀个是基本执⾏器 BaseExecutor 、⼀个是缓存执⾏器 CachingExecutor 。
5). MappedStatement 也是 mybatis ⼀个底层封装对象,它包装了 mybatis 配置信息及 sql映射信息等。mapper.xml ⽂件中⼀个 sql 对应⼀个 MappedStatement 对象, sql 的 id 即是 Mapped statement 的 id 。
6). MappedStatement 对 sql 执⾏输⼊参数进⾏定义,包括 HashMap 、基本类型、 pojo , Executor通过Mapped Statement 在执⾏ sql 前将输⼊的 java 对象映射⾄ sql 中,输⼊参数映射就是 jdbc编程中对 preparedStatement 设置参数。
7). MappedStatement 对 sql 执⾏输出结果进⾏定义,包括 HashMap 、基本类型、 pojo , Executor通过Mapped Statement 在执⾏ sql 后将输出结果映射⾄ java 对象中,输出结果映射过程相当于 jdbc编程中对结果的解析处理过程。
Mybatis快速入门
开发步骤
① . 添加 MyBatis 的坐标
② . 准备数据库环境
③ . 编写 User 实体类
④ . 编写核⼼⽂件 SqlMapConfig.xml
⑤ . 编写映射⽂件 UserMapper.xml
⑥ . 编写测试类
环境搭建
1 导⼊依赖
-
<!--mybatis坐标-->
-
<dependency>
-
<groupId>org.mybatis</groupId>
-
<artifactId>mybatis</artifactId>
-
<version>3.4.5</version>
-
</dependency>
-
<!--mysql驱动坐标-->
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
<version>8.0.16</version>
-
</dependency>
-
<!--单元测试坐标-->
-
<dependency>
-
<groupId>junit</groupId>
-
<artifactId>junit</artifactId>
-
<version>4.12</version>
-
</dependency>
-
<!--lombok坐标-->
-
<dependency>
-
<groupId>org.projectlombok</groupId>
-
<artifactId>lombok</artifactId>
-
<version>1.16.20</version>
-
</dependency>
-
<!--⽇志坐标-->
-
<dependency>
-
<groupId>log4j</groupId>
-
<artifactId>log4j</artifactId>
-
<version>1.2.17</version>
-
</dependency>
2准备数据库环境
-
create database mybatis;
-
use mybatis;
-
CREATE TABLE `user` (
-
`id` int(11) NOT NULL AUTO_INCREMENT,
-
`username` varchar(32) NOT NULL COMMENT '⽤户名称',
-
`sex` char(1) DEFAULT NULL COMMENT '性别',
-
`address` varchar(256) DEFAULT NULL COMMENT '地址',
-
PRIMARY KEY (`id`)
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
insert into `user` (`id`, `username`, `sex`, `address`)
-
values(NULL,'Tom','男','北京');
-
insert into `user` (`id`, `username`, `sex`, `address`)
-
values(NULL,'Jack','男','上海');
-
insert into `user` (`id`, `username`, `sex`, `address`)
-
values(NULL,'Rose','⼥','⻄安');
-
insert into `user` (`id`, `username`, `sex`, `address`)
-
values(NULL,'Poll','⼥','利⽐亚');
3编写 User 实体
-
@Data
-
public class User {
-
private Integer id;
-
private String username;
-
private String sex;
-
private String address; }
4 编写 MyBatis核心文件
⽂件名 : SqlMapConfig.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>
-
<!--配置数据库运⾏环境-->
-
<environments default="development">
-
<environment id="development">
-
<transactionManager type="JDBC"/>
-
<dataSource type="POOLED">
-
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
-
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test_wensong"/>
-
<property name="username" value="root"/>
-
<property name="password" value="root"/>
-
</dataSource>
-
</environment>
-
</environments>
-
<!--配置关联的SQL语句的映射⽂件-->
-
<mappers>
-
<mapper resource="UserMapper.xml"/>
-
</mappers>
-
</configuration>
5 编写 UserMapper 映射⽂件
⽂件名 : 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="userMapper">
-
<!--查询所有⽤户-->
-
<select id="findAll" resultType="com.wensong.pojo.User">
-
select * from user
-
</select>
-
</mapper>
6 查询所有用户
-
public class UserTest {
-
@Test
-
public void findAllTest() throws IOException {
-
//加载核⼼配置⽂件 SqlMapConfig.xml
-
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
-
//构造SQLSessionFactory对象
-
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
-
//构造SQLSession对象
-
SqlSession sqlSession = sqlSessionFactory.openSession();
-
//执⾏查询语句
-
List<User> userList = sqlSession.selectList("userMapper.findAll");
-
for (User user : userList) {
-
System.out.println("user = " + user);
-
}
-
//释放资源
-
sqlSession.close();
-
}
-
}
查询结果显示:
知识小结
-
1). 搭建环境, 导⼊依赖
-
mybatis , mysql数据库驱动, junit , lombok
-
2). 准备数据库环境
-
3). 编写实体类User
-
4). 编写核⼼配置⽂件
-
A. mybatis的运⾏环境 -----> <environments>
-
B. 加载映射配置⽂件 -------> <mappers>
-
5). 编写映射配置⽂件
-
SQL语句
-
6). 编写测试代码
-
A. 加载Mybatis的核⼼配置⽂件
-
B. 构造SqlSessionFactory
-
C. 构造SqlSession
-
D. 调⽤SqlSession中的selectList执⾏查询
-
E. 释放资源