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 ...
随机推荐
- Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...
- 解决:错误的语法:”XXXX“必须是批处理中仅有的语句
原文:解决:错误的语法:”XXXX“必须是批处理中仅有的语句 SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE ...
- SignalR的服务器广播
可以试试 https://github.com/angular-ui/bootstrap 这个框架啊 [渣译文] SignalR 2.0 系列:SignalR的服务器广播 2014-03-13 09: ...
- 【python】初识python的问题
这两天利用晚上时间简单的了解了一下python语言,在Mac上和Windows上都安装了python,对比两个平台,还是发现在mac上体验比较好一点.安装的版本好像也不一样,语法还有点小区别.简单的对 ...
- TD中{text-overflow:ellipsis;} 用法
Styles: table{ table-layout:fixed; } table td{ text-overflow:ellipsis;overflow:hidden;white-space: n ...
- 重拾C
重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...
- [转]Whirlwind Tour of ARM Assembly
ref:http://www.coranac.com/tonc/text/asm.htm 23.1. Introduction Very broadly speaking, you can divid ...
- [google面试CTCI] 1-8.判断子字符串
[字符串与数组] Q:Assume you have a method isSubstring which checks if one word is a substring of another G ...
- Cassandra
NoSQL之Cassandra 9月初听了一个讲座,演讲者是张月同学,他给我们分享了Cassandra nosql数据库,讲得很精彩,听完之后收益良多. Cassandra是一个noSQL数据库, ...
- fiddle2 代理HTTPS请求无效?解决方法。
fiddle2: 捕获的https请求结尾跟着443,是因为没有开启HTTPS捕获. 解决方案,开启HTTPS捕获: 然后你就看到能正常捕获HTTPS请求了: