1、MyBatis简介
什么是MyBatis
- MyBatis是一款优秀的持久层框架,用于简化JDBC开发
- MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名成MyBatis。2013年11月迁移到Github
持久层
- 负责将数据保存到数据库的那一层代码
- javaEE三层架构:表现层、业务层、持久层
框架
- 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码
- 在框架的基础上构建软件编写更加高效、规范、通用、可扩展
2、MyBatis快速入门
搭建步骤
- 新建模块
- 导入jar包
- 编写User类
- 编写配置文件mybatis-config.xml
- 修改连接池信息
- 编写接口
- 编写映射文件
- 编写测试类
案例演示
- 准备MySQL数据
CREATE DATABASE day18;
USE day18;
CREATE TABLE USER (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
birthday DATE,
sex CHAR(1) DEFAULT '男',
address VARCHAR(50)
);
INSERT INTO USER VALUES (NULL, '孙悟空','1980-10-24','男','花果山水帘洞');
INSERT INTO USER VALUES (NULL, '白骨精','1992-11-12','女','白虎岭白骨洞');
INSERT INTO USER VALUES (NULL, '猪八戒','1983-05-20','男','福临山云栈洞');
INSERT INTO USER VALUES (NULL, '蜘蛛精','1995-03-22','女','盤丝洞');
新建项目
导入jar包
通过pom.xml导入
<dependencies> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--MySQL驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!--MyBatis核心包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> </dependencies>
编写实体类
这里记得要和数据库一致
/** * 封装User表的实体类 */ public class User { private Integer id; private String username; private Date birthday; private String sex; private String address; }
复制mybatis-config.xml到resources
修改连接池信息
<?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> <settings> <!--在控制台显示SQL语句--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--配置连接池需要的参数--> <property name="driver" value="驱动类全名"/> <property name="url" value="数据库url"/> <property name="username" value="数据库账号"/> <property name="password" value="数据库密码"/> </dataSource> </environment> </environments> <mappers> <mapper resource="接口映射文件位置"/> </mappers> </configuration>
编写接口
编写接口的好处是统一管理数据库的方法
/** * xxxMapper就说对应xxx表的数据操作 */ public interface UserMapper { // 1、查询User表的所有数据 List<User> selectAll(); }
编写映射文件
<?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="包名.接口名"> <select id="方法名" resultType="方法返回值类型"> SQL语句 </select> </mapper>
编写测试类
public class UserTest { @Test public void test01() throws IOException { //测试框架搭建情况 //1、标记mybatis的配置环境 String resource = "mybatis-config.xml"; //2、加载配置环境的信息 InputStream inputStream = Resources.getResourceAsStream(resource); //3、根据配置信息,生成SqlSessionFactory对象,相当于连接池 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //4、从连接池获取连接 SqlSession sqlSession = sqlSessionFactory.openSession(); //5、获取执行sql语句的对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //6、调用方法执行sql语句 List<User> users = mapper.selectAll(); sqlSession.close(); for (User user : users) { System.out.println(user); } } }
3、MyBatis核心配置文件
MyBatis核心配置文件的顶层结构如下
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseldProvider(数据库厂商标识)
- mappers(映射器)
typeAliases别名
typeAliases作用:给自定义的实体类取别名,让类使用更简单
- 在mybatis-config.xml里面配置,在settings后面
- 注意mybatis-config.xml中标签有规范的排位顺序,如果顺序有误configuration标签会报错
方式一:
这种方法是给单个类配置别名,但是有缺点就是如果多个类配置需要写很多个
```xml
- 方式二:
通过扫包的方式进行配置,这样的好处就是此目录下的类都可以用
```xml
<typeAliases>
<package name="org.example.pojo"/>
</typeAliases>
mapper扫包配置
既然类名可以进行扫包,那我们的mapper文件也可以
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
- 在mybatis-config.xml里面配置
<mappers>
<package name="org.example.mapper"/>
</mappers>