zoukankan      html  css  js  c++  java
  • MyBatis3.2从入门到精通第一章

    第一章
    一、引言
    mybatis是一个持久层框架,是apache下的顶级项目。mybatis托管到goolecode下,再后来托管到github下。(百度百科有解释)
    二、概述
    mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
    mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
    三、框架原理
    sqlMapConfig.xml:(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境
    mapper.xml:配置sql语句
    SqlSessionFactory:(会话工厂),根据配置文件创建工厂作用:创建SqlSession
    SqlSession(会话),是一个接口,面向用户(程序员)的接口作用:操作数据库(发出sql增、删、改、查)
    Executor(执行器),是一个接口(基本执行器、缓存执行器)作用:SqlSession内部通过执行器操作数据库
    mapped statement(底层封装对象)作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型。

    四、总结传统JDBC开发出现的问题

    // 数据库连接 
            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 user where username = ?"; 
                // 获取预处理
                statement preparedStatement = connection.prepareStatement(sql); 
                // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 
                preparedStatement.setString(1, "xx"); 
                // 向数据库发出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) {
                            e.printStackTrace(); 
                            } 
                    } 
                    if (preparedStatement != null) { 
                            try { 
                                preparedStatement.close(); 
                            } catch (SQLException e) { 
                                    e.printStackTrace(); 
                            } 
                    } 
                    if (connection != null) { 
                        try { connection.close(); 
                        } catch (SQLException e) { 
                            e.printStackTrace(); }
                        } 
                    }
            }

    这段代码中充斥着硬编码。
    存在的问题大概分为这么几种:
    第一:对数据连接对象的使用,需要的时候就用,不需要的时候就关闭,这种频繁的操作数据库连接是一件很浪费资源的事情。
    第二:sql语句编写在java代码中,当后期需要维护和修改sql那么这个.java文件需要重新编译。维护成本很高
    第三:preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
    第四:遍历结果集,我相信使用过结果集的人,会对这边的情况很是头疼尤其是查询的字段很多的时候,一不留神字符串写错,那么数据就取不到了。
    。。。
    以上问题在MyBatis中有很好的解决方法。


    作者: HansonQ
    链接:http://www.imooc.com/article/2550
    来源:慕课网

    第一章
    一、引言
    mybatis是一个持久层框架,是apache下的顶级项目。mybatis托管到goolecode下,再后来托管到github下。(百度百科有解释)
    二、概述
    mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
    mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
    三、框架原理
    sqlMapConfig.xml:(是mybatis的全局配置文件,名称不固定的)配置了数据源、事务等mybatis运行环境
    mapper.xml:配置sql语句
    SqlSessionFactory:(会话工厂),根据配置文件创建工厂作用:创建SqlSession
    SqlSession(会话),是一个接口,面向用户(程序员)的接口作用:操作数据库(发出sql增、删、改、查)
    Executor(执行器),是一个接口(基本执行器、缓存执行器)作用:SqlSession内部通过执行器操作数据库
    mapped statement(底层封装对象)作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型。
    作者: HansonQ
    链接:http://www.imooc.com/article/2550
    来源:慕课网
  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/kevin1990/p/6218651.html
Copyright © 2011-2022 走看看