zoukankan      html  css  js  c++  java
  • 从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='用户表';
  • 相关阅读:
    234. Palindrome Linked List
    Remove duplicates
    Unsorted, maximum ==> sorted
    Find one unique integer
    TwoSum
    13. Roman to Integer
    38. Count and Say
    543. Diameter of Binary Tree
    LuoguP1131 [ZJOI2007]时态同步 (树形DP,贪心)
    Luogu3177 [HAOI2015]树上染色 (树形DP)
  • 原文地址:https://www.cnblogs.com/jun1019/p/6399182.html
Copyright © 2011-2022 走看看