`

原生jdbc的几点问题和mybatis简介

 
阅读更多

截取自:http://www.cnblogs.com/selene/p/4604605.html

 

以下是原生jdbc连接数据库代码:

public class JdbcTest {
    public static void main(String[] args) {

        // 数据库连接
        Connection connection = null;
        // 预编译的Statement,使用预编译的Statement提高数据库性能
        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 t_user where username = ?";
            // 获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "王五");
            // 向数据库发出sql执行查询,查询出结果集
            resultSet = preparedStatement.executeQuery();
            // 遍历查询结果集
            while (resultSet.next()) {
                System.out.println(resultSet.getString("id") + "  "
                        + resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }
}

 上面代码的问题总结:

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

解决方案:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。

解决方案:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

解决方案:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

解决方案:将查询的结果集,自动映射成java对象。

 

MyBatis是什么?

 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 

  MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

 

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

 

架构图如下



 

 

mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

 2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

 3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

 4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

 5、Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

 6、Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

 7、Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

  • 大小: 24.7 KB
分享到:
评论

相关推荐

    mybatis直接执行sql语句后续之一

    在IT行业中,MyBatis是一个广泛...通过对这些知识点的理解和掌握,开发者能够更好地利用MyBatis进行数据库操作,提高代码的可读性和维护性。对于那些想要深入理解MyBatis源码的开发者,这个系列可能会提供宝贵的见解。

    Spring3+mybatis+mysql整合详解(一)

    总之,Spring、MyBatis和MySQL的整合是Java开发中的常见实践,通过这种方式,我们可以利用Spring的强大管理能力,MyBatis的灵活SQL操作,以及MySQL的稳定数据库支持,构建出高效且易于维护的应用程序。通过学习和...

    mybatis mybatis-spring source jar

    我们可以从以下几个关键点来深入理解 MyBatis: 1. **SqlSession**: 这是 MyBatis 的核心接口,提供了执行 SQL 语句、提交和回滚事务等方法。源码中可以查看到它的实现类 DefaultSqlSession,了解其工作原理。 2. ...

    Spring和mybatis整合

    MyBatis通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,从而降低了数据访问的复杂度。 **Spring与MyBatis的整合** Spring和MyBatis的...

    Mybatis讲义.pdf

    Mybatis是一个流行的Java持久层框架,它简化了JDBC编程的复杂性,通过使用XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。接下来将详细...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Mybatis则是一个轻量级的持久层框架,它解决了JDBC的繁琐代码问题,提供了更方便的SQL映射和对象关系映射。Mybatis允许开发者直接编写SQL,提高了查询效率和灵活性,同时通过XML或注解方式配置和映射原生信息,将...

    SpringMVC+mybatis整合

    MyBatis允许开发者编写自定义的SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通...

    mybatis开发jar包以及源代码Jar包

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 标题中...

    翻译好的mybatis-3.5.2源码包

    在MyBatis 3.5.2中,我们可以深入探讨以下几个关键知识点: 1. **SqlSessionFactoryBuilder**:它是创建SqlSessionFactory的工具类,通过读取配置文件或XML配置流来构建SqlSessionFactory。 2. **...

    mybatis入门基础案例demo

    MyBatis 可以使你更好的控制 SQL 执行,同时提供了一个简单的 XML 或注解配置来映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 本入门基础案例 "mybatis...

    Spring+MyBatis企业应用实战 源码

    MyBatis通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。 在实际项目中,Spring与MyBatis的整合主要体现在以下几个方面: 1. **Spring管理MyBatis的...

    MyBatis的27道面试题

    首先,MyBatis是一个半自动化的ORM框架,它内部封装了JDBC操作,开发者只需关注SQL语句本身,MyBatis通过xml文件或注解来配置和映射原生信息,支持将POJO映射成数据库中的记录。MyBatis的编写原生态SQL特性赋予了...

    Spring与MyBatis整合源码

    MyBatis通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 3. **Spring与MyBatis整合**:整合Spring和MyBatis主要涉及以下几个步骤: ...

    mybatis-3.0.6-SNAPSHOT

    MyBatis 的核心概念包括以下几个方面: 1. **配置文件**:MyBatis 的配置文件定义了数据源、事务管理器以及映射文件的位置。在`mybatis-3.0.6-SNAPSHOT`中,你可能找到一个名为`mybatis-config.xml`的配置文件,这...

    mybatis spring sqlserver mysql

    5. **兼容性**:考虑到不同的数据库可能有不同的分页语法,MyBatis和Spring提供了抽象层,使得开发者可以编写数据库无关的代码。 6. **性能优化**:在SQL Server中,使用`ROW_NUMBER()`配合`OVER()`函数进行分页...

    Spring-Mybatis-Druid示例整合Demo

    在Java Web开发中,Spring、Mybatis和Druid是三个非常重要的组件,它们共同构建了高效、稳定的数据库访问层。Spring作为一个强大的框架,提供了一种模块化和面向切面编程的解决方案;Mybatis则是一个轻量级的持久层...

    spring+springmvc+mybatis+oracle 整合所需jar包

    MyBatis是一个轻量级的持久层框架,它简化了SQL操作,通过XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis提供了与Spring的无缝集成,...

    Spring+SpringMvc+Mybatis整合实例模板代码分享

    SpringMVC是Spring框架的一部分,专门用于处理Web应用的请求-响应模型,而Mybatis则是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects)...

    Spring、SpringMVC、Mybatis整合所需最新jar包

    Mybatis是一个轻量级的持久层框架,它简化了SQL操作,通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects, 普通的Java对象)映射成数据库中的记录。Mybatis消除了几乎所有的JDBC...

Global site tag (gtag.js) - Google Analytics