Mybatis学习笔记(一) 之框架原理
原生态JDBC编程中问题总结
1、单独使用jdbc连接数据库
maven依赖包:
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
使用代码
package com.test;
import java.sql.*; public class jdbc {
public static void main(String[] args) {
//数据库连接
Connection connection = null;
//预编译的statement
PreparedStatement preparedStatement = null;
//结果集
ResultSet resultSet = null;
try{
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接,用户名及密码
connection = DriverManager.getConnection("jdbc:mysql://192.168.6.12:3306/test","dev","mybatis");
//定义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 e){
e.printStackTrace();
}
}
}
}
}
2、所遇到问题
1).数据库连接,使用时就创建,但是不使用立即释放,导致对数据库进行频繁的开启和关闭,造成数据库资源浪费,性能下降。
解决:使用数据库连接池管理数据库链接
2).将sql语句硬编码到java代码中,及sql语句也写在代码中,如果sql语句需要修改,需要重新编译java代码,不利于系统维护。
解决:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3).向PreparedStatement中设置参数,对占位符(?)位置和设置参数值也是硬编码在java代码中。不利于维护。
解决:也是将sql和占位符全部配置在xml中
4).从resutSet中遍历结果集数据时,存在硬编码,将获取标的字段进行硬编码,不利于维护。
解决:将查询结果集,自动映射成java对象。
Mybatis框架
Mybatis是一个持久层架构,是apache下的顶级项目, 他是让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要的sql。
mybatis可以将向PreparedStatement中输入参数自动进行输入映射,将程序查询结果集灵活的映射出java对象(输出映射)
mybatis代码下载地址:https://github.com/mybatis/mybatis-3/releases
1、mybatis框架
SqlMapConfig.xml:MyBatis全局配置文件(数据源、事务等mybatis运行环境),不是固定名称;
mapper.xml:映射关系(配置SQL语句);
SqlSessionFactory:创建会话(SqlSession);
SqlSession:操作DB(CRUD),面向用户的接口;
Excutor:执行器(SqlSession内部通过执行器操作DB),接口(有2个实现类,基本执行器和缓存执行器);
mappedstatement:底层封装对象(sql语句、输入参数、结果类型)。
参考
1、链接:http://www.icoolxue.com/album/show/216/
2、深入理解mybatis原理:http://blog.csdn.net/column/details/mybatis-principle.html?page=1
Mybatis学习笔记(一) 之框架原理的更多相关文章
- 【MyBatis学习笔记】
[MyBatis学习笔记]系列之预备篇一:ant的下载与安装 [MyBatis学习笔记]系列之预备篇二:ant入门示例 [MyBatis学习笔记]系列之一:MyBatis入门示例 [MyBatis学习 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
- Mybatis学习笔记二
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...
- Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
随机推荐
- Visual Studio 2015 & C#6.0
Visual Studio 2015 & C#6.0 试用报告,持续更新. 昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...
- artTemplate模板
1.介绍 新一代 javascript 模板引擎. 2.性能(引) 1.性能卓越,执行速度通常是 Mustache 与 tmpl 的 20 多倍(性能测试) 2.支持运行时调试,可精确定位异常模板所在 ...
- Linux Shell脚本入门--awk命令详解
简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...
- WinFrom打开一个窗体关闭另一个窗体
在写Winform程序的时候,经常会遇到“打开一个新的窗体然后关闭本窗体”之类的问题.最常见的就是登陆界面和主窗体了.而最常见的处理方法就是表单判断正确后 new MainForm().Show(); ...
- sqlclr创建表值函数案例
----------------------------------------------:定义表值类型:(1.一定返回的是IEnumerable2.一定带参数3.一定有FillRowMethodN ...
- 个推 Spark实践教你绕过开发那些“坑”
Spark作为一个开源数据处理框架,它在数据计算过程中把中间数据直接缓存到内存里,能大大提高处理速度,特别是复杂的迭代计算.Spark主要包括SparkSQL,SparkStreaming,Spark ...
- hdu 1239 Calling Extraterrestrial Intelligence Again (暴力枚举)
Calling Extraterrestrial Intelligence Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- 一个Shift的后门程序,可以让你可以进入你不知道密码的电脑
1.前提 你可以在平时亲身接触状态电脑,哪怕是在电脑主人不在的时候(虽然主人不在,或者关机了,进入电脑是要密码的). 2.原理 利用电脑连续按5次Shift会触发粘滞键,它会运行c:\winows\s ...
- c# 数据类型占用的字节数
最近一直在使用C#中的关于各种数据类型转化为字节或者字节转化为各种数据类型进行数据解析.但是在此之前必须知道各种数据类型在字节中占的字节数. 所以在此归总. bool -> System.Boo ...
- Restful?
为什么要Restful?为什么不Restful? 本随笔不说为什么要Restful,只说为什么不Restful.首先Http是超文本转移协议而不是控制协议.通常文档中也会使用“资源”来指代超文本. ...