MyBatis学习(一)-- 为什么要使用MyBatis
2017-12-05 22:24
218 查看
MyBatis学习(一)– 为什么要使用MyBatis
标签(空格分隔): MyBatis学习程序例子
问题总结
之前使用JDBC作为数据库持久层,一般需要以下几个步骤: 1. 加载数据库驱动 2. 创建并获得数据库连接(设置连接地址、用户名密码) 3. 创建jdbc statement对象 4. 设置sql语句 5. 设置sql语句中的参数(使用preparedStatement) 6. 通过statement执行sql并获得结果 7. 对sql执行结果并解析处理 8. 释放资源(关闭连接)
代码实例如下:
public static void main(String[] args) { Connection connection = null; 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语句中参数的序号(从1开始),第二个参数为设置的参数值 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 (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
针对上面的代码,总结如下问题:
创建数据库连接、释放资源频繁造成数据库资源的浪费,创建和关闭连接影响性能—-解决方案:采用数据库连接池
将sql硬编码在java代码中,如果sql语句修改需要重新编译java代码,不利于系统的维护 —-解决设想:将sql语句配置在配置文件中,即使sql变化不需要重新编译java代码
在prepareStatement中设置参数,对占位符位置和设置参数值硬编码在java代码中,不利于后期系统维护—解决设想:将sql语句及占位符全部配置在sql文件中
在遍历结果集时,将获取表的字段进行硬编码,不利于后期系统维护 —解决设想:将查询的结果集自动映射成java的pojo对象
相关文章推荐
- 微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?
- 智能指针Boost.smart_ptr学习1--为什么使用智能指针
- Play 框架学习 (一) 什么是框架 为什么使用框架
- Java学习笔记32:Spring整合mybatis使用
- MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping
- 为什么要学习(并使用)C++
- [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?
- Python学习笔记--为什么需要使用__name__=='__main__'
- mybatis学习-入门(1)-单独使用mybatis
- 为什么要花时间学习使用PHP框架
- Mybatis使用学习
- MyBatis学习---使用MyBatis_Generator生成Dto、Dao、Mapping
- [欢度国庆]为什么我们今天还要学习和使用C++?(转载)
- 学习MyBatis从零开始_01(基础环境搭建以及基本使用)
- Android学习札记13:为什么更推荐使用Parcelable来在Activity间传递数据,而不是Serializable?
- mybatis学习-入门(3)-使用mybatis generator的eclipse插件
- C++学习总结_为什么要使用指针
- CCNA学习总结―STP协议―为什么使用STP协议
- 【原创】Asp.net MVC 学习笔记之-为什么使用Html.TextBox方法会出现异常?
- MyBatis学习总结一 —— MyBatis的使用步骤及配置