(一)mybatis介绍

 一、mybatis简介

  • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。      ------摘自百度百科

 

二、mybatis的优势

  • 相对于传统的jdbc编程,如下:
    package test.lx.mybatis.jdbc;  
      
    import java.sql.Connection;  
    import java.sql.DriverManager;  
    import java.sql.PreparedStatement;  
    import java.sql.ResultSet;  
    import java.sql.SQLException;  
      
    /** 
     * jdbc的测试程序 
     *  
     * @author lx 
     *  
     */  
    public class JdbcTest {  
        public static void main(String[] args) {  
            Connection connection = null;  
            //PreparedStatement是预编译的Statement,通过Statement发起数据库的操作  
            //PreparedStatement防止sql注入,执行数据库效率高  
            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, "王五");  
                //向数据库发出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();  
                    }  
                }  
      
            }  
      
        }  
    }  
  • 传统jdbc的问题总结

    1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率
          解决方法:使用数据库连接池
    2、SQL语句是硬编码,如果需求变更需要修改SQL,就需要修改Java代码,需要重新编译,系统不易维护。
          解决方法:将SQL语句统一配置在xml文件中,修改SQL不需要修改Java代码
    3、通过PreparedStatement向占位符设置参数,存在硬编码(参数位置,参数)问题。系统不易维护。
          解决方法:将SQL中的占位符以及对应的参数类型配置在配置文件中,能够自动输入映射
    4、遍历查询结果集中存在硬编码(列名)
    解决方法:自动进行SQL查询结果向Java对象的映射(输出映射)

 

  • Mybatis解决jdbc编程中的问题

1.数据库链接创建、释放频繁造成系统资源浪费从而影响性能,如果使用数据库连接池可以解决此问题。
   解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库连接。
2.SQL语句写在代码中造成代码不易维护,实际应用SQL变化可能较大,SQL变动需要改变Java代码。
   解决:将SQL语句配置在XXXXMapper.xml文件中与Java代码分离。
3.向SQL语句中传参数麻烦,因为SQL语句的where条件不一定,可能多也可能少,占位符和参数要一一对应。
   解决:Mybatis自动将Java对象映射至SQL语句,通过statement中的parameterType定义输入参数的类型。
4.对结果集解析麻烦,SQL变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
   解决:Mybatis自动将SQL执行结果映射至Java对象,通过statement中的resultType定义输出结果的类型

三、 myabatis架构

 

posted @ 2017-09-27 11:10  shyroke、  阅读(203)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~