搭建一个简单的mybatis框架

一、Mybatis介绍

  

  MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

1、Mybatis实现了接口绑定,使用更加方便。

在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

2、对象关系映射的改进,效率更高

3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

对于IBatis与MyBatis的区别就不再多说了,感兴趣的朋友可以研究一下

MyBatis的框架架构

看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示:

原理详解:

MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

MyBatis的优缺点

优点:

1、简单易学

mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现

2、灵活

mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

3、解除sql与程序代码的耦合

通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

4、提供映射标签,支持对象与数据库的orm字段关系映射

5、提供对象关系映射标签,支持对象关系组建维护

6、提供xml标签,支持编写动态sql。

缺点:

1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

4、二级缓存机制不佳 

总结

mybatis的优点同样是mybatis的缺点,正因为mybatis使用简单,数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql的使用水平上了。sql写在xml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,也非常受限。

mybatis没有hibernate那么强大,但是mybatis最大的优点就是简单小巧易于上手,方便浏览修改sql语句。

二、mybatis快速入门

2.1、准备开发环境

1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:

  

2、添加相应的jar包

  【mybatis

  mybatis-3.1.1.jar

  【MYSQL驱动包】
    mysql-connector-java-5.1.7-bin.jar

   

3、创建数据库和表,针对MySQL数据库

  SQL脚本如下:

1 create database mybatis;
2 use mybatis;
3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
4 INSERT INTO users(NAME, age) VALUES(‘孤傲苍狼‘, 27);
5 INSERT INTO users(NAME, age) VALUES(‘白虎神皇‘, 27);

  将SQL脚本在MySQL数据库中执行,完成创建数据库和表的操作,如下:

  

  到此,前期的开发环境准备工作全部完成。

2.2、使用MyBatis查询表中的数据

  1、添加Mybatis的配置文件conf.xml

  在src目录下创建一个conf.xml文件,如下图所示:

  

  conf.xml文件中的内容如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4     <environments default="development">
 5         <environment id="development">
 6             <transactionManager type="JDBC" />
 7             <!-- 配置数据库连接信息 -->
 8             <dataSource type="POOLED">
 9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
11                 <property name="username" value="root" />
12                 <property name="password" value="XDP" />
13             </dataSource>
14         </environment>
15     </environments>
16
17 </configuration>

  2、定义表所对应的实体类,如下图所示:

  

  User类的代码如下:

 1 package me.gacl.domain;
 2
 3 /**
 4  * @author gacl
 5  * users表所对应的实体类
 6  */
 7 public class User {
 8
 9     //实体类的属性和表的字段名称一一对应
10     private int id;
11     private String name;
12     private int age;
13
14     public int getId() {
15         return id;
16     }
17
18     public void setId(int id) {
19         this.id = id;
20     }
21
22     public String getName() {
23         return name;
24     }
25
26     public void setName(String name) {
27         this.name = name;
28     }
29
30     public int getAge() {
31         return age;
32     }
33
34     public void setAge(int age) {
35         this.age = age;
36     }
37
38     @Override
39     public String toString() {
40         return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
41     }
42 }

  3、定义操作users表的sql映射文件userMapper.xml

  创建一个me.gacl.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:

  

  userMapper.xml文件的内容如下:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 4 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
 5  -->
 6 <mapper namespace="me.gacl.mapping.userMapper">
 7     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
 8     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
 9     resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
10     User类就是users表所对应的实体类
11     -->
12     <!--
13         根据id查询得到一个user对象
14      -->
15     <select id="getUser" parameterType="int"
16         resultType="me.gacl.domain.User">
17         select * from users where id=#{id}
18     </select>
19 </mapper>

  4、在conf.xml文件中注册userMapper.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4     <environments default="development">
 5         <environment id="development">
 6             <transactionManager type="JDBC" />
 7             <!-- 配置数据库连接信息 -->
 8             <dataSource type="POOLED">
 9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
11                 <property name="username" value="root" />
12                 <property name="password" value="XDP" />
13             </dataSource>
14         </environment>
15     </environments>
16
17     <mappers>
18         <!-- 注册userMapper.xml文件,
19         userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
20         <mapper resource="me/gacl/mapping/userMapper.xml"/>
21     </mappers>
22
23 </configuration>

  5、编写测试代码:执行定义的select语句

  创建一个Test1类,编写如下的测试代码:

package me.gacl.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import me.gacl.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test1 {

    public static void main(String[] args) throws IOException {
        //mybatis的配置文件
        String resource = "conf.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource);
        //构建sqlSession的工厂
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */

      //在命名空间“me.gacl.mapping.userMapper”中定义了一个名为“getUser”的映射语句,
      //这样它就允许你使用指定的完全限定名“me.gacl.mapping.userMapper.getUser”来调用映射语句,
      //格式:命名空间名(namespace)+映射语句名(id)

        String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的标识字符串
        //执行查询返回一个唯一user对象的sql
        User user = session.selectOne(statement, 1);
        System.out.println(user);
    }
}

  执行结果如下:

  

  可以看到,数据库中的记录已经成功查询出来了。

时间: 2024-10-06 16:29:49

搭建一个简单的mybatis框架的相关文章

使用idea搭建一个简单的SSM框架:(3)配置spring+mybatis

在此之前请先查看: 使用idea搭建一个简单的SSM框架:(1)使用idea创建maven项目 使用idea搭建一个简单的SSM框架:(2)配置springMVC 1 配置spring和mybatis整合文件 spring和mybatis整合分为三个步骤:(1)配置数据库,(2)配置SqlSessionFactoryBean (来自mybatis-spring),(3)配置MapperScannerConfigurer,该配置就我们通过接口定义的方法,就是mybatis的xml对应的namesp

使用idea搭建一个简单的SSM框架:(1)使用idea创建maven项目

首先使用的开发环境为idea2016.3.5+maven,使用的spring版本为4.1.7. 在使用idea创建maven项目时要注意两个事项 1.如下图所示 要选择simple java application的选项 2.在创建时要添加archetypeCatalog=internal选项,要不然很可能创建失败,或者一直卡在创建那里 接下来点击next选择项目放置的位置点击finish就能顺利创建maven项目了.当然在创建完成后可能会发现还是有很多缺少的文件夹,如下 在main中只有res

【转】使用webmagic搭建一个简单的爬虫

[转]使用webmagic搭建一个简单的爬虫 刚刚接触爬虫,听说webmagic很不错,于是就了解了一下. webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. 这句话说的真的一点都不假,像我这样什么都不懂的人直接下载部署,看了看可以调用的方法,马上就写出了第一个爬虫小程序. 以下是我学习的过程: 首先需要下载jar:http://webmagic.io/download.html 部署好后就建一个class继承PageProcesso

如何搭建一个简易的Web框架

Web框架本质 什么是Web框架, 如何自己搭建一个简易的Web框架?其实, 只要了解了HTTP协议, 这些问题将引刃而解. 简单的理解:  所有的Web应用本质上就是一个socket服务端, 而用户的浏览器就是一个socket客户端. 用户在浏览器的地址栏输入网址, 敲下回车键便会给服务端发送数据, 这个数据是要遵守统一的规则(格式)的, 这个规则便是HTTP协议. HTTP协议主要规定了客户端和服务器之间的通信格式 浏览器收到的服务器响应的相关信息可以在浏览器调试窗口(F12键开启)的Net

用nodejs搭建一个简单的服务器

使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安装成功 [常用命令] 切换盘符 d:进入文件夹 cd nodejs返回上一级目录 cd..清屏 cls展示目录 dir复制文件名 选中右键--复制历史操作 上箭头 执行文件 node 文件名(在文件文件夹目录中)停止命令行 ctrl+c nodejs可以使用的ECMAScript.读写文件.数据库操

学生成绩管理后台第二项任务:初步建模,搭建一个简单的网站

负责人:程琳茹 合伙人:李玉婷 签约员工:闫玉荣 前言:学生成绩管理后台,看起来是一个简单的项目,但是对于我们今后的发展很重要,建设一个管理后台有很多方法,这里我们主要使用Rstudio,在之后的文章中,会详细给出我们小组完成项目的过程与遇到的问题,欢迎大家借鉴,此外,同学们要积极参与讨论. 项目步骤:1.熟悉与安装Rstudio,并且配置好R内部环境. 2.建立好文件所存放的位置与确保文档可以正常使用. 3.搭建一个简单的网站,分别分为server.R端口与ui.R端口. 4.搭建好网站后,插

自己实现的一个简单的EF框架(反射实现)

我实现了一个简单的EF框架,主要用于操纵数据库.实现了对数据库的基本操纵--CRUD 这是项目结构 这是一个 core 下的 DLL 写了一个数据库工厂,用于执行sql语句.调用sql语句工厂 写了一个sql语句工厂,用于生成sql语句.调用类型工厂 写了一个类型工厂,用于获取所需的类型,识别特性等. appsettings.json是配置文件 最后一个是使用说明 我实现过程的首先从底层开始. 首先写的是类型工厂 结构 BaseTypeHelper.cs 是基础的类型帮助类 TypeHelper

使用 Nodejs 搭建一个简单的Web服务器

使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容 3.显示图片资源 4.自动下载以.apk/.

node搭建一个简单的服务器

搭建一个简单的服务器 1 引入http模块 两个参数 req: request 请求 res: responese 响应 module require('mod1') node_modules 文件 require('./mode1') 发布自己的模块 去 npmjs.com 去注册一个账户 在控制台中 npm login username password email npm init npm publish cnpm install express const express = requi