MyBatis介绍
MyBatis是一款优秀的持久层框架,它封装了jdbc对数据库的操作。它使得开发者不用过于关注去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码,只用关注sql语句本身即可。
Mybatis框架执行流程
-
读取MyBatis 配置文件mybatis-config.xml,加载数据源、事务等
-
加载映射文件mapper.xml
-
定义SQL语句,在上一步的文件中加载。
-
创建会话工厂。(SqlSessionFactory)
-
创建会话(SqlSession)
-
通过Executor 操作数据库
-
输入参数和输出结果
使用MyBatis
使用Maven导入依赖。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>version</version>
</dependency>
Mybatis的主配置文件 mybatis-config.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>
<!--
MyBaties核心配置文件中,标签的顺序:
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?
-->
<!--引入properties文件-->
<properties resource="jdbc.properties"/>
<!--设置类型别名-->
<typeAliases>
<!--
typeAlias: 设置某个类型的别名
属性:
type: 设置需要设置别名的类型
alias: 设置某个类型的别名,若不设置该属性,那么改类型拥有默认的别名,即类名且不区分大小写
-->
<!-- <typeAlias type="User" alias="User"></typeAlias>-->
<!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
<package name="com.my.mybatis.pojo"/>
</typeAliases>
<!--
environments: 配置多个连接数据库的环境
属性:
default: 设置默认使用的环境的id
-->
<environments default="development">
<!--
environment: 配置某个具体的环境
属性:
id: 表示连接数据库的环境的唯一标识,不能重复
-->
<environment id="development">
<!--
transactionManager: 设置事务管理方式
属性:
type="JDBC|MANAGED"
JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
MANAGRED: 被管理,例如Spring
-->
<transactionManager type="JDBC"/>
<!--
dataSource: 配置数据源
属性:
type:设置数据源的类型
type="POOLED|UNPOOLED|JNDI"
POOLED: 表示使用数据库连接池缓存数据库连接
UNPOOLED: 表示不使用数据库连接池缓存数据库连接
JNDI: 表示使用上下文中的数据源
-->
<dataSource type="POOLED">
<!--设置连接数据库的驱动-->
<property name="driver" value="${jdbc.driver}"/>
<!--设置连接数据库的连接地址-->
<property name="url" value="${jdbc.url}?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"/>
<!--设置连接数据库的用户名-->
<property name="username" value="${jdbc.username}"/>
<!--设置连接数据库的密码-->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!--<mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包为单位引入映射文件
要求:
1, mapper接口所在的包要和映射文件所在的包一致
2, mapper接口要和映射文件的名字一致
-->
<package name="com.my.mybatis.mapper"/>
</mappers>
</configuration>
MyBatis面向接口编程的两个一致
* 1.映射文件的namespace要和mapper接口的全类名保持一致
* 2.映射文件中SQL语句的id要和mapper接口中的方法名一致
* 表 实体类 mapper接口--映射文件
使用MyBatis操作数据库 例:
pojo:
@Data //使用了lombok工具包
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
}
mapper:
public interface UserMapper {
/**
* 查询所有的用户信息
*/
List<User> getAllUser();
}
mapper.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">
<mapper namespace="com.my.mybatis.mapper.UserMapper">
<!--
查询功能的标签必须设置resultType或resultMap
resultType: 设置默认的映射关系
resultMap: 设置自定义的映射关系
-->
<!--List<User> getAllUser();-->
<select id="getAllUser" resultType="com.my.mybatis.User">
select * from t_user
</select>
</mapper>
Test:
public class MyBatisTest {
/**
* SqlSession默认不自动提交事务,若需要自动提交事务
* 可以使用SqlSessionFactory.openSession(true);
* @throws IOException
*/
@Test
public void testCRUD() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list = mapper.getAllUser();
list.forEach(user -> System.out.println(user));
}
}