从JDBC程序看为什么需要Mybatis

package com.xuebusi.jdbc;

import java.sql.*;

/**
 *  从JDBC程序看为什么需要Mybatis
 *
 *  1.加载驱动程序和数据库连接所需要的url、用户名和密码都是写死在程序中的,
 *      后期更换数据库的话还要修改程序。所以最好是定义到外部的配置文件中;
 *
 *  2.SQL语句也是写死在程序中:
 *      (1)后期如果需要修改SQL语句的话,必须修改程序,重新编译;
 *      (2)无法达到代码重用的作用;
 *      (3)解决方案:最好将SQL语句也能够写死在配置文件;
 *
 *  3.给SQL语句设置参数有问题:
 *      (1)参数写死了,不便于维护,最好能够从外部传递进来;
 *      (2)需要判断参数的类型,很繁琐,最好能够自动进行判断;
 *      (3)需要手动判断参数的位置(角标),繁琐,最好能够自动判断;
 *
 *  4.遍历结果集也存在问题:
 *      (1)需要判断结果字段的类型,麻烦;
 *      (2)需要手动指定字段名称,麻烦;
 *      最好能够直接将结果集映射为JavaBean;
 *
 *  5.释放资源也有问题,频繁的创建连接和关闭连接,造成资源浪费,影响系统性能,最好能够使用连接池;
 *
 *  而Mybatis正好可以解决上述JDBC程序所存在的一系列问题。
 * Created by SYJ on 2017/2/14.
 */
public class JdbcTest {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            //加载驱动
            Class.forName("com.mysql.jdbc.Driver");

            //创建数据库连接
            String url = "jdbc:mysql://localhost:3306/xuebusi";
            String user = "root";
            String password = "root";
            connection = DriverManager.getConnection(url, user, password);

            //创建PreparedStatement
            String sql = "SELECT * FROM tb_user WHERE id > ? limit ?";
            preparedStatement = connection.prepareStatement(sql);
            //给上面的SQL语句设置第一个参数
            //注意参数角标是从1开始的
            preparedStatement.setLong(1, 1L);
            //给上面的SQL语句设置第二个参数,分页参数
            preparedStatement.setInt(2, 5);
            //执行查询
            resultSet = preparedStatement.executeQuery();

            //遍历结果集
            while (resultSet.next()){
                String username = resultSet.getString("username");
                String pass = resultSet.getString("password");
                String phone = resultSet.getString("phone");
                String email = resultSet.getString("email");
                Date created = resultSet.getDate("created");
                Date updated = resultSet.getDate("updated");

                System.out.println("username:" + username + ",password:" + pass + ",phone:"
                        + phone + ",email:" + email + ",created:" + created + ",updated:" + updated);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if (null != resultSet) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (null != preparedStatement){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (null != connection){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
/** 数据库表结构 */
CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL COMMENT ‘用户名‘,
  `password` varchar(32) NOT NULL COMMENT ‘密码,加密存储‘,
  `phone` varchar(20) DEFAULT NULL COMMENT ‘注册手机号‘,
  `email` varchar(50) DEFAULT NULL COMMENT ‘注册邮箱‘,
  `created` datetime NOT NULL,
  `updated` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE,
  UNIQUE KEY `phone` (`phone`) USING BTREE,
  UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT=‘用户表‘;
时间: 2024-10-14 12:21:01

从JDBC程序看为什么需要Mybatis的相关文章

2016.5.23 Mybatis 框架(二) 原生态jdbc程序 问题总结

jdbc程序 1. 创建JAVA工程 加入jar包 数据库驱动包(mysql) 其实只需要上边的驱动包,因为用的是 Mysql ,一般版本不是问题 ,本机是mysql 5.6 下边的是oracle 驱动包 2. 创建 jdbcTest工程 1 package cn.itcast.mybatis.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedState

【Mybatis】Mybatis入门——OEM模型简介、传统JDBC程序的设计缺陷

OEM:对象关系映射(Object  Relation Mapping) Object(对象):指代的是Java程序中的实体类对象 Relation(关系):指代的是数据库中的表 Mapping(映射):指代的是Java程序中的实体类对象和数据库中的表的对应关系 传统JDBC程序的设计缺陷: 1.大量配置信息硬编码,降低了开发过程中代码的灵活性. 比如,需要定期更换数据库的密码,在更换过程中就需要对硬编码(Java代码)进行修改,违反软件开发的OCP原则. 2.大量的无关业务处理的编码. 3.扩

从JDBC到hibernate再到mybatis之路

一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mapping)框架没出现之前是这样,目前常用的ORM框架有JPA.hibernate.mybatis.spring jdbc等,我一开始也是使用JDBC编程,后面开始使用hibernate,有一次开发一个CRM管理系统使用的是Spring JDBC操作数据库,但个人还是不太喜欢这个框架,本人目前使用的最多还是

JDBC程序执行步骤--repeat

package com.lucia.repeat; import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException; /** * 主要是练习jdbc程序的运行步骤 * @author lenovo * */public class JDBCRepeat {    publ

让你的 Qt 桌面程序看上去更加 native(一共六篇)

<让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编写桌面应用程序,因为文章中大多都是所谓的“细节”,而有时候恰恰是这些“细节”决定着用户体验.同时,这里的程序都是指桌面程序,不包括各个嵌入式平台. 关于 Qt 的介绍这里就不再赘述.这里只说明一点,相比其他的 C++ UI库,Qt 的处理实际上更类似 Java 的 Swing.Qt 的大部分组件都是由自己的绘

不懂程序看的明白《黑客帝国》吗?

前段时间出差周末没事就在酒店又把黑客帝国重温了一遍,不看不要紧,十年后再看发现以前对这部电影的理解完全错了. <黑客1>是 1999 年出的,我还在读高中,第一次看还在学校附近的录像厅,枪版. 整个画面黑漆漆的,看了不到半小时直接睡过去了,醒来时已经是最后的高潮枪战部分,感觉结尾打斗好看,剧情不懂. 2003 年<黑客2&3>一起推出后,又连起来看了一遍,老实说当时很多概念还是没看懂,大概觉得是一个人类反抗机器统治的故事. 如今这次看完后再回想起来,当时很多概念看不太明白可

规范和封装jdbc程序代码

JDBC 部分方法引用工具类 1 package it.cast.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class jdbcUtils { 10 11 private static String

Block变量的的用法,使你的程序看起来清晰明了!

<span style="font-size:24px;">为什么要使用block变量呢? 因为当我们的程序比较繁杂的时候,我们在一个函数中要调用一个函数,还需要在外边来定义,实现,很不方便,但是有了block变量我们就可以在一个函数的内部来定义一个block变量,相当于又在函数的内部来定义了一个函数. int (^max)(int x,int y) = ^(int x,int y)//求两个数的最大值 { return x > y ? x :y; }; NSLog(

不懂程序看的明确《黑客帝国》吗?

十多年后又看了遍<黑客帝国>.扯点和程序有关的非技术话题. 前段时间出差周末没事就在酒店又把黑客帝国重温了一遍,不看不要紧,十年后再看发现以前对这部电影的理解全然错了. <黑客1>是 1999 年出的.我还在读高中,第一次看还在学校附近的录像厅,枪版. 整个画面黑漆漆的,看了不到半小时直接睡过去了,醒来时已经是最后的高潮枪战部分,感觉结尾打斗好看,剧情不懂. 2003 年<黑客2&3>一起推出后,又连起来看了一遍,老实说当时非常多概念还是没看懂,大概觉得是一个人