zoukankan      html  css  js  c++  java
  • mybatis入门学习记录(一)

     过硬的技术本领,可以给我们保驾护航,飞得更高。今天开始呢、我们就一起来探讨使用mybatis的好处。

        首先我们一起来先看看原生的JDBC对于数据库的操作,然后总结其中的利弊,为学习mybatis奠定基础。

    1、环境准备:统一使用JDK1.7版本,开发工具Myeclipse,数据库使用的是mysql。 

    2、数据库准备,创建一个test数据库,然后执行数据脚本,脚本如下:

       创建一个user表

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(32) NOT NULL COMMENT '用户名称',
      `birthday` date DEFAULT NULL COMMENT '生日',
      `sex` char(1) DEFAULT NULL COMMENT '性别',
      `address` varchar(256) DEFAULT NULL COMMENT '地址',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

     初始化数据

    INSERT  INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) 
    VALUES
     (1,'王五',NULL,'2',NULL),
     (10,'张三','2014-07-10','1','北京市'),
     (16,'张小明',NULL,'1','河南郑州'),
     (22,'陈小明',NULL,'1','河南郑州'),
     (24,'张三丰',NULL,'1','河南郑州'),
     (25,'陈小明',NULL,'1','河南郑州'),
     (26,'王五',NULL,NULL,NULL);

    3、创建工程,引入jdbc驱动包,编写程序代码,工程结构如下:

    4、编程程序代码类 Mybatis01

    package cn.ycy.mybatis;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Mybatis01 {
    
        public static void main(String[] args) {
                Connection connection = null;
                PreparedStatement preparedStatement = null;
                ResultSet resultSet = null;
    
                try {
                    // 1、加载数据库驱动
                    Class.forName("com.mysql.jdbc.Driver");
                    // 2、通过驱动管理类获取数据库连接
                    connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8", "root", "123456");
                    // 3、定义sql语句 ?代表占位符
                    String sql = "select * from user where username = ?";
                    /**
                     *  4、获取预处理Statement(预处理大致理解:preparedStatement向数据库发送sql语句,数据库需要对sql语句进行编译,然后进行执行
                     *  讲sql编译后存放于缓存中,如果下次还需进行同样的查询,直接从缓存中获取数据,提高数据库执行的效率
                     */
                    preparedStatement = connection.prepareStatement(sql);
                    // 5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                    preparedStatement.setString(1, "张三丰");
                    // 6、向数据库发出sql执行查询,查询出结果集
                    resultSet = preparedStatement.executeQuery();
                    // 7、遍历查询结果集
                    while (resultSet.next()) {
                        System.out.println("获取的用户ID:"+resultSet.getString("id")+",获取的用户地址称为:"
                                +resultSet.getString("address"));
                    }
                    // 8、释放资源
                    closeFolw(connection,preparedStatement,resultSet);
                    
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
        }
        public static void closeFolw(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
            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();
                }
            }
        }
    
        
    }

    5、测试结果如下图

    6、对于原生jdbc操作数据库的简要分析

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

    设想:使用数据库连接池管理数据库连接。

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

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

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

    设想:将sql语句及占位符号和参数全部配置在xml中。

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

    设想:将查询的结果集,自动映射成java对象。

  • 相关阅读:
    【转】前端开发工程师如何在2013年里提升自己
    【转】再谈PHP、Python与Ruby
    【转】从知乎上看到“全栈开发者”讨论之后的自黑
    C#精髓 第四讲 GridView 72般绝技
    web网站第一次加载慢的解决方法
    SQL SERVER 提供了一些时间函数:
    Eval() 中数据格式化或格式化数据
    SQL SERVER 取本月上月日期
    LINQ to SQL连接数据库及语句
    权限管理
  • 原文地址:https://www.cnblogs.com/yuanchaoyong/p/6654315.html
Copyright © 2011-2022 走看看