mybatis自定义持久层框架

文章内容输出来源:拉勾教育Java高薪训练营

自定义持久层框架分析梳理学习心得

  一、分析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();        
        }     
     }      
    if (preparedStatement != null) {  
      try {         
         preparedStatement.close();     
      } catch (SQLException e) { 
         e.printStackTrace();   
      }  
    }     
    if (connection != null) {   
        try {          
            connection.close(); 
         } catch (SQLException e) {    
            e.printStackTrace();  
         }     
    }   
}

JDBC问题总结:

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

2、sql语句在代码中硬编码,造成代码不易维护,实际应用中sql语句变化的可能性软大,sql变动需要修改java代码;

3、使用preparedStatement向点位符号传递参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql需要修改代码,系统不易维护。

4、对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象,解析比较方便。

二、问题解决思路

数据库频繁创建链接、释放资源:连接池

sql语句及参数硬编码:配置文件

手动解析封装返回结果集:反射、内省

三、自定义框架设计

使用端:

提供核心配置文件

sqlMapConfig.xml:存储数据源信息,引入mapper.xml

mapper.xml:sql语句配置文件信息

框架端:

1、读取配置文件

读取完后以流的形式存在,我们不能将读取到的配置信息以流的形式存在内存中,不好操作,可以创建javaBean来存储

1)configuration:存放数据库基本信息,Map<唯一标识,Mapper>唯一标识:namespace+"."+id

2)  MapperStatement:sql语句、statement类型、输入参数java类型、输出参数java类型

2、解析配置文件

创建sqlSessionFactoryBuilder类:

方法:sqlSessionFactory  builder()

第一:使用dom4j解析配置文件,将解析出来的内容封装到Configuration和Mapperstatement中

第二:创建SqlSessionFactory的实现类DefaultSqlSession

3、创建sqlSessionFactory:

方法:openSession():获取sqlSession接口的实现类实例对象

4、创建sqlSession接口及实现类:主要封闭CRUD方法

方法:selectList(String statementId,Object param):查询所有

          selectOne(String statementId,Object param):查询单个

          close()释放资源

具体实现:封装JDBC完成对数据库表的查询操作

涉及到的设计模式:

构建者模式、工厂模式、代理模式

通过以上分析,逐步可以写出一个自定义的持久层框架,通过对JDBC底层API进行封装的例子,我们可以把这个思路运用到其他API封装的应用上,首先写出API应用的基本流程,然后对其进行分析梳理。这是当时自己学习的一个心得体会。希望能带给小伙伴一点启发。这是高薪训练营的入门课程,主讲老师讲的非常透彻,重点突出,通俗易懂。自己希望成为老师那样的人。

自已是在偶然的情况下知道拉勾网,开始只是了解这是一家招聘网站,在投简历的过程中发现在他家还有一些课程,主讲老师是各大厂的架构师,领域专家。从最初购买《32个Java面试必考点》到现在的《java高薪训练营》,感觉自己钱不会白花,因为拉勾一直在根据时下各公司的招聘情况,不断推出新的课程,这是其他网站不具备的。另外,自己也购买其他网站的课程,感觉钱交了大权在人家手里了,体验非常不好。通过这段时间的努力,希望自己早日进入自己喜欢的岗位。小伙伴们加油!!

猜你喜欢

转载自blog.csdn.net/Aplumage/article/details/108835598