zoukankan      html  css  js  c++  java
  • (一)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架构

  • 相关阅读:
    ORACLE删除当前用户下所有的表的方法
    解决Tomcat对POST请求文件上传大小的限制
    Windows下如何查看某个端口被谁占用
    javamail彻底解决中文乱码的方法
    Tomcat通过setenv.bat指定jdk和jre(相对路径)
    Linux nohup命令详解
    shell 重启java 程序
    jstack命令执行报错:Unable to open socket file: target process not responding or HotSpot VM not loaded
    ToStringBuilder.reflectionToString用法
    vue自定义指令+只能输入数字和英文+修改v-model绑定的值
  • 原文地址:https://www.cnblogs.com/shyroke/p/7600711.html
Copyright © 2011-2022 走看看