MyBatis
一、简介
MyBatis最初是Apache的一个开源项目iBatis,2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github.
iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQLMaps和Data Access Objects (DAO)
-
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
-
MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
-
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO (Plain Old Java Objects,普通的lava对象)映射成数据库中的记录
-
MyBatis 是一个半自动的ORM (Object Relation Mapping) 框架
二、搭建MyBatis
-
创建maven工程,引入依赖
<dependencies> <!--Mybatis核心--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
创建MyBatis的核心配置文件: mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/exercise"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--将写好的sql映射文件一定要注册到全局配置文件中--> <mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers> </configuration>
-
创建mapper接口
-
接口式编程
原生: Dao ======= > DaoImpl
mybatis: Mapper ========> xxMapper.xml
-
SqlSession代表和数据库的一次会话;用完必须关闭
-
SqlSession和connection一样,都是非线程安全,每次使用都应该去获取新的对象
-
mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象.(将接口和xml进行绑定)
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
-
两个重要的配置文件:
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等…系统运行环境信息
sql映射文件:保存了每一个sql语句的映射信息:将sql抽取出来
public class User { private Integer id; private String name; private Integer age; public User() { } public User(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
public interface UserMapper { public int insertUser(); }
-
-
创建MyBatis的映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:名称空间 id:唯一标识 MyBatis 面向接口编程的两个一致: 1、映射文件的namespace要和mapper接口的全类名保持一致 2、映射文件中SQL语句的id要和mapper接口中的方法名一致 --> <mapper namespace="com.apple.mybatis.mapper.UserMapper"> <insert id="insertUser"> insert into t_user values(null,'admin',23) </insert> </mapper>
-
测试
@Test public void testMyBatis() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获取SqlSession,设置JDBC事务自动提交 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取接口的实现类对象,会为接口自动的创建一个代理对象,代理对象去执行增删改查方法 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //测试功能 int result = mapper.insertUser(); //提交事务 //sqlSession.commit(); System.out.println("result:"+result); }
测试结果:
result:1
JavaAPI说明:
- Resources :这个类在 org.apache.ibatis.io 包中。Resources 类正如其名,会帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。
- SqlSessionFactoryBuilder:它接受一个指向 XML 文件(也就是 mybatis-config.xml 文件)的 InputStream 实例。
- SqlSessionFactory:是一个接口,实现类有DefaultSqlSessionFactory和SqlSessionManager,通过openSession() 方法,创建SqlSession,默认事务作用域将会开启(也就是不自动提交),可以向
autoCommit
可选参数传递true
值即可开启自动提交功能。 - SqlSession:是一个接口,它包含了所有执行语句、提交或回滚事务以及获取映射器实例的方法。
三、MyBatis配置文件
3.1 properties
<!--
1.mybatis可以使用properties来引入外部properties配置文件的内容:
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
-->
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
3.2 settings
<!--
2.settings包含很多重要的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>