zoukankan      html  css  js  c++  java
  • 自定义持久层框架设计实现思路

    传统的jdbc代码:

    package com;
    
    import java.sql.*;
    
    /**
     * @author liuyj
     * @Title: JdbcTest
     * @create 2020-05-27 17:31
     * @ProjectName algorithm-Exercise
     * @Description: TODO
     */
    public class JdbcTest {
        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","root","root");
                //定义sql语句 ?表示占位符
                String sql="select * from user where username=?";
                //获取预处理statement
                preparedStatement=connection.prepareStatement(sql);
                //设置参数
                preparedStatement.setString(1,"tom");
                //执行查询获取结果
                resultSet = preparedStatement.executeQuery();
                //遍历查询结果集
                while (resultSet.next()) {
                    int id=resultSet.getInt("id");
                    String username=resultSet.getString("username");
                    System.out.println(username+id);
    
                }
    
            } 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存在的问题:

    自定义框架设计

    使用端(项目):引入自定义持久层框架的jar包

    提供两部分配置信息:数据库配置信息、sql配置信息:sql语句、参数类型、返回值类型

    使用配置文件来提供这两部分信息:

    (1)sqlMapConfig.xml:存放数据库配置信息,引入mapper.xml(存放mapper.xml的全路径)

    (2)Mapper.xml:存放sql语句的配置文件信息

    框架端(自定义持久层框架,本质就是对jdbc代码进行了封装):

    1.读取配置文件

    根据配置文件的路径,加载配置文件成字节输入流,存储在内存中

    创建Resource类
    方法:InputStream getResourceAsStream(String path)

    2.创建两个javabean来存储:存放的就是对配置文件解析出来的内容

    (1)Configuration核心配置类:存放sqlMapConfig.xml解析出来的内容

    (2)MappedStatement:映射配置类,存放mapper.xm解析出来的内容(sql语句,输入参数java类型,输出参数java类型)

    3.解析配置文件:dom4j

    创建类SqlSessionFactoryBuilder 方法:build(InputStream in)

    第一,使用dom4j解析配置文件的内容,将解析出来的内容封装到容器对象中

    第二,创建SqlSessionFactory对象;生产sqlSession:会话对象(工厂模式)

    4.创建SqlSessionFactory接口及实现类DefaultSqlSessionFactory
    第一,openSession:生产sqlSession

    5.创建SqlSession 接口及实现类DefaultSession
    定义对数据库的crud操作:selectList()
    selectOne()
    update()
    delete()

    6.创建Executor接口及实现类SimpleExecutor实现类:
    query(Configuration,MappedStatement,Object... params):执行的是jdbc代码

    欢迎访问:

    易水寒的博客

  • 相关阅读:
    IT题库-134 | String、StringBuffer和StringBuilder的区别
    Java NIO 总结
    Java 性能分析工具-JProfiler
    Java 性能分析工具-MAT
    java 获取dump文件
    GC总结
    String总结
    堆-对象的分配与回收过程
    java 生产环境调优排查总结
    记一次因为Gradle与Lombok不兼容导致编译时的内存溢出 Expiring Daemon because JVM heap space is exhausted
  • 原文地址:https://www.cnblogs.com/liuyj-top/p/12975082.html
Copyright © 2011-2022 走看看