Mybatis教程 | 第一篇:快速开始

前言:

关于mybatis的简介就不重复累赘了,百度一下会出来很多。这里贴上官方简介:http://www.mybatis.org/mybatis-3/zh/index.html

参考资料也来源于以上链接。

简单聊一聊,自己对mybatis相比较hibernate和基于hibernate的ORM类型框架的优势:

1、系统所需的部分或全部数据来自已有的数据库,出于安全考虑,只对开发团队提供查询语句或存储过程来获取所需数据,具体的表结构不予公开。那么这个时候就需要类似select * from (select * from xxx..)的复合语句来获取数据,hibernate相较于mybatis就没有这么灵活了;

2、对于银行等对开发规范要求严格的企业,大部分会强制要求对数据库的操作都以存储形式的过程进行,mybatis也是具有优势的;

3、系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须使用高度优化的SQL或存储过程才能达到性能指标,也得益于mybatis对SQL的高度可定制的优势;

4、最重要的一点就是可以锻炼数据库能力啦(^_^)。

快速开始:

1、搭建环境(任选其一,当前demo选择的是maven项目)

a.从https://github.com/mybatis/mybatis-3/releases(mybatis官方的git)下载mybatis的压缩包,解压后在lib文件夹下有mybatis需要的jar包,将其配置进项目就可以使用mybatis框架的功能了。

提示:由于mybatis是基于JDBC的,因此还需要将JDBC的驱动包加进去,使用哪个数据库就加相应的驱动。

b.新建一个mavan项目,加入下面的依赖

    
	    org.mybatis
	    mybatis
	    3.4.6
	
	
	    mysql
	    mysql-connector-java
	    8.0.11
	

2、mybatis的数据库操作

a.首先在数据库中执行下面sql创建一个数据库和表

#创建一个名称为mybatis的数据库;
CREATE DATABASE mybatis;
#使用这个数据库
USE  mybatis;
#创建一个tb_user表,有id、name、gender、age字段
CREATE TABLE `tb_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_gender` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_age` int(11) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

b.接下来,在所有ORM框架中都有一个重要的媒介,PO(持久化对象)。

简单说明:ORM(Obeject/Relation Mapping即对象/关系映射),提倡的是用面向对象的方式进行持久化操作。

注意:mybatis中PO设计要遵循低侵入式设计。即一个字段对应一个持久化对象(PO)属性,不要求持久化类继承任何父类、或者实现任何接口(实现序列化接口除外),保证代码不被污染。另外一点就是,所有的属性不要使用基本数据类型,要使用包装类型(并不是说用基本数据类型不能运行之类的,但是在实际项目开发中,使用基本数据类型有可能会导致在整合其他框架的过程中反序列化失败)。

public class User {

	private Integer userId;
	
	private String userName;
	
	private String userGender;
	
	private Integer userAge;

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserGender() {
		return userGender;
	}

	public void setUserGender(String userGender) {
		this.userGender = userGender;
	}

	public Integer getUserAge() {
		return userAge;
	}

	public void setUserAge(Integer userAge) {
		this.userAge = userAge;
	}

	public User() {
		super();
	}

	public User(Integer userId, String userName, String userGender, Integer userAge) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userGender = userGender;
		this.userAge = userAge;
	}

	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + ", userGender=" + userGender + ", userAge="
				+ userAge + "]";
	}
}

c.创建mapper映射文件和mybatis配置文件

mapper映射文件




  
  	INSERT INTO tb_user (user_name, user_gender, user_age)
	VALUES
	(#{userName}, #{userGender}, #{userAge});
  

mapper文件说明:

#和$的区别(mapper文件没有体现):底层实现方式就是JDBC中PreparedStatement和Statement的区别,一个是预编译进行,一个是直接发送SQL语句到数据库。直接发送sql语句到数据容易被sql注入

标签以前的全部是声明当前文件为mybatis的mapper文件,所有的mapper文件都是一样的声明,所以直接使用即可。

标签为这个mapper.xml文件制定一个唯一(一定要是唯一的)的命名空间(namespace),namespace的值习惯上设置成包名+dao层接口名。

标签中编写了插入的sql语句(增删改查对应的标签分别是标签的id属性,返回执行sql语句查询结果的泛型对象,只能用于查询结果是单条数据。

T selectOne(String statement, Object parameter)

查询方法。参数statement是mapper映射文件中定义的标签的id属性,返回执行sql语句查询结果的泛型对象的集合,能用于查询结果是单条或多条数据。

List selectList(String statement, Object parameter)

查询方法。参数statement是mapper映射文件中定义的标签的id属性,parameter是执行查询sql所需的参数,通常是对象或Map,rowBounds参数用于分页,它的两个属性offset指查询的当前页数,limit指当前页显示多少条数据,返回执行sql语句查询结果的泛型对象的集合,能用于查询结果是单条或多条数据。

Map selectMap(String statement, String mapKey)

查询方法。参数statement是mapper映射文件中定义的标签的id属性,parameter是执行查询sql所需的参数,通常是对象或Map,mapkey是返回数据的其中一个列名,执行SQL语句查询会被封装成一个Map集合返回,key就是参数mapKey传入的列名,value是封装的对象。 Map selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) 查询方法。参数statement是mapper映射文件中定义的标签的id属性,ResultHandler对象用来处理查询返回的复杂结果集,通常用于多表联查 void select(String statement, Object parameter, ResultHandler handler) 查询方法。参数statement是mapper映射文件中定义的标签的id属性,parameter是执行查询sql所需的参数,通常是对象或Map,rowBounds参数用于分页,它的两个属性offset指查询的当前页数,limit指当前页显示多少条数据,ResultHandler对象用来处理查询返回的复杂结果集,通常用于多表联查 void commit() 提交事务 void rollback() 回滚事务  void close() 关闭SqlSession对象 Connection getConnection() 获取JDBC的数据库连接对象 T getMapper(Class type) 返回mapper接口的代理对象,该对象关联了SqlSession对象,开发者可以通过该对象直接调用方法操作数据库,参数type是Mapper的接口类型。Mybatis官方手册建议通过mapper对象访问Mybatis

下面贴出官方的介绍及注意事项,原文地址:http://www.mybatis.org/mybatis-3/zh/getting-started.html:

Mybatis教程 | 第一篇:快速开始_第3张图片


此篇完结

你可能感兴趣的:(mybatis)