一. 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>

View Code

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; }
}

View Code

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>

View Code

说明: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);
}

View Code

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;}      }
}

View Code

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("598212333755587533");  System.out.println(findObj.getStationName()+"  "+findObj.getCityCode()+"  "+findObj.getCityName());System.out.println("===========更新单个服务站信息============");        ServiceStation updateObj = ssDao.findById("598212333755587533");         updateObj.setCreateor("张三");updateObj.setCreateorUser("zhangsan");// 执行更新int result = ssDao.update(updateObj);  // 提交事务(注意:增删改之后必须执行提交)
          session.commit();System.out.println("更新返回结果:" + result);session.close();       }
}

View Code

转载于:https://www.cnblogs.com/li150dan/p/9549758.html

MyBatis框架总结相关推荐

  1. MyBatis框架概述

    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设 ...

  2. Mybatis入门:1(Mybatis框架的环境搭建)

    Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标: <dependencies><dependency><groupId>org.mybat ...

  3. c++框架有哪些_Java Mybatis框架入门教程_v20200726

    MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...

  4. MyBatis框架添加客户有哪些步骤

    在MyBatis的映射文件中,添加操作是通过元素来实现的.例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现. 在上述配置代码中,传入的参数是一个Customer类型,该类型 ...

  5. 【MyBatis学习01】宏观上把握MyBatis框架

    今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目 ...

  6. spring mvc + mybatis 框架搭建 ( idea + gradle)

    spring mvc + mybatis 框架搭建 idea + gradle 刚刚入门,只是个人见解,如有错误或者问题欢迎指出指正. 邮箱: [ wgh0807@qq.com ] 文章引用: [ap ...

  7. MyBatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 本文授权转载请注明来自FreeBuf.COM 链接:https:/ ...

  8. Hibernate学习总结【比较与Mybatis框架之间的区别】

    经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...

  9. 阿里巴巴的持久层抛弃了hibernate,采用的却是MyBatis框架。。。

    最近一直在研究MyBatis源码,作为国内经常使用的持久层框架,其内部代码的设计非常优秀.比如在开发过程中,有能力对框架进行深度的定制化开发,解决BUG也更加得心应手!另外学习开发者是如何设计高扩展性 ...

  10. MyBatis框架的文件配置

    第一步:log4j.properties的配置 原因:Mybatis的日志输出是依赖与log4j的,所以必须要配置 # Global logging configuration log4j.rootL ...

最新文章

  1. QT精彩实例分析第5章-0
  2. C# winform 多线程中创建等待窗体
  3. Bootstrap 进度条
  4. FPGA异步时钟域处理之格雷码转换
  5. [转载] python的numpy.random详细解析
  6. 【优化算法】可变步长LMS算法(VSS-LMS)【含Matlab源码 317期】
  7. android自定义控件.pdf,android自定义控件实例(linearlayout组合textview和imageview).pdf
  8. 量化选股模型—多因子模型
  9. 51单片机之控制转移指令SJMP、LJMP等
  10. 郑强上任后,太原理工大学不断引援!
  11. 多种方法让你在PC上使用iCloud服务
  12. html格式显示图标异常,HTM或HTML图标变成无法显示和识别的解决方法大全
  13. python计算多边形的面积并保留两位小数_计算任意多边形面积的Python实现
  14. 亲测bitLock再次上锁方法
  15. Bigemap中如何添加其他在线地图源
  16. CodeForces 597 A. Divisibility(坑,满满的都是坑)
  17. Kali | MSF入侵Windows11
  18. 磁悬浮软件c语言算法,磁悬浮系统控制算法及实现
  19. Android解决小米手机相机和相册的问题(适配小米手机相机和相册)
  20. 把最新JAVA面试真题(阿里/京东/菜鸟)整理出来,却被自己菜哭了

热门文章

  1. 民生银行java面试_民生银行面试题目 是什么?
  2. Simon‘s writting 全网最全笔记
  3. Financial crime in times of Covid-19 – AML and cyber resilience measures 整理
  4. android常见的限制符和屏幕适配
  5. 网上找的更具纬度经度算计两点之间的距离,得到的结果不准确, 小程序获取用户位置信息返回的纬度经度与实际位置不正确。
  6. python 计算开平方数
  7. idea中maven打包报错:Compilation failure: Compilation failure
  8. 移动端app跳转百度地图
  9. 【MYSQL】【基础知识】【MySQL的基本使用】
  10. mysql partition赋权_Mysql的赋权