美文网首页
Mybatis:传统jdbc问题以及mybatis的解决方案(一

Mybatis:传统jdbc问题以及mybatis的解决方案(一

作者: GavinZZW | 来源:发表于2021-01-31 21:31 被阅读0次

1.1 分析JDBC操作问题


public static void main(String[] args) {

Connection connection = null;

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

// 加载数据库驱动

Class.forName("com.mysql.jdbc.Driver");

// 通过驱动管理类获取数据库链接

connection =

DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?

characterEncoding=utf-8", "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();

// 遍历查询结果集

while (resultSet.next()) {

int id = resultSet.getInt("id");

String username = resultSet.getString("username");

// 封装User

user.setId(id);

user.setUsername(username);

}

System.out.println(user);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

// 释放资源

if (resultSet != null) {

try {

resultSet.close();

} catch (SQLException e) {

e.printStackTrace();

}

JDBC问题总结:

原始jdbc开发存在的问题如下:

1、 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。

2、 Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变

java代码。

3、 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能

多也可能少,修改sql还要修改代码,系统不易维护。

4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据 库

记录封装成pojo对象解析⽐较⽅便

1.2 问题解决思路

①使⽤数据库连接池初始化连接资源

②将sql语句抽取到xml配置⽂件中

③使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射

1.3 ⾃定义框架设计

使⽤端:
提供核⼼配置⽂件:
sqlMapConfig.xml : 存放数据源信息,引⼊mapper.xml
Mapper.xml : sql语句的配置⽂件信息

框架端:
1.读取配置⽂件
读取完成以后以流的形式存在,我们不能将读取到的配置信息以流的形式存放在内存中,不好操作,可
以创建javaBean来存储
(1)Configuration : 存放数据库基本信息、Map<唯⼀标识,Mapper> 唯⼀标识:namespace + "."

  • id
    (2)MappedStatement:sql语句、statement类型、输⼊参数java类型、输出参数java类型
    2.解析配置⽂件
    创建sqlSessionFactoryBuilder类:
    ⽅法:sqlSessionFactory build():
    第⼀:使⽤dom4j解析配置⽂件,将解析出来的内容封装到Configuration和MappedStatement中
    第⼆:创建SqlSessionFactory的实现类DefaultSqlSession
    3.创建SqlSessionFactory:
    ⽅法:openSession() : 获取sqlSession接⼝的实现类实例对象
    4.创建sqlSession接⼝及实现类:主要封装crud⽅法
    ⽅法:selectList(String statementId,Object param):查询所有
    selectOne(String statementId,Object param):查询单个
    具体实现:封装JDBC完成对数据库表的查询操作
    涉及到的设计模式:
    Builder构建者设计模式、⼯⼚模式、代理模式

相关文章

网友评论

      本文标题:Mybatis:传统jdbc问题以及mybatis的解决方案(一

      本文链接:https://www.haomeiwen.com/subject/mpqdtltx.html