版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luojun13Class/article/details/86378533
Mybatis框架介绍
MyBatis框架介绍
mybatis是Apache软件基金会下的一个开源项目,前身是ibatis框架。2010年这个项目由apache 软件基金会迁移到google code下,改名为mybatis。2013年11月又迁移到了github(https://github.com/mybatis/mybatis-3/releases)。
mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动、创建数据库连接对象、创建statement语句对象、参数设置、结果集处理等一系列繁杂的过程代码。
mybatis通过xml或注解进行配置,将java对象与sql语句中的参数自动映射生成最终执行的sql语句,并将sql语句执行结果自动映射成java对象,返回给业务层(service)应用。
三句话概括上面内容:
- mybatis早期版本叫做ibatis,目前代码托管在github,大家可以在此下载。
- mybatis是对jdbc的封装,是一个持久层的框架。
- mybatis是通过xml或者注解进行配置,实现java对象与sql语句的对应关系(映射)。
MyBatis下载
- 度娘
- 点击
- 找到下载
- 下载(点击后链接到github)
Mybatis开发流程
流程
- 数据库环境准备
- 添加依赖
- SqlMapConfig.xml 主配置
- 实体类(User.java)
- 接口(IUserDao.java)
- 接口映射(IUserDao.xml)
- 在SqlMapConfig.xml中,加载IUserDao.xml
- 编写测试代码
举例
- 需求:查询全部用户列表
- 数据库环境配置:
-- 1.创建数据库
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;
-- 2.创建用户表
DROP TABLE IF EXISTS USER;
CREATE TABLE USER (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(32) NOT NULL COMMENT '用户名称',
birthday DATETIME DEFAULT NULL COMMENT '生日',
sex CHAR(1) DEFAULT NULL COMMENT '性别',
address VARCHAR(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO USER(id,username,birthday,sex,address) VALUES
(41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),
(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),
(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),
(46,'老王','2018-03-07 17:37:26','男','北京'),
(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
SELECT * FROM USER;
- 创建项目,添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luojun</groupId>
<artifactId>mybatis01_01_hello</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--mybatis支持包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--数据库驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
-
SqlMapConfig.xml 主配置
-
配置内容:
- 数据库连接配置
- 数据库连接池、事务管理
- 加载接口的映射
-
参考约束文件:
-
配置实现
-
<?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>
<!--default 表示默认使用哪一个运行环境配置-->
<environments default="mysql">
<!--id="mysql" 表示mysql的运行环境配置-->
<environment id="mysql">
<!--事务管理器配置:基于JDBC的事务控制-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池配置(UNPOOLED/POOLED/JNDI)-->
<!--type="POOLED" 表示使用mybatis自带的连接池-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
</configuration>
- 实体类
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;// 省略get set
}
/* 省去getter和setter的方法 */
- dao接口
/**
* 数据访问接口
*/
public interface IUserDao {
/**
* 查询查询
*/
List<User> findAll();
}
- dao接口映射(XML)
- 写一个映射文件:IUserDao.xml
- 在哪个目录定义上面的文件?(可以随意,但通常映射文件与接口保持在同一目录)
-
新建目录:
-
再新建文件
-
IUserDao.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">
<!--namespace 名称空间,表示当前的xml是哪一个接口的映射-->
<mapper namespace="com.luojun.dao.IUserDao">
<!--id 对应的是IUserDao接口的方法名称-->
<!--resultType 方法的返回值类型,如果方法返回的是集合,只要指定集合中元素的类型-->
<!--如何封装数据?mybatis会自动封装数据,要求:查询列名称要与对象的属性名称一致。-->
<select id="findAll" resultType="com.luojun.entity.User">
select * from user
</select>
</mapper>
- 加载接口映射文件
- 测试
package com.luojun.dao;
import com.luojun.entity.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;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 运行mybatis入门案例
*/
public class UserDaoTest {
public static void main(String[] args) throws Exception {
// 1. 获取文件流
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 创建工厂的构建器
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 3. 创建SqlSession的工厂
SqlSessionFactory factory = builder.build(in);
// 3. 创建SqlSession
SqlSession session = factory.openSession();
// 4. 创建接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
// 查看是否是代理对象?
System.out.println(userDao.getClass());
// 5. 调用方法
List<User> list = userDao.findAll();
System.out.println(list);
// 6. 关闭,释放资源
session.close();
in.close();
}
}
- 测试结果
缺少日志文件。所以,引入日志文件:log4j.properties
再运行:
总结
- 需要主配置加载接口映射文件路径:
<mappers>
<mapper resource="com/luojun/dao/IUserDao.xml"/>
</mappers>
- 映射文件的namespace对应接口路径
- select中的id对应IUserDao中的方法名称
public interface IUserDao{
List<User> findAll();
}
<mapper namespace="com.luojun.dao.IUserDao">
<select id="findAll" resultType="com.luojun.entity.User">
select * from user
</select>
</mapper>
- UserDao也可以叫做UserMapper,这些都是常用的叫法。