Mybatis之对原生态JDBC程序中问题总结(1)
来源:互联网 发布:access转mysql 编辑:程序博客网 时间:2024/06/06 12:59
该系列博客是自己整理的传智播客Mybatis学习视频,自己有补充过。
一、环境
JDK1.8、MyEclipse2014、MySQL5.6
创建MySQL数据库。
最终导入脚本内容如下:
/*SQLyog v10.2 MySQL - 5.1.33-community : Database - mybatis**********************************************************************//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `mybatis`;/*Table structure for table `items` */DROP TABLE IF EXISTS `items`;CREATE TABLE `items` ( `id` int(11) NOT NULL AUTO_INCREMENT, `item_name` varchar(32) NOT NULL COMMENT '商品名称', `item_price` float(6,1) NOT NULL COMMENT '商品价格', `item_detail` text COMMENT '商品描述', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;/*Data for the table `items` */insert into `items`(`id`,`item_name`,`item_price`,`item_detail`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!');/*Table structure for table `orderdetail` */DROP TABLE IF EXISTS `orderdetail`;CREATE TABLE `orderdetail` ( `id` int(11) NOT NULL AUTO_INCREMENT, `orders_id` int(32) DEFAULT NULL COMMENT '订单号', `item_id` int(32) DEFAULT NULL COMMENT '商品id', `item_num` int(3) DEFAULT NULL COMMENT '商品数量', `item_price` float(6,1) DEFAULT NULL COMMENT '商品价格', PRIMARY KEY (`id`), KEY `FK_orderdetail_1` (`orders_id`), KEY `FK_orderdetail_2` (`item_id`), CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`), CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`item_id`) REFERENCES `items` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;/*Data for the table `orderdetail` */insert into `orderdetail`(`id`,`orders_id`,`item_id`,`item_num`,`item_price`) values (1,1,1,2,3000.0),(2,1,2,1,6000.0),(3,1,3,3,200.0),(4,2,2,2,6000.0);/*Table structure for table `orders` */DROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(32) NOT NULL, `order_number` varchar(20) NOT NULL COMMENT '订单号', PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;/*Data for the table `orders` */insert into `orders`(`id`,`user_id`,`order_number`) values (1,1,'100001'),(2,1,'100002');/*Table structure for table `user` */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) NOT NULL, `birthday` date DEFAULT NULL, `sex` char(1) DEFAULT NULL, `address` varchar(200) DEFAULT NULL COMMENT '地址', `detail` text, `score` float(4,1) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;/*Data for the table `user` */insert into `user`(`id`,`username`,`birthday`,`sex`,`address`,`detail`,`score`) values (1,'王五',NULL,'2',NULL,NULL,NULL),(10,'张三','2014-07-10','1','北京市','好同志',99.8),(16,'王六',NULL,NULL,NULL,NULL,NULL);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
二、对原生态JDBC程序的总结
2.1 程序编写
使用JDBC查询MySQL数据库中用户表的记录。
1、新建Java Project
2、编写JDBC测试代码
package cn.sunft.mybatis.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Date;/** * JDBC测试程序,总结JDBC中存在的问题 */public class JdbcTest {//定义sql语句,根据名称查询用户表的记录private static String sql = "SELECT * FROM USER WHERE username = ?";public static void main(String[] args) throws SQLException {//数据库连接Connection connection = null;//预编译statement//好处:防止 sql注入,使用预编译的Statement提高数据的性能PreparedStatement preparedStatement = null;//结果集ResultSet resultSet = null;try {//加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//连接数据库connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "root");//构造preparedStatementpreparedStatement = connection.prepareStatement(sql);//向preparedStatement中占位符的位置设置参数preparedStatement.setString(1, "张三");//发起数据库查询请求,得到结果集resultSet = preparedStatement.executeQuery();//遍历查询结果while(resultSet.next()){int id = resultSet.getInt("id");String username = resultSet.getString("username");Date birthday = resultSet.getDate("birthday");System.out.println(id+" "+username+""+birthday);}} catch (Exception e) {e.printStackTrace();}finally{//释放资源if(resultSet!=null){resultSet.close();}if(preparedStatement!=null){preparedStatement.close();}if(connection!=null){connection.close();}}}}测试结果:
10 张三2014-07-10
2.2 问题总结
1、数据库连接,使用时就创建,不使用就立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源的浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将SQL语句硬编码到Java代码中,如果SQL语句修改,需要重新编译Java代码,不利于系统的维护。
设想:将SQL语句配置在xml配置文件中,即使SQL变化,不需要对Java代码进行重新编译。
3、在向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在Java代码中,不利于系统维护。
设想:将SQL语句及占位符号和参数全部配置在xml中。
4、从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
设置:将查询的结果集,自动映射成Java对象。
阅读全文
0 0
- Mybatis之对原生态JDBC程序中问题总结(1)
- 对原生态JDBC程序中问题总结
- 对原生态jdbc程序中问题总结
- 原生态jdbc程序中问题总结
- 对原生态jdbc程序中的问题总结
- 对原生态jdbc程序中的问题总结
- 对原生态jdbc程序中问题总结-敲过代码
- 原生态JDBC程序问题总结
- 对原生态jdbc(单独使用jdbc开发)问题总结
- Java 原生态JDBC问题总结及MyBatis解决方法
- 【SpringMVC+mybatis】1.原生态JDBC编程中的问题总结
- jdbc原生态问题总结
- Mybatis---原生态JDBC编程的问题
- 原生态JDBC程序
- 【Mybatis进阶】-- 原生态jdbc程序开发的短板
- Mybatis学习(一)原生态的JDBC编程总结
- 1.原生态JDBC编程详解与问题总结
- JDBC原生态开发的过程及问题总结
- Keras:基于Python的深度学习库
- 先根遍历__非递归操作
- 66.笔记 MySQL学习——MySQL的BIT数据类型
- Matlab 2015b 激活失效后,重新激活
- Linux的命令
- Mybatis之对原生态JDBC程序中问题总结(1)
- Dijkstra算法与Floyd算法
- 水仙花数的java算法实现
- 我的第一个安卓应用出生过程及总结
- hdu
- 67.笔记 MySQL学习——MySQL程序设计
- Leetcode 2. Add Two Numbers
- C++ 比心呦
- Tools相关1_TortoiseSVN更换或重置登录用户