Mybatis简介
-
Mybatis是一个半自动化持久化层ORM框架
-
ORM:Object Relational Mapping【对象 关系 映射】
- 将Java中的对象与数据库中表建议映射关系,优势:操作Java中的对象,就可以影响数据库中表的数据
搭建Mybatis框架步骤
1.导入jar包
<!--导入MySQL的驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- MySQL版本8的驱动jar导入方式 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--导入MyBatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.编写核心配置文件【mybatis-config.xml】
-
位置:resources目标下
-
名称:推荐使用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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- mysql8版本-->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>-->
<!-- mysql5版本-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db220106"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 设置映射文件路径-->
<mappers>
<mapper resource="mapper/EmployeeMapper.xml"/>
</mappers>
</configuration>
3.书写相关接口及映射文件
-
映射文件位置:resources/mapper
-
映射文件名称:XXXMapper.xml
-
映射文件作用:主要作用为Mapper接口书写Sql语句
- 映射文件名与接口名一致
- 映射文件namespace与接口全类名一致
- 映射文件SQL的Id与接口的方法名一致
-
示例代码
<?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.atguigu.mybatis.mapper.EmployeeMapper">
<select id="selectEmpById" resultType="com.atguigu.mybatis.pojo.Employee">
SELECT
id,
last_name,
email,
salary
FROM
tbl_employee
WHERE
id=#{empId}
</select>
</mapper>
-
测试【SqlSession】
- 先获取SqlSessionFactory对象
- 再获取SqlSession对象
- 通过SqlSession对象获取XXXMapper代理对象
- 测试
代码示例:
public class TestMybatis {
@Test
public void testMybatis(){
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过SqlSessionFactory获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取EmployeeMapper的代理对象【com.sun.proxy.$Proxy6】
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
System.out.println("employeeMapper.getClass().getName() = " + employeeMapper.getClass().getName());
//查询
Employee employee = employeeMapper.selectEmpById(2);
System.out.println("employee = " + employee);
} catch (IOException e) {
e.printStackTrace();
}
}
Mybatis核心配置详解【mybatis-config.xml】
1.核心配置文件概述
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
2.核心配置文件根标签
- 没有实际语义,主要作用:所有子标签均需要设置在跟标签内部
3.核心配置文件常用子标签
1. properties
- 作用:定义或引入外部属性文件
- 这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
- 设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
2. settings
-
作用- 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
-
mapUnderscoreToCamelCase属性:是否开启驼峰命名自动映射,默认值false,如设置true会自动将
字段a_col与aCol属性自动映射
- 注意:只能将字母相同的字段与属性自动映射
3. typeAliases
-
作用:类型别名可为 Java 类型设置一个缩写名字。
-
语法及特点
<typeAliases> <!-- 为指定类型定义别名--> <!-- <typeAlias type="com.atguigu.mybatis.pojo.Employee" alias="employee"></typeAlias>--> <!-- 为指定包下所有的类定义别名 默认将类名作为别名,不区分大小写【推荐使用小写字母】 --> <package name="com.atguigu.mybatis.pojo"/> </typeAliases> -
Mybatis自定义别名
别名 类型 _int int integer或int Integer string String list或arraylist ArrayList map或hashmap HashMap
4. environments
- 作用:设置数据库连接环境
- 示例代码
<!-- 设置数据库连接环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- mysql8版本-->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/db220106?serverTimezone=UTC"/>-->
<!-- mysql5版本-->
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
5. mappers
- 作用:设置映射文件路径
- 示例代码
<!-- 设置映射文件路径-->
<mappers>
<mapper resource="mapper/EmployeeMapper.xml"/>
<!-- 要求:接口的包名与映射文件的包名需要一致-->
<!-- <package name="com.atguigu.mybatis.mapper"/>-->
</mappers>
Mybatis映射文件详解
1.映射文件概述
- MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。
- 如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。
2.映射文件根标签
- mapper标签
- mapper中的namespace要求与接口的全类名一致
3.映射文件子标签
子标签共有9个,注意学习其中8大子标签
-
insert标签:定义添加SQL
-
delete标签:定义删除SQL
-
update标签:定义修改SQL
-
select标签:定义查询SQL
-
sql标签:定义可重用的SQL语句块
-
cache标签:设置当前命名空间的缓存配置
-
cache-ref标签:设置其他命名空间的缓存配置
-
resultMap标签: 描述如何从数据库结果集中加载对象
- resultType解决不了的问题,交个resultMap。
4.映射文件中常用属性
-
resultType:设置期望结果集返回类型【全类名或别名】
- 注意:如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。
- resultType 和 resultMap 之间只能同时使用一个。