• mybatis01


    mybatis是一个java持久层框架,java中操作关系型 数据库用的是jdbc,mybatis是对jdbc的一个封装。
    jdk1.7.0_72
    eclipse:eclipse-3.7-indigo
    mysql:mysql5.1
    企业开发中,根据项目大小、特点进行技术选型 ,jdbc操作数据库时效率是很高的,jdbc也是技术选型的参考。
    需要数据库的驱动包:mysql-connector-java-5.1.7-bin.jar  ojdbc14-10.2.0.1.0.jar
    上边是mysql的驱动,下边是oracle的驱动。
    
    1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率
    设想:使用数据库连接池
    2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
    设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
    3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
    设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
    4、遍历查询结果集存在硬编码(列名)。
    设想:自动进行sql查询结果向java对象的映射(输出映射)。
    
    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 目前mybatis在github上托管。git(分布式版本控制,当前比较流程)
    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
    Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

    纯jdbc操作:

    package cn.itcast.mybatis.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class JdbcTest {
        
        
        public static void main(String[] args) {
            Connection connection = null;
            //PreparedStatement是预编译的Statement,通过Statement发起数据库的操作
            //PreparedStatement防止sql注入,
            //写的sql语句是以预编译方式发过去的,sql语句在数据是要进行编译的,编译完成之后会记录到数据库缓存,
            //当第二次在发预编译的sql时发现一样就不再编译了,执行数据库效率高
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            try {
                //加载数据库驱动,驱动在jar包里面
                Class.forName("com.mysql.jdbc.Driver");
                //通过驱动管理类获取数据库链接
                //数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率,设想:使用数据库连接池
                connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");
                //定义sql语句 ?表示占位符
                //sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
                //设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
            String sql = "select * from user where username = ?" ;
                //获取预处理statement
                preparedStatement = connection.prepareStatement(sql);
                //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                //通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
                //设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
                preparedStatement.setString(1, "王五");
                //向数据库发出sql执行查询,查询出结果集
                resultSet =  preparedStatement.executeQuery();
                //遍历查询结果集
                //遍历查询结果集存在硬编码(列名)。
                //设想:自动进行sql查询结果向java对象的映射(输出映射)。
                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();
                    }
                }
    
            }
    
        }
    
    }
  • 相关阅读:
    设计模式-状态模式(25)
    设计模式-访问者模式(24)
    设计模式-观察者模式(22)
    设计模式-中介者模式(21)
    设计模式-行为型模式小结(20)
    设计模式-迭代器模式(19)
    Tomcat安装
    MySQL单表查询
    MySQL表操作
    MySQL表的完整性约束
  • 原文地址:https://www.cnblogs.com/yaowen/p/4868190.html
Copyright © 2020-2023  润新知