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

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

  1. mybatis由浅入深day01_1课程安排_2对原生态jdbc程序中问题总结

    mybatis 第一天 mybatis的基础知识 1 课程安排: mybatis和springmvc通过订单商品 案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开 ...

  2. 从JDBC到hibernate再到mybatis之路

    一.传统的JDBC编程 在java开发中,以前都是通过JDBC(Java Data Base Connectivity)与数据库打交道的,至少在ORM(Object Relational Mappin ...

  3. 在简单的JDBC程序中使用ORM工具

    本文来自[优锐课]——抽丝剥茧,细说架构那些事. ORM(对象关系映射)是用于数据库编程的出色工具.只需一点经验和Java注释的强大功能,我们就可以相对轻松地构建复杂的数据库系统并利用生产力.关系数据 ...

  4. 如何用java创建一个jdbc程序

    第一个jdbc程序 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和 ...

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

    <让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编 ...

  6. JDBC 程序实例小练习

    JDBC 程序实例问题 编程实现如下功能:在数据库中建立一个表,表名为student,其结构为学号.姓名.性别.年龄.英语.JavaSE程序设计.初级日语.总分,在表中输入多条记录. 学生的总分信息, ...

  7. 采用DTO和DAO对JDBC程序进行进一步优化

    采用DTO和DAO对JDBC程序进行进一步优化 DTO:数据传输对象,主要用于远程调用等需要远程调用对象的地方DAO:数据访问对象,主要实现封装数据库的访问,通过它可以把数据库中的表转换成DTO类 引 ...

  8. JDBC程序优化--提取配置信息放到属性文件中

    JDBC程序优化--提取配置信息放到属性文件中 此处仅仅优化JDBC连接部分,代码如下: public class ConnectionFactory { private static String ...

  9. 【JDBC】学习路径2-编写第一个JDBC程序

    第一章:导入jar包 在未安装MySQL数据库的请务必安装,安装教程:[MySQL]从入门到掌握2-下载安装 connector/J下载地址:https://dev.mysql.com/downloa ...

随机推荐

  1. python——实例方法、静态方法、类方法、类变量和实例变量浅析

    概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...

  2. vim中的高亮全部同样单词的方法

    用vim时,想高亮显示一个单词并查找的方发.将光标移动到所找单词. 1: shift + "*"  向下查找并高亮显示 2: shift + "#"  向上查找 ...

  3. windows 配置ftp server

  4. 在js里双引号里又加单引号的解决方案常用WdatePicker

    EndTime: '<input name="EndTime" type="text" class="editable center decim ...

  5. [Unity-1] Unity简单介绍

    Unity是一套包含图形.声音.物理等功能的游戏引擎,提供了一个强大的关卡编辑器.支持大部分主流3D软件格式,使用C#或者JavaScript等高级语言实现脚本功能.使开发人员无需了解底层复杂技术,高 ...

  6. scala中:: , +:, :+, :::, +++的区别

    4种操作符的区别和联系 一. ::   该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. 用法为 x::list,其中x为加入到 头部的元素,无论x是列表与否,它都只将成为新生成列 ...

  7. 金山PDF

    金山是个很不错的软件公司,金山出PDF,纯粹是完善生态圈!毕竟没FoxitReader专业对PDF的处理上! 官网:芝麻开门 下载:http://wdl1.cache.wps.cn/wps/downl ...

  8. ORACLE经常使用命令

    1 怎样查看数据库中都有什么表? select * from sys.user_tables; 2 怎样链接数据库 sqlplus /nolog;conn sys/oracle as sysdba; ...

  9. Android API之android.provider.ContactsContract.Data

    android.provider.ContactsContract.Data Constants for the data table, which contains data points tied ...

  10. http1.1 协议响应方面参数

    HTTP1.1   提供了一个必须的Host字段,而且建立好一次连接之后可以重复使用.提高用户的上网体验. 响应信息 HTTP/1.1 200 OK                           ...