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对象。

原文地址:https://www.cnblogs.com/yuanchaoyong/p/6654315.html