一、概述:
MyBatis是一个基于ORM的半自动的持久层框架,支持定制SQL、存储过程及高级映射。
优点:避免了JDBC大部分的代码编写、手动设置参数和获取结果集;可以简单使用XML或注解来配置和映射原生类型、接口和java的POJO;半自动化,核心Sql可以自己优化,sql和java代码分离,功能明确。
注:ORM——对象/关系数据库映射,框架实现的效果:把对持久化对象的保存、修改、删除等操作,转换为对数据库的操作。
二、快速开发demo
1、搭建环境,引入MyBatis依赖
<dependencies>
<!--mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
</dependencies>
2、编写实体类
public class User {
private Integer id;
private String userName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
'}';
}
}
3、创建映射配置文件
<?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="user">
<select id="findAll" resultType="com.mls.pojo.User">
select * from user
</select>
</mapper>
4、创建核心配置文件
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development"> <!--默认使用哪个配置-->
<environment id="development"><!--开发环境-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/study"/>
<property name="username" value="root"/>
<property name="password" value="12345"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
5、编写测试类
@Test
public void selectAllUsers() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("user.findAll");
for (User user: userList ) {
System.out.println(user);
}
}
三、核心配置文件解释
1、层级关系
<configuration>
<!--属性-->
<properties></properties>
<!--设置-->
<settings></settings>
<!--类型别名-->
<typeAliases></typeAliases>
<!--类型处理器-->
<typeHandlers></typeHandlers>
<!--对象工厂-->
<objectFactory type=""></objectFactory>
<!--插件-->
<plugins></plugins>
<!--环境-->
<environments default="">
<environment id=""> <!--环境变量-->
<transactionManager type=""></transactionManager> <!--事物管理器-->
<dataSource type=""></dataSource> <!--数据源-->
</environment>
</environments>
<!--数据库厂商标识-->
<databaseIdProvider type=""></databaseIdProvider>
<!--mapper映射器-->
<mappers></mappers>
</configuration>
2、常用配置
(1)environments: 数据库环境配置,支持多环境配置
transactionManager :事物管理器,有两种类型—JDBC、MANAGED
- JDBC:使用JDBC提交和回滚设置,依赖于从数据源得到的连接来管理事物作用域;
- MANAGED:从来不提交和回滚一个连接,让容器来管理事物的整个生命周期,默认情况下会关闭连接,不需要默认关闭时需要将“closeConnection”属性设置为false。
(2)dataSource :数据源,类型有三种—UNPOOLED、POOLED、JNDI - UNPOOLED:不使用线程池,每次都要重新获取连接,关闭连接;
- POOLED:使用线程池,将JDBC对象组织起来;
- JNDI:这个数据源的实现是为了能在如 EJB 或应⽤服务器这类容器中使⽤,容器可以集中或在外部配置数据源,然后放置⼀个 JNDI 上下⽂的引⽤。
(3)mapper:加载映射,加载方式有4种: - 使⽤相对于类路径的资源引⽤,例如:
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
- 使⽤完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
- 使⽤映射器接⼝实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"/>
- 将包内的映射器接⼝实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>
(4)properties:加载外部的properties文件,例如将数据源的配置信息单独抽取到一个properties文件中:
(5)typeAliases:可以将java类型设置一个别名
上⾯是⾃定义的别名,mybatis框架已经为我们设置好的⼀些常⽤的类型的别名: