1、Mybatis的介绍
2、Mybatis的入门
a)使用jdbc操作数据库存在的问题 (回顾jdbc)
b)Mybatis的架构
c)Mybatis的入门程序 (重点)
3、Dao的开发方法
a)原始dao的开发方法 (了解)
b)接口的动态代理方式 (重点)
Mybatis–Dao层
(1)案例: jdbc 做一个根据名称查询用户的操作
(2)什么是jdbc?
Java Database Connectivity ,Java数据库连接 ,简称JDBC
Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法
(3)什么是数据库驱动?
数据库提供商对JDBC接口的实现类,如mysql,oracle,sqlserver
//接口
public interface JdbcApi{
public void update();
}
//接口不能直接创建对象
JdbcApi api = new JdbcApi();
api.update();
//Myql厂商
public class MysqlJdbc implements JdbcApi{
public void update(){
//Mysql写了代码
}
}
MysqlJdbc api = new MysqlJdbc();
api.update();
//Oracle 厂商
public class OracleJdbc implements JdbcApi{
public void update(){
//OracleJdbc写了代码
}
}
OracleJdbc api = new OracleJdbc();
api.update();
(1)Jdbc如何操作Mysql?
》1 加载数据库驱动:(将jar包在项目中绑定一下)
》2 创建并获取数据库链接
》3 创建jdbc statement对象
》4 设置sql语句
》5 设置sql语句中的参数(使用preparedStatement)
》6 通过statement执行sql并获取结果
》7 对sql执行结果进行解析处理
》8 释放资源(resultSet、preparedstatement、connection)
(1)频繁创建连接,销毁连接造成极大资源开销
(2)连接池,即一个集合,可以管理连接对象
(3)有什么特点?
》1 可以初始化指定数量的连接
》2 可以指定集合的最大元素个数
》3 可以申请连接池的连接
》4 不用的连接可以放回连接池
搜索功能:
(1) jdbc 做一个根据名称查询用户的操作
(2)初始化数据库
create database mybatis01;
use mybatis01;
drop table if exists `user`;
create table `user` (
`id` int(11) primary key auto_increment,
`username` varchar(32) ,
`birthday` date,
`sex` char(1) ,
`address` varchar(256)
)
insert into `user` values ('1', '王五', '2014-07-10', '2', null);
insert into `user` values ('10', '张三', '2014-08-11', '1', '北京市');
insert into `user` values ('16', '张小明', '2015-07-10', '1', '河南郑州');
insert into `user` values ('22', '陈小明', '2016-07-10', '2', '重庆');
insert into `user` values ('24', '张三丰', '2019-07-10', '1', '天津');
insert into `user` values ('25', '陈小明', '2019-07-10', '1', '杭州');
insert into `user` values ('26', '王五', '2018-07-10', null, null);
(3)配置mysql驱动依赖
创建maven工程,再创建web01模块
配置依赖pom.xml
<properties>
<mysql.version>5.1.32</mysql.version>
</properties>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
(4)分析jdbc编写操作数据库代码的可改进地方
》1 频繁创建、释放数据库连接 ,性能开销大,没有自带连接池
》2 Sql语句写在java代码中 ,硬编码
》3 sql语句的where条件与占位符赋值没有写判断逻辑
》4 数据库记录需封装成pojo对象 User类,大量的编写,转换代码
public class TestJdbc {
@Test
public void test01() throws Exception {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 通过驱动管理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8", "root", "123456");
// 定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
// 获取预处理statement
preparedStatement = connection.prepareStatement(sql);
// 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
// 向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();//将sql发送给数据库
// 遍历查询结果集
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));
}
// 释放资源
resultSet.close();
preparedStatement.close();
connection.close();
}
}
(1)Mybatis是什么?
MyBatis 本是apache的一个开源项目iBatis,是一个基于Java的持久层框架
(2)Mybatis有什么特点?
》1 最简单安装只要两个jar文件+配置几个sql映射文件,自带连接池
》2 sql写在xml里,便于统一管理和优化
》3 sql和代码的分离,提高了可维护性
》4 提供映射标签,支持对象与数据库的orm字段关系映射
》5 提供对象关系映射标签,支持对象关系组建维护
》6 提供xml标签,支持编写动态sql
重点在xml配置,很少写java代码。
(1)mybaits 是对jdbc的封装
(2)重点在配置文件xml
(3)架构图
1:核心 配置文件,放四大信息
ip,port,username,password
2:映射文件
select
update
delete
insert
4:SqlSessionFactory 使用了工厂设计模式的生成session的对象
3:SqlSession对象,支持增删改查,连接