【Mybatis进阶】-- 原生态jdbc程序开发的短板
2016-04-06 10:09
337 查看
我们都知道,MyBatis是一个优秀的持久层框架。那么为什么会有mybatis?选择使用mybatis有哪些好处?它对持
久层做了哪些优化?在解答这些问题之前,我们先看一下使用原生jdbc开发项目存在哪些问题!
public static void main(String[] args) { // 数据库连接 Connection connection = null; // 预编译的statement,使用预编译的statement提高数据库性能 PreparedStatement preparedStatement = null; // 结果集 ResultSet resultset = null; try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //通过驱动管理类获取数据库链接 connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql"); //定义sql语句?表示占位符 String sql="select * from user where username=?"; //获取预处理statement preparedStatement=connection.prepareStatement(sql); //设置参数,第一个参数为sql语句中参数序号,第二个为设置的参数值 preparedStatement.setString(1, "王五"); //向数据库发出sql执行查询,查询出结果集 resultset=preparedStatement.executeQuery(); //遍历查询结果集 while (resultset.next()) { System.out.println(resultset.getString("id")+""+resultset.getString("username")); } } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if(resultset!=null){ try { resultset.close(); } catch (Exception e2) { e2.printStackTrace(); } } if(preparedStatement!=null){ try { preparedStatement.close(); } catch (Exception e2) { e2.printStackTrace(); } } if(connection!=null){ try { connection.close(); } catch (Exception e2) { e2.printStackTrace(); } } } }
jdbc编程步骤
1、加载数据库驱动2、创建并获取数据库链接
3、创建jdbc statement对象
4、设置sql语句
5、设置sql语句的参数(使用preparedStatement)
6、通过statement执行sql并获取结果
7、对sql执行结果进行解析处理
8、释放资源(resultSet、preparedstatement、connection)
jdbc原生态开发缺点
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
不难总结出,原生态jdbc开发项目,可扩展性和可重复利用性差,系统性能低,不利于项目维护。而想做一个
好的系统,这是都是基础保证。mybatis对这些问题进行了优化。下篇博文将对mybatis框架进行详细介绍。
相关文章推荐
- Hugepages详情
- 简单的文件读写
- h5:记住这些足以胜任前端开发01
- Android开发必备应用
- JVM内幕:Java虚拟机详解
- centos 改动字符集为GB2312的方法
- Python Twisted系列教程2:异步编程初探与reactor模式
- Android利用软引用和弱引用避免OOM的方法
- spring框架学习(五)注解
- 2006: [NOI2010]超级钢琴|ST表|堆
- map
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- Zookeeper学习(十三):Zookeeper的选举算法
- 数字字符串转数组提取每一位
- JNI入门教程之HelloWorld篇
- 为什么软件开发周期通常是预期的两三倍?
- 解决Spring+Quartz无法自动注入bean问题
- LeetCode Reverse Integer
- list
- BS下实现打印gridview