MyBatis框架总结
一. MyBatis简介
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中
使用强大的动态SQL来改进这些状况。
动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素
二. MyBatis是对JDBC技术做的封装
封装了获取连接、创建statement、设置sql参数、执行sql、释放连接过程
封装了将查询结果ResultSet记录映射成实体对象过程
封装了Dao对象实现过程(只提供接口,框架生成实现对象)
三. 程序员使用MyBatis需要做以下工作:
搭建MyBatis框架环境
编写实体类
编写SQL语句
编写Dao接口
获取SqlSession进行数据库操作
四. Mybatis基本应用
实现基本的增删改查功能,下面是本案例的基本框架图
1. 搭建MyBatis框架环境
首先需要引入两个包:mybatis.jar 和sqljdbc42.jar包
设置 mybatis 配置文件: SqlMapConfig.xml, 在 src目录下建立此文件,内容如下:
<?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>
<!-- 为SQL定义部分的parameterType或resultType属性指定自定义类型的别名 -->
<typeAliases>
<typeAlias alias="ServiceStation" type="com.mybatis.models.ServiceStation" />
</typeAliases>
<!-- 设置数据库连接参数 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://mssql-rw-cyp_coopbusiness.vip.test.suixinhuan.com;DatabaseName=CYP_CoopBusiness" />
<property name="username" value="Umanager" />
<property name="password" value="ASD123asd!1" />
</dataSource>
</environment>
</environments>
<!-- 加载SQL定义文件 -->
<mappers>
<mapper resource="com/mybatis/sql/ServiceStation.xml" />
</mappers>
</configuration>
2. 编写实体类
首先创建一个包:com.mybatis.models,并在其下创建与数据库表对应的实体 ServiceStation.java 类:
package com.mybatis.models; import java.util.Date; /**
* @author 自定义类
*
*/
public class ServiceStation {
private String ID;
private String StationName;
private String CityCode;
private String CityName;
private String StationAddr;
private int IsEnabled;
private String Createor;
private String CreateorUser;
private Date CreateDate; public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getStationName() {
return StationName;
}
public void setStationName(String StationName) {
this.StationName = StationName;
}
public String getCityCode() {
return CityCode;
}
public void setCityCode(String CityCode) {
this.CityCode = CityCode;
}
public String getCityName() {
return CityName;
}
public void setCityName(String CityName) {
this.CityName = CityName;
}
public String getStationAddr() {
return StationAddr;
}
public void setStationAddr(String StationAddr) {
this.StationAddr = StationAddr;
}
public int getIsEnabled() {
return IsEnabled;
}
public void setIsEnabled(int IsEnabled) {
this.IsEnabled = IsEnabled;
}
public String getCreateor() {
return Createor;
}
public void setCreateor(String Createor) {
this.Createor = Createor;
}
public String getCreateorUser() {
return CreateorUser;
}
public void setCreateorUser(String CreateorUser) {
this.CreateorUser = CreateorUser;
}
public Date getCreateDate() {
return CreateDate;
}
public void setCreateDate(Date CreateDate) {
this.CreateDate = CreateDate;
}
}
3. 编写SQL定义文件(映射文件)
首先创建一个包:com.mybatis.sql,并在其下创建与这个实体 ServiceStation.java 类对应的映射文件 ServiceStation.xml,详细如下代码所示:
<?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"> <!-- namespace指定和哪个接口映射 -->
<mapper namespace="com.mybatis.dao.ServiceStationMapper">
<!-- resultType是select特有 -->
<select id="findAll" resultType="com.mybatis.models.ServiceStation">
select * from T_TRA_ServiceStation
</select> <select id="findById" resultType="ServiceStation" parameterType="String">
select * from T_TRA_ServiceStation where ID=#{ID}
</select> <insert id="save" parameterType="ServiceStation">
insert into T_TRA_ServiceStation values (#{ID},#{StationName},#{CityCode},#{CityName})
</insert> <update id="update" parameterType="com.mybatis.models.ServiceStation">
update T_TRA_ServiceStation set Createor=#{Createor},CreateorUser=#{CreateorUser} where ID=#{ID}
</update> <!-- 如果parameterType为单个值,#{标识符}表达式标识符没有约定 -->
<delete id="delete" parameterType="String">
delete from T_TRA_ServiceStation where ID=#{ID}
</delete> </mapper>
说明:SQL参数部分,可以使用${标识符}或#{标识符}
,如果使用#{}内部采用预编译机制执行SQL操作。如果使用${}内部采用非预编译过程。
下面是对这几个配置文件一点解释说明:
1、配置文件 SqlMapConfig.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="ServiceStation" type="com.mybatis.models.ServiceStation" /> 这个别名非常重要,在具体的类的映射中,比如:ServiceStation.xml 中 resultType 或 parameterType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面学习到我们再详细介绍说明。
2、SqlMapConfig.xml 里面 的 <mapper resource="com/mybatis/sql/ServiceStation.xml" /> 是包含要映射的类的 xml 配置文件。
3、在ServiceStation.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。
4. 编写Mapper接口(Mapper映射器)
首先创建一个包:com.mybatis.dao,并在其下创建接口 ServiceStationMapper.java 类:
package com.mybatis.dao; import com.mybatis.models.ServiceStation;
import java.util.List; /**
* 编写Mapper接口(Mapper映射器)
* 方法定义参考SQL定义的id、parameterType、resultType属性
* 1.方法名与id属性一致
* 2.参数类型与parameterType属性一致
* 3.返回结果:多行查询List<resultType>;单行查询 resultType;增删改为void或int
* 4.SQL定义文件中namespace="com.mybatis.dao.ServiceStationMapper"
*/
public interface ServiceStationMapper {
public List<ServiceStation> findAll(); public ServiceStation findById(String id); public int save(ServiceStation obj); public int update(ServiceStation obj); public int delete(String id);
}
5. 获取SqlSession操作
package com.mybatis.dao; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; /*
* 获取SqlSession操作(公共方法)
*/
public class MyBatisUtil {
public static SqlSession getSession() {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
Reader reader;
try {
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
return session;
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
return null;
}
}
}
6. 利用SqlSession获取Mapper接口对象
运行程序测试结果,在 src 目录下建立一个包:com.mybatis,并在其下创建一个类:HelloMyBatisProgram, 来运行测试配置环境是否成功,具体代码如下示:
package com.mybatis; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.mybatis.dao.MyBatisUtil;
import com.mybatis.dao.ServiceStationMapper;
import com.mybatis.models.ServiceStation; /*
* 测试类
*/
public class HelloMyBatisProgram {
public static void main(String[] args) {
SqlSession session = MyBatisUtil.getSession();
//由框架生成ServiceStationMapper接口实现对象
ServiceStationMapper ssDao = session.getMapper(ServiceStationMapper.class);
//System.out.println(ssDao.getClass().getName());
System.out.println("===========获取所有服务站列表============");
List<ServiceStation> list = ssDao.findAll();
for(ServiceStation item:list){
System.out.println(item.getStationName()+" "+item.getCityCode()+" "+item.getCityName());
}
System.out.println("===========查找单个服务站信息============");
ServiceStation findObj = ssDao.findById("");
System.out.println(findObj.getStationName()+" "+findObj.getCityCode()+" "+findObj.getCityName());
System.out.println("===========更新单个服务站信息============");
ServiceStation updateObj = ssDao.findById("");
updateObj.setCreateor("张三");
updateObj.setCreateorUser("zhangsan");
// 执行更新
int result = ssDao.update(updateObj);
// 提交事务(注意:增删改之后必须执行提交)
session.commit();
System.out.println("更新返回结果:" + result);
session.close();
}
}
MyBatis框架总结的更多相关文章
- Mybatis框架的多对一关联关系(六)
一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
随机推荐
- 013——C# chart控件时间作为X轴(附教程)
(一)参考文献:C#之Chart控件系列教程——一 (二)下载地址:https://download.csdn.net/download/xiaoguoge11/11838944 (三)视频教程:ht ...
- ElasticSearch 集群环境搭建,安装ElasticSearch-head插件,安装错误解决
ElasticSearch-5.3.1集群环境搭建,安装ElasticSearch-head插件,安装错误解决 说起来甚是惭愧,博主在写这篇文章的时候,还没有系统性的学习一下ES,只知道可以拿来做全文 ...
- SPOJ 2939 QTREE5 LCT
维护信息的方式十分巧妙~ 维护每一棵 splay 中深度最浅,深度最深的点距离最近的白点. 这样非常方便维护,进行区间合并,进行子树维护 很多时候在维护东西的时候最大/最小/深度最小/深度最大会相对容 ...
- [转][c++11]我理解的右值引用、移动语义和完美转发
c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能.有点难理解,于是花时间整理一下自己的理解. 左值.右值 C++中所有的值都必然属于左值.右值二者之一.左值是指表达式结束后依然存在的 ...
- 通过ResultSet获取到rs的记录数的几种方法
方法一:利用ResultSet的getRow方法来获得ResultSet的总行数 ResultSet rs = ps.executeQuery(sql); rs.last(); //移到最后一行 in ...
- 《MySQL数据分析实战》八句箴言前四句解析
大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,从本节课程开始,jacky将从SQL语句入手,给大家解析八句箴言: 不管三七二十一,先把数据show来看: 数 ...
- hive tez调优(3)
根据.方案最右侧一栏是一个8G VM的分配方案,方案预留1-2G的内存给操作系统,分配4G给Yarn/MapReduce,当然也包括了HIVE,剩余的2-3G是在需要使用HBase时预留给HBase的 ...
- [APIO2018]铁人两项——圆方树+树形DP
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...
- AxB Proplem(大数乘法)
描述 Redraiment碰到了一个难题,需要请你来帮忙:给你两个整数,请你计算A × B. 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数. 接着有T组数据,每组数据只有一行 ...
- 使用WebSocket实现服务端和客户端的通信
开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...