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. Linux中-POSIX 线程详解

    一种支持内存共享的简捷工具   摘自https://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/ 线程是有趣的 了解如何正确运用线 ...

  2. 图说十大数据挖掘算法(一)K最近邻算法

    如果你之前没有学习过K最近邻算法,那今天几张图,让你明白什么是K最近邻算法. 先来一张图,请分辨它是什么水果 很多同学不假思索,直接回答:“菠萝”!!! 仔细看看同学们,这是菠萝么?那再看下边这这张图 ...

  3. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

  4. CSS3实现两行或三行文字,然后多出的部分省略号代替

    概述 -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中.限制在一个块元素显示的文本的行数. 为了实 ...

  5. python学习笔记之函数(方法)

    def func(x): print 'x is', x x = 2 print 'Changed local x to', x x = 50 func(x) print 'x is still', ...

  6. 19、Java访问修饰符

    修饰符 本类 同一个包中的类 子类 其它类 public 可以访问 可以访问 可以访问 可以访问 protected 可以访问 可以访问 可以访问 不能访问 默认 可以访问 可以访问 不能访问 不能访 ...

  7. Linux下TCP最大连接数受限问题

    一. 文件数限制修改1.用户级别查看Linux系统用户最大打开文件限制:# ulimit -n1024 (1) vi /etc/security/limits.confmysql soft nofil ...

  8. python3.x 和 python2.x关于 urllib的用法

    在python2.x版本中可以直接使用import urllib来进行操作,但是python3.x版本中使用的是import urllib.request来进行操作,下面是简单的例子: python2 ...

  9. OpenWrt的开机启动服务(init scripts)

    参考 https://wiki.openwrt.org/doc/techref/initscripts 以一个简单的例子来说明 #!/bin/sh /etc/rc.common # Example s ...

  10. Linux命令行上执行操作,不退回命令行的解决方法

    问题描述: 如果你现在登录Centos执行了某个操作,但是操作一直占用命令行,命令行显示的也都是这个命令相关的操作,我想做其它事情 ,该怎么办呢 ? 解决方法: 根据<Linux命令行与Shel ...