MyBatis 简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

构建项目

使用gradle

compile 'org.mybatis:mybatis:3.4.6'

使用Maven

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>

准备

使用gradle导入MySQL驱动

compile 'mysql:mysql-connector-java:8.0.13'

准备数据库

入门实例

SqlSessionFactory

每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。它可以通过SqlSessionFactoryBuilder产生。而SqlSessionFactoryBuilder的实例则可以从XML配置文件或者一个预先设定好的Configuration的实例构建出来。

MyBatis包含了一个名叫Resources的工具类,它包含一些使用方法,可以使得从classpath或者其他位置加载资源文件更加方便。

我们可以采用如下的方式使用XML构建SqlSessionFactory:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

编写XML配置文件

在XML配置文件中,包含了对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务作用域和控制方式的事务管理器等。

一个简单的配置文件示例如下:

<?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>
<!--配置MyBatis的环境设置 -->
<environments default="development">
<!-- 开发环境下的环境设置-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置数据库连接-->
<dataSource type="POOLED">
<!--MySQL驱动,使用旧版驱动会报错-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--相应的URL,在某个驱动版本之后,不使用SSL会报错,不设置时区也会报错,后面设置接受的字符编码等-->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/java?useSSL=true&amp;
serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--SQL映射-->
<mappers>
<mapper resource="Mapper/StudentMapper.xml"/>
</mappers>
</configuration>

从 SqlSessionFactory 中获取 SqlSession

SqlSessionFactory 是一个工厂类,用来生产SqlSession类实例。

SqlSession 实例包含了所有面向数据库执行SQL命令所需要的全部方法,可以通过SqlSession实例来直接执行已经映射了的SQL语句,

我们可以使用如下的方法获取SqlSession:

SqlSession sqlSession = sqlSessionFactory.openSession();

为结果创建DataObject

为了将从数据库中获取的结果集保存在对象中,我们需要为其创建一个DataObject,按照需求为每个字段创建属性变量。对于一些不需要的属性比如自增的ID,可以无需创建对应的属性变量。

相应的DataObject:

package TestMybatis;

public class DataObject {
private int id;
private String name;
private int num;
private String birthday;
private String department;
//----------Setter and Getter--------------
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getNum() {
return num;
}
public String getBirthday() {
return birthday;
}
public String getDepartment() {
return department;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setNum(int num) {
this.num = num;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public void setDepartment(String department) {
this.department = department;
}
//----------Setter and Getter--------------
@Override
public String toString(){
return getName() + " 的ID是 " + getId() + " 出生于 " + getBirthday() + " 是 " + getDepartment() + "学院的学生";
}
}

为SQL语句创建映射

在MyBatis中,使用的SQL语句都是通过映射定义的。存在XML映射以及Java注解两种方法。对于简单的SQL语句Java注释可以轻松应对,但是对于一些复杂的语句,还是推荐使用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-->
<mapper namespace="StudentMapper">
<!--
在select标签中定义一个select语句。其唯一的ID属性为getStudent,查询所需要使用到的参数类型为int
查询返回的类型为TestMybatis.DataObject,即将查询结果封装成一个DataObject类的对象进行返回
-->
<select id="getStudent" parameterType="int" resultType="TestMybatis.DataObject">
select * from student where id=#{id}
</select>
</mapper>

在这里我们就可以向上翻一翻上面的MyBatis的配置文件,在在下方的mapper中引用了我们刚刚编写的StudentMapper.xml,这样就完成了映射的注册。

剩下的几步

最后使用获取的sqlSession进行查询,并且打印返回的实体类:

DataObject data = sqlSession.selectOne("getStudent",100);
System.out.println(data);

Mybatis入门实例的更多相关文章

  1. Mybatis入门实例解析

    写在前面:本文全程根据Mybatis官网进行入门讲解.毫无疑问,官方文档是学习这门技术最权威的资料,与此同时我们也知道官方文档对待入门小白基本上不太友好,没有入门demo.开篇就是小白们不懂的内容.有 ...

  2. 2.mybatis入门实例 连接数据库进行查询

    1.新建项目,添加mybatis和mysql的jar包 2.在mysql中新建表user[id,name,age] CREATE TABLE `users` ( `id` ) NOT NULL aut ...

  3. MyBatis入门实例-包括实体类与数据库字段对应&CLOB字段处理

    1.我的开发环境是 jdk1.7+ecplise+oracle 11g 用到的jar包:mybatis-3.1.1.jar ojdbc6.jar 2.项目整体结构     3.首先配置conf.xml ...

  4. MyBatis入门实例 ——Mapper.xml(zz)

    <?xml version="1.0" encoding="UTF-8" ?>    <!DOCTYPE mapper        PUBL ...

  5. mybatis入门案例分析

    mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...

  6. mybatis 详解(二)------入门实例(基于XML)

    通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一 ...

  7. mybatis 详解(三)------入门实例(基于注解)

    1.创建MySQL数据库:mybatisDemo和表:user 详情参考:mybatis 详解(二)------入门实例(基于XML) 一致 2.建立一个Java工程,并导入相应的jar包,具体目录如 ...

  8. 1. mybatis 的入门实例

    mybatis 的入门实例 1.创建一个普通的Java项目 1.加入jar包(所有mybatis 和mysql) 2.加入配置文件 src 目录下 (1) db.properties mysql.us ...

  9. mybatis学习一:基于xml与注解配置入门实例与问题

    注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...

随机推荐

  1. .net core DI 注册 Lazy<> 类型

    当我们在 .net core (2.1) 中运行如下代码注入 Lazy<T> 变量的时候: public AccountService(Lazy<IHttpContextAccess ...

  2. ZJOI2019二试游记

    ZJOI2019二试游记 Day -2 今天就要去被虐了!开一篇占个坑.禁赛警告 Day -1 早上zzy,下午zzq,无限懵逼... 过来的时候Sooke,memset0,老K坐我旁边,瑟瑟发抖.. ...

  3. MySQL注入技巧性研究

    0x00 前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,本人最近针对MySQL注入做了 ...

  4. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  5. Ubuntu 16.04下GDB调试

    在linux中还有一个更受大家欢迎的调试工具:GDB.GDB是一个由GNU开源组织发布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具.可以用来调试C,C++程序. GDB功 ...

  6. 什么 是JavaScript中的字符串类型之间的转换问题详解? 部分4

    字符串类型 单双引号都可以!建议使用单引号!(本人建议:个人觉得单个字符串更利于网页优化@特别地方特别处理!); 判断字符串的长度获取方式:变量名.length html中转义符: < < ...

  7. 玩转Python图片处理 (OpenCV-Python )

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类 ...

  8. Vue : Expected the Promise rejection reason to be an Error

    在vue项目中添加ESLint,new 一个 Promise 一直显示错误 :Expected the Promise rejection reason to be an Error 正常来说new ...

  9. C++版 - LeetCode 144. Binary Tree Preorder Traversal (二叉树先根序遍历,非递归)

    144. Binary Tree Preorder Traversal Difficulty: Medium Given a binary tree, return the preorder trav ...

  10. BrainWeb: Simulated Brain Database使用说明

    BrainWeb: Simulated Brain Database使用说明 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ BrainWeb: Sim ...