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 相关文章推荐
jQuery使用数组编写图片无缝向左滚动
Dec 11 Javascript
Javascript算符的优先级介绍
Mar 20 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
javascript:window.open弹出窗口的位置问题
Mar 18 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
JS实现日期时间动态显示的方法
Dec 07 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
详解微信小程序 template添加绑定事件
Jun 23 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 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
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
纯JS实现轮播图
2017/02/22 Javascript
Angular.js之作用域scope'@','=','&amp;'实例详解
2017/02/28 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
使用pdb模块调试Python程序实例
2015/06/02 Python
Django的session中对于用户验证的支持
2015/07/23 Python
Python验证企业工商注册码
2015/10/25 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
网吧收银员岗位职责
2013/12/14 职场文书
三八节标语
2014/06/27 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
大学生党员自我评价
2015/03/04 职场文书
小学作文之描写天气
2019/08/15 职场文书
详解MySQL的半同步
2021/04/22 MySQL
Python中常见的导入方式总结
2021/05/06 Python