框架介绍

Mybatis介绍

​ MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架。

​ Mybatis本质和Hibernate等持久层框架一样,底层均是基于jdbc的,作用均是实现数据的持久化。

Mybatis和Hibernate对比

对比项 Mybatis Hibernate
底层原理 基于jdbc 基于jdbc
开发速度 业务无复杂查询时较快,上手快 复杂查询语句多时较快。上手慢
sql优化 复杂 手写sql,容易优化
缓存 支持一级、二级缓存,支持第三方缓存 支持一级、更好的二级缓存,支持第三方缓存
可移植性 不同数据库需写不同sql语句 Hibernate负责映射
日志系统 具有自己的日志系统 使用第三方日志工具

准备工作

创建数据

CREATE TABLE `user` (
`id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`description` text
) ;
INSERT INTO `user` VALUES ('1', 'uzi', 'a gun');
INSERT INTO `user` VALUES ('2', 'the Shy', 'ChampionTop');
INSERT INTO `user` VALUES ('3', 'rookie', 'ChampionMid');
INSERT INTO `user` VALUES ('4', 'clearlove', 'old man');

资源准备

如果创建的是java项目,那么需要下载以下jar包:

  • mybatis-3.4.6.jar

  • commons-logging-1.2.jar

  • log4j-1.2.17.jar

  • asm-5.2.jar

  • cglib-3.2.5.jar

    如果创建的是maven项目,则导入对应依赖即可。

创建项目

我这里创建的是java项目

导入jar包

在项目根目录下创建一个文件夹,命名为lib,将下载好的jar包复制进去后,邮件选中,选择 Buildpath—>add to BuildPath。

创建Mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--需要导入mybatis的dtd约束文件 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
属性
<properties></properties>
全局参数设置
<settings></settings>
类型别名
<typeAliases></typeAliases>
类型处理器
<typeHandles></typeHandles>
对象工厂
<objectFactory></objectFactory>
插件
<plugins></plugins>
以上属性现阶段都可以忽视,后面会详细介绍
--> <!-- 配置mybatis的环境信息 --> <environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 使用mappers标签加载sql映射文件 -->
<mappers>
    <!-- 此处根据自己实际的sql映射文件位置来填写-->
<mapper resource="com/mybatis/mapping/User.xml"/>
</mappers>
</configuration>

创建实体类

  package com.mybatis.domain;

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

创建sql映射配置文件

<?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:命名空间,对sql进行一个分类管理 -->
<!-- 注意:namespace在mapper代理时,具有重要且特殊的作用 -->
<mapper namespace="com.mybatis.mapping.userMapper">
<!--
2 使用id进行查询
3 查询,使用select来表示一个查询的statement,相当于statement.executeQuery
4 id:表示该statement唯一标识
5 parameterType:输入参数类型
6 resultType:输出参数类型,使用的是User类,则会将查询出来的记录封装到该类中
7 #{id}:使用#{}接收输入的参数,其中的"id"属性名任意,可以为uid,也可以为别的。
8 -->
<!-- 查询 -->
<select id="getUser" parameterType="int" resultType="com.mybatis.domain.User">
SELECT * FROM user WHERE id= #{id}
</select>
<!-- 插入 -->
<insert id="addUser" parameterType="com.mybatis.domain.User">
INSERT INTO user(name,description) VALUES(#{name},#{description})
</insert>
<!--删除-->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id= #{id}
</delete>
<!-- 更新 -->
<update id="updateUser" parameterType="com.mybatis.domain.User">
UPDATE user SET name= #{name},description= #{description} WHERE id = #{id}
</update>
<!--查询所有-->
<select id="getAllUsers" resultType="com.mybatis.domain.User">
SELECT * FROM user;
</select>
</mapper>

完成简单CRUD

创建一个测试类

/**
* @Author {LearnAndGet}
* @Time 2018年12月24日
* @Discription:
*/
package com.mybatis.test; import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger; import com.mybatis.domain.User; public class Test { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//1.读取配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//2.根据配置文件创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3.SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); //4.SqlSession执行statement,并返回映射结果 //查询测试
User user = sqlSession.selectOne("com.mybatis.mapping.userMapper.getUser",1);
System.out.println(user); //查询所有
List users = sqlSession.selectList("com.mybatis.mapping.userMapper.getAllUsers");
System.out.println(users); //插入测试
User user2 = new User();
user2.setName("Knight");
user2.setDescription("a killer");
sqlSession.insert("com.mybatis.mapping.userMapper.addUser", user2);
//再次查询所有
List users2 = sqlSession.selectList("com.mybatis.mapping.userMapper.getAllUsers");
System.out.println(users2); //删除测试
sqlSession.delete("com.mybatis.mapping.userMapper.deleteUser",1);
//再次查询所有
List users3 = sqlSession.selectList("com.mybatis.mapping.userMapper.getAllUsers");
System.out.println(users3); //更新测试(先查出一个后更新)
User oldUser = sqlSession.selectOne("com.mybatis.mapping.userMapper.getUser",3);
oldUser.setName("GodV");
sqlSession.update("com.mybatis.mapping.userMapper.updateUser", oldUser);
//再次查询所有
List users4 = sqlSession.selectList("com.mybatis.mapping.userMapper.getAllUsers");
System.out.println(users4); sqlSession.close();
}
}

输出结果如下

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1988859660.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@768b970c]
DEBUG [main] - ==> Preparing: SELECT * FROM user WHERE id= ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
User [id=1, name=uzi, description=a gun]
DEBUG [main] - ==> Preparing: SELECT * FROM user;
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 4
[User [id=1, name=uzi, description=a gun], User [id=2, name=the Shy, description=ChampionTop], User [id=3, name=rookie, description=ChampionMid], User [id=4, name=clearlove, description=old man]]
DEBUG [main] - ==> Preparing: INSERT INTO user(name,description) VALUES(?,?)
DEBUG [main] - ==> Parameters: Knight(String), a killer(String)
DEBUG [main] - <== Updates: 1
DEBUG [main] - ==> Preparing: SELECT * FROM user;
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 5
[User [id=1, name=uzi, description=a gun], User [id=2, name=the Shy, description=ChampionTop], User [id=3, name=rookie, description=ChampionMid], User [id=4, name=clearlove, description=old man], User [id=5, name=Knight, description=a killer]]
DEBUG [main] - ==> Preparing: DELETE FROM user WHERE id= ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Updates: 1
DEBUG [main] - ==> Preparing: SELECT * FROM user;
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 4
[User [id=2, name=the Shy, description=ChampionTop], User [id=3, name=rookie, description=ChampionMid], User [id=4, name=clearlove, description=old man], User [id=5, name=Knight, description=a killer]]
DEBUG [main] - ==> Preparing: SELECT * FROM user WHERE id= ?
DEBUG [main] - ==> Parameters: 3(Integer)
DEBUG [main] - <== Total: 1
DEBUG [main] - ==> Preparing: UPDATE user SET name= ?,description= ? WHERE id = ?
DEBUG [main] - ==> Parameters: GodV(String), ChampionMid(String), 3(Integer)
DEBUG [main] - <== Updates: 1
DEBUG [main] - ==> Preparing: SELECT * FROM user;
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 4
[User [id=2, name=the Shy, description=ChampionTop], User [id=3, name=GodV, description=ChampionMid], User [id=4, name=clearlove, description=old man], User [id=5, name=Knight, description=a killer]]
DEBUG [main] - Rolling back JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@768b970c]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@768b970c]
DEBUG [main] - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@768b970c]
DEBUG [main] - Returned connection 1988859660 to pool.

总结

由上述步骤来看,使用Mybatis来完成一个入门的数据库查询并不困难,一共有以下几个步骤:

  1. 创建Mybatis的xml配置文件,该配置文件主要约束了Mybatis的行为,包括数据库连接以及sql映射文件位置等
  2. 创建sql映射的配置文件,在该文件中,将指定的sql语句绑定到一个关键字上
  3. 创建SqlSession对象,使用SelectOne方法,执行"命名空间+关键字",并附带一个查询参数,即可完成查询。

Mybatis框架学习1:入门的更多相关文章

  1. mybatis框架学习第一天

    三层架构: 表现层:用于展示数据 业务层:处理业务需求 持久层:和数据库交互的 3.持久层技术解决方案: JDBC技术: Connecction PreparedStatement ResultSet ...

  2. 03 Mybatis框架---学习笔记1--框架的概念及优势

    1.框架的概念 框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.简单说就是使用别人搭好的舞台,你来做表演.而且,框架一般是成熟的,不断升级的软件.框架是我们软件开发中的一套解决方 ...

  3. [置顶] Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  4. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  5. Java SSH框架学习(入门)

    SSH就是 struts+spring+hibernate 的一个集成框架,是java中一种流行的JAVA WEB 应用程序开源框架.由于我最熟悉的还是ASP.NET的的MVC和Python的Djan ...

  6. MyBatis 框架之快速入门程序

    一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ...

  7. Mybatis框架学习总结-Mybatis框架搭建和使用

    Mybatis介绍 Mybatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.Mybatis可以使 ...

  8. Hibernate框架学习(一)——入门

    一.框架是什么 1.框架是用来提高开发效率的 2.封装好了一些功能,我们需要使用这些功能时,调用即可,不需要手动实现 3.框架可以理解成一个半成品的项目,只要懂得如何驾驭这些功能即可 二.hibern ...

  9. mybatis框架学习:

    一.什么是框架 它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能 大大提高开发效率 二.三层框架 表现层: 用 ...

随机推荐

  1. Linux系统目录结构和文件基本属性

    一.Linux系统目录结构 二.Linux 文件基本属性 三.touch stat tar 命令 一.Linux系统目录结构 不同颜色文件的含义: inux 文件颜色的含义,蓝色代表目录,绿色代表可执 ...

  2. 重装系统失败后怎么用好系统U盘启动解决?

    很多朋友在第一次重装电脑系统时都会出现这样或那样的错误,导致重装系统后进不去系统,非常的被动.那么当我们遇到这种情况该怎么办呢?其实我们可以使用好系统U盘启动来解决重装系统后进不去的问题. 好系统U盘 ...

  3. vlan linux内核数据流程

    转:http://blog.sina.com.cn/s/blog_62bbc49c0100fs0n.html 一.前言 前几天做协议划分vlan的时候看了一些linux内核,了解不深,整理了下vlan ...

  4. 在python中,用默认参数(list,set,dict...)时要小心

    在我们平时写需求的时候,如果没有了解到以下知识点,可能会出现这样的问题,掉进坑里面,甚至很难找到问题的根源.下面我们来看看使用可变默认参数(Mutable default arguments)时会出现 ...

  5. js常用阻止冒泡事件

    原文链接:http://caibaojian.com/javascript-stoppropagation-preventdefault.html 防止冒泡 w3c的方法是e.stopPropagat ...

  6. QTP(8)

    一.Action 1.调用Action C:\Program Files\HP\QuickTest Professional\CodeSamplesPlus\Flight_Samples (1)调用A ...

  7. zencart新增categories分类表字段步骤

    zencart新增分类字段步骤 1.categories表新增字段related_categories.related_products ) ) NOT NULL; 2.修改admin\categor ...

  8. 什么是http协议(一)

    http协议是大家在互联网中最为熟悉的协议,只要上网大家都会遇到,但是,很多人被问道什么是http协议,http协议的内容是什么就懵了.这里,我们随便聊聊http协议. 首先,我们说说协议.我一直觉得 ...

  9. Linux 常用命令备忘

    安装wget 方便联网下载:  centos : sudo yum -y install wget 安装vim   :  yum -y install vim* set nu              ...

  10. [旧版] CASthesis 模板编译的问题

    写在前面的话:国科大最新版的模板在这里(https://github.com/mohuangrui/ucasthesis),利用它来写博后出站报告的相关介绍在这里: 本篇博文是针对另一个模板进行介绍的 ...