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 id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.kuang.dao.BlogMapper"/>
</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
<?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 id="querUserById" resultType="User">
select * from user where id=#{id}
</select>
</mapper>
UserMapper.xml文件。这里面主要写的是sql,现在我们来看一下,
namespace为所引用的接口,这里相当于UserMapper.
id,相当于这个UserMapper中方法的名字
resultType为返回的类型,parameterType为参数的类型
(2)多对一
(a)复杂环境的搭建
1)新建数据库 2)导入lomobok 3)新建实体类Teacher,Student 4)建立Mapper接口 5)建立Mapper.xml文件 6)在核心配置文件中绑定注册我们的Mapper接口或者文件 6)测试查询是否能够成功
(b)现在我们需要查询学生和老师的相关信息
其次,是在student中把resultType="Student",改成resultMap="StudentTeacher"
再写reultMap里面的值。
(b)按照结果嵌套处理
(3)一对多处理
(4)动态SQL
(a)什么是动态SQL
动态SQL就是根据不同的条件生成不同的SQL语句。
(b)if
(5)缓存
一级缓存也就本地缓存
1)工作机制:
(a)一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中,如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中。
(b)新的会话查询信息,就可以从二级缓存中获取内容
(c)不同的mapper查出的数据会放在自己对应的缓存map中;
2)如何开启全局缓存
(2)在要使用二级缓存的Mapper中开启
也可以自动参数
(3)测试
(a)问题:我们需要将实体类序列化,否则会报错
小结:
(a)只有开启了二级缓存,在同一个Mapper下就有效
(b)所以的数据都会先放在一级缓存中
(c)只有当会话提交,或者关闭的时候,才会提交到二级缓存中。
(6)Mybatis的核心
(7)Mybatis总结
通过这次Mybatis,我也终于了解了在项目开发中为什么将SQL和代码进行分离,以及各个参与的意思,xml文件怎么和接口向连接的,以及为什么实体类要进行实现序列化接口等等。
本文地址:https://blog.csdn.net/MyxZxd/article/details/107672923