SSM框架
web层 springMVC
业务层 spring
持久层 MyBatis
jdbc 程序回顾
-
注册驱动
-
获得连接
-
创建预编译sql语句对象
-
设置参数, 执行
-
处理结果
-
释放资源
-
public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //1.加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //2.通过驱动管理类获取数据库链接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123456"); //3.定义 sql 语句 ?表示占位符 String sql = "select name from user where username = ?"; //4.获取预处理 statement preparedStatement = connection.prepareStatement(sql); //5.设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值 preparedStatement.setString(1, "王五"); //6.向数据库发出 sql 执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); //7.遍历查询结果集 while (resultSet.next()) { System.out.println(resultSet.getString("id") + " "+resultSet.getString(" username")); } } catch (Exception e) { e.printStackTrace(); } finally { //8.释放资源 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 问题分析
-
数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
-
Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变java 代码。
-
使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
-
对结果集解析存在硬编码(查询列名), sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便
-
MyBatis: 持久层的一个框架, 封装了JDBC. 操作数据库
-
为什么要学习MyBatis?
-
JDBC那一套代码和DBUtils都有一些很明显的缺点, JDBC和DBUtils不适合做项目
-
MyBatis是工作里面的主流的持久层框架, 使用几率特别大
-
Mybatis快速入门
1.需求
- 使用MyBatis查询所有的用户, 封装到List集合
2.分析
-
创建Maven工程(java), 添加mybatis的依赖坐标
-
创建pojo (javabean)
-
创建UserDao接口
-
创建UserDao映射文件 (xml配置文件)
-
创建MyBatis核心配置文件SqlMapConfig.xml (xml配置文件)
-
编写java代码测试
-
CREATE DATABASE mybatis_day01; USE mybatis_day01; CREATE TABLE t_user( uid int PRIMARY KEY auto_increment, username varchar(40), sex varchar(10), birthday date, address varchar(40) ); INSERT INTO `t_user` VALUES (null, 'zs', '男', '2018-08-08', '北京'); INSERT INTO `t_user` VALUES (null, 'ls', '女', '2018-08-30', '武汉'); INSERT INTO `t_user` VALUES (null, 'ww', '男', '2018-08-08', '北京');
创建Maven工程(jar)导入坐标
<!--1. 添加依赖--> <dependencies> <!--MyBatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!--lombok 依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> </dependency> </dependencies>
创建User实体类
package com.itheima.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public cl