Java Mybatis框架入门基础教程


Posted in Javascript onSeptember 21, 2015

一、Mybatis介绍

MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对象)到数据库中的记录。

二、MyBatis工作流程

(1)加载配置并初始化

触发条件:加载配置文件

配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQL的ID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求 触发条件:API接口层传递请求过来

传入参数:为SQL的ID和传入参数对象

处理过程:

(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回

orm工具的基本思想

无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:

  • 从配置文件(通常是XML配置文件中)得到 sessionfactory.
  • 由sessionfactory  产生 session
  • 在session 中完成对数据的增删改查和事务提交等.
  • 在用完之后关闭session 。
  • 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。

功能架构

Java Mybatis框架入门基础教程

Mybatis的功能架构分为三层:

1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

多需要添加的驱动包:

Java Mybatis框架入门基础教程

下面进行快速入门:

目录如下:

Java Mybatis框架入门基础教程

实体类User

package com.oumyye.model;

public class User {
  private String id;
  private String name;
  private int age;
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
  }

}

映射文件UserMapping.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">

<mapper namespace="com.oumyye.mapping.UserMapping">
  <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
  使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
  resultType="com.oumyye.model.User"就表示将查询结果封装成一个User类的对象返回
  User类就是users表所对应的实体类
  -->
  <!-- 
    根据id查询得到一个user对象
   -->
  <select id="getUser" parameterType="String" 
    resultType="com.oumyye.model.User">
    select * from user where id=#{id}
  </select>
</mapper>

资源文件mybatis.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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <!-- 配置数据库连接信息 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
        <property name="username" value="root" />
        <property name="password" value="root" />
      </dataSource>
    </environment>
  </environments>
  <mappers>

<mapper resource="com/oumyye/mapping/userMapping.xml"/>
   </mappers>
</configuration>

测试类:

package test;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.oumyye.model.User;

public class Tests {
@Test
public void test(){
 String resource = "mybatis.xml";
    //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
    InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);
    //构建sqlSession的工厂
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

SqlSession session = sessionFactory.openSession();
    /**
     * 映射sql的标识字符串,
     * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper标签的namespace属性的值,
     * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
     */
    String statement = "com.oumyye.mapping.UserMapping.getUser";//映射sql的标识字符串
    //执行查询返回一个唯一user对象的sql
    User user = session.selectOne(statement, "1123");
    System.out.println(user.toString());
}
}

结果:

Java Mybatis框架入门基础教程

以上就是关于Java Mybatis框架入门基础教程,希望对大家的学习有所帮助。

Javascript 相关文章推荐
对YUI扩展的Gird组件 Part-2
Mar 10 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
jQuery ajax的功能实现方法详解
Jan 06 Javascript
轻松理解JavaScript之AJAX
Mar 15 Javascript
Javascript实现倒计时时差效果
May 18 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
深入理解ES6中let和闭包
Feb 22 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
Jul 27 Javascript
JS实现仿微博可关闭弹出层效果
Sep 21 #Javascript
jQuery+HTML5美女瀑布流布局实现方法
Sep 21 #Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 #Javascript
Javascript验证方法大全
Sep 21 #Javascript
JavaScript验证Email(3种方法)
Sep 21 #Javascript
基于jQuery实现多层次的手风琴效果附源码
Sep 21 #Javascript
基于insertBefore制作简单的循环插空效果
Sep 21 #Javascript
You might like
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php解决约瑟夫环示例
2014/04/09 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
杨氏矩阵查找的JS代码
2013/03/21 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
2017/02/28 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
python实现将元祖转换成数组的方法
2015/05/04 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
小学教师事迹材料
2014/01/13 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
历史博物馆观后感
2015/06/05 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python