【Mybatis】是如何解决JDBC的问题的
2017-07-31 20:02
555 查看
关于JDBC已经Mybatis我们都是比较熟悉的,Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,同时解决了JDBC的一些问题,下面总结一下是如何解决的。
【概念】
Mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。目前mybatis在github上托管。
Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
【?】
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,Mybatis是如何解决JDBC的问题的。
一、我们先来看一下传统的JDBC的编程步骤:
1、加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement对象
4、 设置sql语句
5、 设置sql语句中的参数(使用preparedStatement)
6、 通过statement执行sql并获取结果
7、 对sql执行结果进行解析处理
8、 释放资源(resultSet、preparedstatement、connection)
1、数据库连接,使用时就创建,不使用时立即释放,对数据库进行频繁连接开始和关闭,造成数据库资源浪费,影响数据库的性能
设想:使用数据库连接池管理数据库连接
2、将sql语句硬编码到java代码中,如果sql语句修改,需要重新编译java代码,不利于系统维护
设想:将sql语句配置到xml配置文件中,即使sql语句变化,也不需要对java代码进行重新编译
3、向preparedstatement中设置参数,对占位符位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符和参数全部配置到xml中。
4、从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护
设想:将查询结果集,自动映射成java对象
二、如何解决JDBC的问题
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
【小结】
通过使用Mybatis确实解决了JDBC的一些问题,但是原生的JDBC编程步骤是基础,需要好好掌握。
【概念】
Mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。目前mybatis在github上托管。
Mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
【?】
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,Mybatis是如何解决JDBC的问题的。
一、我们先来看一下传统的JDBC的编程步骤:
1、加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement对象
4、 设置sql语句
5、 设置sql语句中的参数(使用preparedStatement)
6、 通过statement执行sql并获取结果
7、 对sql执行结果进行解析处理
8、 释放资源(resultSet、preparedstatement、connection)
/** * 通过单独的jdbc程序,总结其中的问题 * @author RU * */ public class JdbcTest { 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/oa0909?characterEncoding=utf-8", "root", "root"); //定义sql语句 ?表示占位符 String sql = "select * from person where pid = ?"; //获取预处理statement preparedStatement = connection.prepareStatement(sql); //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 preparedStatement.setString(1, "1"); //向数据库发出sql执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); //遍历查询结果集 while(resultSet.next()){ System.out.println(resultSet.getString("pid")+" "+resultSet.getString("pname")); } } 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(); } } } } }上边使用jdbc的原始方法(未经封装)实现了查询数据库表记录的操作,通过以上我们看出JDBC面临的一些问题:
1、数据库连接,使用时就创建,不使用时立即释放,对数据库进行频繁连接开始和关闭,造成数据库资源浪费,影响数据库的性能
设想:使用数据库连接池管理数据库连接
2、将sql语句硬编码到java代码中,如果sql语句修改,需要重新编译java代码,不利于系统维护
设想:将sql语句配置到xml配置文件中,即使sql语句变化,也不需要对java代码进行重新编译
3、向preparedstatement中设置参数,对占位符位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符和参数全部配置到xml中。
4、从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护
设想:将查询结果集,自动映射成java对象
二、如何解决JDBC的问题
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
【小结】
通过使用Mybatis确实解决了JDBC的一些问题,但是原生的JDBC编程步骤是基础,需要好好掌握。
相关文章推荐
- JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
- MyBatis知多少(13)MyBatis如何解决数据库的常见问题
- 如何解决Java通过JDBC访问MySQL时SSL连接告警问题
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- MyBatis的架构和执行的流程,解决jdbc的一些问题
- MyBatis解决JDBC开发中的问题
- 如何解决JMeter通过JDBC访问Oracle和MySQL的问题
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- 如何解决JMeter通过JDBC 访问Oracle 和MySQL的问题
- springboot+mybatis如何解决多数据源问题(三)
- Mybatis如何解决对象嵌套问题
- mybatis解决jdbc编程的问题
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- 解决Mybatis连接Sql server 出现 Cannot load JDBC driver class 'com.mysql.jdbc.Driver '的问题
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- 【ZT】如何解决JSP页面、JDBC显示乱码问题
- [Mybatis错误集锦] 如何解决两张表中字段相同冲突问题
- 如何解决JMeter通过JDBC访问Oracle和MySQL的问题
- Java 原生态JDBC问题总结及MyBatis解决方法
- Mybatis解决jdbc编程的问题