从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='用户表';
原文地址:https://www.cnblogs.com/jun1019/p/6399182.html