Mybatis的使用以及快速入门

基本配置

(1)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>

<!-- 映入外部配置外部文件-->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123"/>
</properties>

<!-- 标准的日志工厂实现-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 可以给实体类起别名-->
<!-- <typeAliases>-->
<!-- <typeAlias type="com.kuang.pojo.User" alias="User"></typeAlias>-->
<!-- </typeAliases>-->
<typeAliases>


</typeAliases>

<environments default="development">
<environment />
</mappers>


</configuration>

(2)db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8

(3)MybatisUtils

package com.kuang.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

//sqlSessionFactory -->sqlSession

public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {

InputStream inputStream = null;
try {
// 使用Mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}

}
// 获取salSessionFactory,完全包含了面向数据库执行SQL命令所需的所有方法
public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}

(4)pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--父工程-->
<groupId>com.kuang</groupId>
<artifactId>Mybatis-Study</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>Mybatis-01</module>
<module>mybatis-02</module>
<module>mybatis-03</module>
<module>mybatis-06</module>
<module>mybatis-08</module>
<module>mybatis-09</module>
<module>mybatis-10</module>
<module>mybatis-15</module>
</modules>

<!-- 导入依赖-->
<dependencies>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- mybatis-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>

</dependency>
</dependencies>
<!-- 在build中配置resource,来防止我们资源导出失败的问题-->、
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>

</project>

二、注解的方式(与SQL有关)

(1)CRUD

Mybatis的使用以及快速入门

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.kuang.dao.UserMapper">
<!-- 在当前Mapper.xml中使用二级缓存-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
<select >
select * from user where id=#{id}
</select>
</mapper>

UserMapper.xml文件。这里面主要写的是sql,现在我们来看一下,

namespace为所引用的接口,这里相当于UserMapper.

id,相当于这个UserMapper中方法的名字

resultType为返回的类型,parameterType为参数的类型

多对一

现在我们需要查询学生和老师的相关信息

Mybatis的使用以及快速入门

 其次,是在student中把resultType="Student",改成resultMap="StudentTeacher"

再写reultMap里面的值。

Mybatis的使用以及快速入门

 按照结果嵌套处理

Mybatis的使用以及快速入门

 一对多处理

Mybatis的使用以及快速入门

动态SQL

Mybatis的使用以及快速入门

缓存

一级缓存也就本地缓存

1)工作机制:

(a)一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中,如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中。

(b)新的会话查询信息,就可以从二级缓存中获取内容

(c)不同的mapper查出的数据会放在自己对应的缓存map中;

2)如何开启全局缓存

Mybatis的使用以及快速入门

在要使用二级缓存的Mapper中开启

Mybatis的使用以及快速入门

 小结:

 (a)只有开启了二级缓存,在同一个Mapper下就有效

(b)所以的数据都会先放在一级缓存中

(c)只有当会话提交,或者关闭的时候,才会提交到二级缓存中。

Mybatis的使用以及快速入门