Mybatis框架学习1:入门
框架介绍
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&characterEncoding=utf-8&useSSL=false&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来完成一个入门的数据库查询并不困难,一共有以下几个步骤:
- 创建Mybatis的xml配置文件,该配置文件主要约束了Mybatis的行为,包括数据库连接以及sql映射文件位置等
- 创建sql映射的配置文件,在该文件中,将指定的sql语句绑定到一个关键字上
- 创建SqlSession对象,使用SelectOne方法,执行"命名空间+关键字",并附带一个查询参数,即可完成查询。
Mybatis框架学习1:入门的更多相关文章
- mybatis框架学习第一天
		三层架构: 表现层:用于展示数据 业务层:处理业务需求 持久层:和数据库交互的 3.持久层技术解决方案: JDBC技术: Connecction PreparedStatement ResultSet ... 
- 03 Mybatis框架---学习笔记1--框架的概念及优势
		1.框架的概念 框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统.简单说就是使用别人搭好的舞台,你来做表演.而且,框架一般是成熟的,不断升级的软件.框架是我们软件开发中的一套解决方 ... 
- [置顶]
        Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程
		1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ... 
- Mybatis框架 的快速入门
		MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ... 
- Java SSH框架学习(入门)
		SSH就是 struts+spring+hibernate 的一个集成框架,是java中一种流行的JAVA WEB 应用程序开源框架.由于我最熟悉的还是ASP.NET的的MVC和Python的Djan ... 
- MyBatis 框架之快速入门程序
		一.使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二.快速配置 MyBatis 依赖 jar ... 
- Mybatis框架学习总结-Mybatis框架搭建和使用
		Mybatis介绍 Mybatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.Mybatis可以使 ... 
- Hibernate框架学习(一)——入门
		一.框架是什么 1.框架是用来提高开发效率的 2.封装好了一些功能,我们需要使用这些功能时,调用即可,不需要手动实现 3.框架可以理解成一个半成品的项目,只要懂得如何驾驭这些功能即可 二.hibern ... 
- mybatis框架学习:
		一.什么是框架 它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能 大大提高开发效率 二.三层框架 表现层: 用 ... 
随机推荐
- RPC性能优化
			优化 1:元数据共享 hessian 序列化会将两种信息写到输出流: 元数据:即类全名,字段名 值数据:即各个字段对应值(如果字段是复杂类型,则会递归传递该复杂类型 的元数据和内部字段的值数据) 在 ... 
- DNS缓存失败怎么解决?
			DNS的中文名是域名系统,是域名和IP地址相互映射的一个分布式数据库.有了DNS,我们上网时直接输入网站域名(即网址)即可,而不用输入网站的IP地址访问网站,对于用户来说比较方便记忆和访问. 每次当我 ... 
- 第十二章·Kibana深入-日志图形展示
			1.Kibana创建区域图 Kibana支持多重图从展示功能,需要日志是json格式的支持. Kibana区域图 打开浏览器,访问:http://10.0.0.54:5601   选择一个日志  ... 
- springboot中解决servlet乱码问题,使用配置类注册过滤器解决
			8.1 使用传统的Spring提供的字符编码过滤器 在03-springboot-web中的ServletConfig中配置文件类,注册字符编码过滤器 @Bean public FilterRegis ... 
- Number of Parallelograms CodeForces - 660D  (几何)
			Number of Parallelograms CodeForces - 660D You are given n points on a plane. All the points are dis ... 
- libusb_bulk_transfer返回值不是0
			libusb_bulk_transfer返回值不是0 libusb_bulk_transfer返回值不是0libusb_bulk_transfer返回值不是0 ????? 
- idea详细设置:编码、代码提示大小写、窗口数量限制、自动导包、serialID、重复代码警告、热部署等设置
			提示: idea ultimate 2018.2 idea-file-setttings设置的是当前项目的配置(只针对当前项目生效)idea-file-others settings相当于以后导入创建 ... 
- 【JS】类型检测
			本文首发于我的个人博客 : http://cherryblog.site/ 前言 js 中的类型检测也是很重要的一部分,所以说这篇文章我们就来讲一下怎么对 JavaScript 中的基本数据类型进行检 ... 
- hive常用日期函数-模板
			已知日期 要求日期 语句 结果 本周任意一天 本周一 select date_sub(next_day('2016-11-29','MO'),7) ; 2016-11-28 本周任意一天 上周一 se ... 
- Python模拟浏览器前进后退操作
			# 模拟浏览器前进后退操作 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要对应版本的Chr ... 
