Mybatis 学习一
一、mybatis是什么
mybatis是一个持久层的框架,它可以完全替代JDBC,同时提供接口编程。它访问DAO层是不需要实现类的,只需要一个接口和XML文件(或注解)。mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)。
mybatis将数据库的表和POJO映射起来,这样程序员就可以操作POJP来完成相关的逻辑。
二、mybatis框架原理

三、mybatis开发所需jar包
lib下:依赖包
mybatis.jar:核心包
mysql的驱动包
四、配置文件
1、log4j.properties
2、sqlMapConfig.xml : 配置mybatis的运行环境,数据源、事务等
3、xxxMapper.xml : 主要是配置sql语句
五、流程分析
1、MyBatis首先通过配置去生成工厂:SqlSessionFactory。MyBatis提供了构造器SqlSessionFactoryBuilder,它提供了了一个类Configuration来完成构建。
但是我们只要调用SqlSessionFactoryBuilder.build( )就可以得到一个SqlSessionFactory对象,具体完成交给Configuration
工厂可以看作是一个数据库连接池,采用单例模式;
除了通过XML配置文件文件,还可通过java代码来生产工厂,效果一样但比较麻烦,所以推荐用XML方式。
sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--把数据库驱动密码等参数写在配置文件中,方便管理,导入使用即可-->
<properties resource="db.properties"/> <!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--将来也交个Spring管理-->
<mappers>
<mapper resource="customerMapper.xml"/>//扫描某一个映射器
<package name="com.dongtian.mapper"/>//扫描该包下的所以映射器
</mappers>
</configuration>
2、创建工厂的作用是为了创建SqlSession对象,通过工厂的方法:SqlSessionFactory.openSession( ) 可以得到一个SqlSession对象。
SqlSession的作用类类似于JDBC一个Connection对象,代表一个连接资源的启用。
具体作用:获取Mapper接口,
发送SQL给数据库:其实是Executor在干活。SqlSession.getMapper(xxxMapper.class):获取mapper结果,然后通过接口调用接口方法。
控制数据库事务
3、映射器:由一个接口和一个XML文件组成(一一对应)。作用是把SQL查询结果映射成为一个POJO。
接口中定义对数据库操作的方法:public User getUser(String id);通过id查User对象
UserMapper.java
public interface CustomerMapper {
public Customer findUserById(String cname) throws Exception;
}
<!--UserMapper.xml:定义了sql语句,输入参数类型和输出参数类型 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dongtian.mapper.CustomerMapper">
<select id="findUserById" parameterType="java.lang.String" resultType="com.dongtian.dao.Customer">
SELECT * FROM t_customer WHERE cname = #{value}
</select> </mapper>
除了用XML方式外,还可通过注解的方法
public interface CustomerMapper {
@Select("SELECT * FROM t_customer WHERE cname = #{value}")
public Customer findUserById(String cname) throws Exception; }
Mybatis 学习一的更多相关文章
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...
- MyBatis学习总结(七)——Mybatis缓存(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...
- (原创)mybatis学习二,spring和mybatis的融合
mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...
- (原创)mybatis学习一,夯实基础
一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...
- MyBatis学习--简单的增删改查
jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- 【Todo】Mybatis学习-偏理论
之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html <SSM(SpringMVC+Spring+Myba ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
随机推荐
- 最近公共祖先(LCA)问题
目录 最近公共祖先 1.向上标记法 2.树上倍增法 3.Tarjan算法 最近公共祖先 定义:给定一颗有根树,若结点 z 既是 x 的祖先,也是 y 的祖先,则称 z 是 x,y 的公共祖先.在 x, ...
- Linux命令:yum命令
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具 一.yum命令用法 yum repolist ...
- Atcoder Beginner Contest 139E(模拟,思维)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int n;int a[1007][1007] ...
- ABC155F - Perils in Parallel
简述题意 给你N个数对 表示坐标与状态(0/1), M个操作,给定一个区间,区间内的坐标的状态翻转 思路:看到区间修改,很容易想到差分,对数对sort,每个a_i与a_i-1异或构造差分数组b,每次对 ...
- mac下安装并启动RabbitMQ
前言 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的 ...
- 「学习笔记」Treap
「学习笔记」Treap 前言 什么是 Treap ? 二叉搜索树 (Binary Search Tree/Binary Sort Tree/BST) 基础定义 查找元素 插入元素 删除元素 查找后继 ...
- CH8 课后习题
8.1和8.2 #include <iostream> using namespace std; istream& f(istream& in) { int v; in & ...
- 线程与IO
pread/pwrite 定位和读取成为原子操作
- docker-compose 修改zabbix images 添加微信报警插件 时间同步 中文乱码 添加grafana美化zabbix
我们先来看一下我们要修改得 zabbix.yaml github https://github.com/bboysoulcn/awesome-dockercompose ve ...
- Windows 10长脸了!
Windows 10一直毁誉参半,但是在微软的持续升级完善之下,同时随着时间的流逝,已经顺利成为全球第一大桌面操作系统,并开始逐渐甩开Windows 7,全球设备安装量已经达到约8亿部. 根据最新的S ...