Mybatis解决了JDBC编程哪些问题
一:Mybatis简介
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
(1)Mybatis通过xml映射文件或注解的方式将要执行的各种statement(内含sql语句)配置起来;
(2)通过java对象(输入)和statement中的sql进行映射生成最终执行的sql语句;
(3)最后由mybatis框架执行sql并将结果映射成java对象(输出)并返回。
其中的java对象一般是每个数据库表对应的pojo类,当然输入(sql参数)一般为pojo类或其中的属性,输出(sql结果)可以为pojo类、其中属性或list。
二、Mybatis解决了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定义输出结果的类型。
三、原始Dao开发和Mapper动态代理的方法
1、原始Dao开发:
(1)映射文件:sql语句;sql语句的输入参数类型;sql语句的输出类型。

(2)dao接口:定义有哪些数据操作方法的方法名,输入参数类型,返回(输出)类型,这和映射文件中的sql是对应的。

(3)dao接口的实现类:用注入的工厂创建会话,用会话的增删改查方法实现dao接口中定义的方法。

注:这里说向statement中传递参数,我们在映射文件中写的是SQL,但是我们操作的对象是statement,可以理解为在java中我们用statement把sql包了起来,在java中操作statement间接操作sql。
2、Mapper动态代理方式:
(1)Mapper映射文件:Mapper.xml,和dao的映射文件相同。
(2)Mapper接口:Mapper.java,也和dao的接口文件相同。
区别:不用写接口的实现类,不过在用实现类的时候,比上面dao用的时候多两步步,(1)建立会话(2)获取mapper接口的代理对象,然后就可以调用代理对象的方法了(等同于调用dao接口实现类里的方法)。

Mapper接口开发需要遵循以下规范:
(1)Mapper.xml文件中的namespace与mapper接口的类路径相同。(namespace+id才能定位到我们要操作的statement)
(2)Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
(3)Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
(4)Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mybatis解决了JDBC编程哪些问题的更多相关文章
- 用JDBC编程的执行时错误及其解决大全
		用JDBC编程的执行时错误及其解决 用JDBC编程的执行时错误及其解决 源码: .java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlser ... 
- Mybatis解决jdbc编程的问题
		1.1.1 Mybatis解决jdbc编程的问题 1. 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ... 
- 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis
		我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ... 
- JDBC编程的方式
		JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ... 
- Mybatis学习之JDBC缺陷
		1.JDBC存在的问题 1.将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决?(将sql单独 配置在配置文件中) 2.数据库连接 ... 
- 1Mybatis入门--1.1单独使用jdbc编程问题总结
		1.1.1 jdbc程序 Public static void main(String[] args) { Connection connection = null; PreparedStatemen ... 
- 使用jdbc编程实现对数据库的操作以及jdbc问题总结
		1.创建数据库名为mybatis. 2. 在数据库中建立两张表,user与orders表: (1)user表: (2)orders表: 3.创建工程 * 开发环境: * eclipse mars * ... 
- 单独使用JDBC编程
		一.jdbc编程步骤 1. 加载数据库驱动 2. 创建并获取数据库链接 3. 创建jdbc statement对象 4. 设置sql语句 5. 设置sql语句中的参数(使用preparedStatem ... 
- 简单的JDBC编程步骤
		1.加载数据库驱动(com.mysql.jdbc.Driver) 2.创建并获取数据库链接(Connection) 3.创建jdbc statement对象(PreparedStatement) 4. ... 
随机推荐
- redis 模拟搭建集群
			一.本文是在一台 linux 系统上,模拟搭建 redis 集群.3 台主机,3 台从机. 二.redis 安装步骤 http://www.cnblogs.com/fangwu/p/8602357.h ... 
- Matlab中的函数句柄@
			本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50699990 @是Matlab中的句柄 ... 
- C# 低耦合 高内聚
			低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖 内聚性 内聚性又称块内联 ... 
- CAD教程----圆的优化命令viewres
			CAD软件为了节省内存加快打开图纸的速度,会在显示圆形的时候,用很粗燥的直线表示园,这时我们可以不节省内存,使用viewres将圆形完整的显示出来. 这个值设置的越大,圆越圆(好绕口!) 
- codevs——T1576 最长严格上升子序列
			http://codevs.cn/problem/1576/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ... 
- jquery日历插件FullCalendar使用技巧
			原文链接:http://blog.csdn.net/u013493957/article/details/44920341 FullCalendar是一款基于jquery的日历控件,它有着很强大的 ... 
- wifi共享精灵2014.04.25.001已经更新,wifi热点中文名走起!
			五一回来后,有个惊喜,wifi共享精灵有了最新动向.不晓得wifi共享精灵是啥的朋友,我来解释下,它就相当于一个无线路由器.说起来,Wifi共享精灵正式版2014.04.25.001(http://w ... 
- myeclipse集成svn
			svn安装 这个我在博客中的代码管理里面有些,也是一直next.svn代码管理版本号管理器安装好之后. myeclipse的svn插件 方法一: 然后配置MyEclipse的SVN插件,将插件下载下来 ... 
- iOS开发中权限再度梳理
			前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ... 
- USACO 2.2 Runaround Numbers
			Runaround Numbers Runaround numbers are integers with unique digits, none of which is zero (e.g., 81 ... 
