MyBatis框架
GitHub官网:https://github.com/
前身叫 iBatis (Google Code)、更名为 MyBatis(版本从3.x开始)。
官方地址: https://github.com/mybatis/mybatis-3
最新版本
目录结构
Mybatis定义:
-
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
-
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
-
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
Mybatis快速入门(测试)
在maven 环境下 测试 目录结构:
一、pom.xml文件 添加依赖
二、创建全局配置文件 mybatis-config.xml:
外部db-info.properties配置文件
可参考官方文档:
三、创建实体类User:
四、创建映射配置文件 UserMapper.xml:
官方文档
五、测试类 进行测试:
以上这种代码,是通过Mapper配置文件的 id 来进行执行的。我们在代码开发中很少这样调用,但是如果你是一个框架的二次封装者,又往往会这样调用。
优化:
1.Mybatis的接口式使用 定义接口类 UserDao:
命名规范: 或者以Dao 结尾, 或者以 Mapper 结尾。这里不再进行接口的实现了。
2.要求Mapper配置文件的namespace 属性跟接口的包名一致
3.调用不同
测试结果:
优化后的源码:
1.添加依赖:
<groupId>com.example</groupId>
<artifactId>0914</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--Java的编码方式utf-8 jdk的版本是 1.8-->
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--mybatis 框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--junit 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
2.创建全局配置文件:
<?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 标签表示对整个MyBatis框架进行配置-->
<configuration>
<!-- resource 指定外部 db-info.properties 配置文件-->
<properties resource="db-info.properties"/>
<!--environment可以指定多个环境即定义多个environment 标签 default 不指定默认是第一个环境-->
<environments default="aa">
<environment id="aa">
<!-- type 用于说明事务管理的类型:JDBC|MANAGED -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 管理 映射配置文件 UserMapper.xml -->
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
3.外部配置文件:
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql:///test
jdbc.driver=com.mysql.jdbc.Driver
4.创建实体类:
public class User {
private int id;
private String name;
private String password;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
}
5.创建接口:
package com.example.dao;
public interface UserDao {
//接口中的方法名 对应 UserMapper 中的id属性值
List<User> getAll();
}
6.创建映射配置文件:
<?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">
<!--mapper标签用于进行映射配置; namespace 用于指定 名称空间-->
<mapper namespace="com.example.dao.UserDao">
<!--在内部可以进行各种 CRUD 的配置-->
<!--select 标签对应一个 select 操作 ;id 是唯一标识 resultType 表示结果集中一行数据的类型-->
<select id="getAll" resultType="com.example.domain.User">
select * from user
</select>
</mapper>
7.进行数据库的访问测试:
import com.example.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;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
//未优化
@Test
public void test1() throws IOException {
//1.找到全局配置文件对应的流
String resource="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
//2.根据流创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 通过 SqlSessionFactory 得到 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.通过SqlSession对象来发送sql: namespace+ id
List<User> users = sqlSession.selectList("abc.def.getAll");
System.out.println(users);
//5. 释放资源
sqlSession.close();
}
//优化
@Test
public void test2() throws IOException {
//1.找到全局配置文件对应的流
String resource="mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);
//2.根据流创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 通过 SqlSessionFactory 得到 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.通过SqlSession对象 的getMapper方法 拿到 mapper对象 来发送sql: namespace+ id
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> users = mapper.getAll();
System.out.println(users);
//5. 释放资源
sqlSession.close();
}
}