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='用户表';