学习视频:1001 框架概述_哔哩哔哩_bilibili
目录
框架概述
1.1为什么要学
1.2框架的优点
1.3 当前主流框架
Spring框架
Spring MVC框架
MyBatis框架
编辑
Spring Boot框架
Spring Cloud框架
1.4 传统JDBC的劣势
MyBatis
2.1 MyBatis概述
ORM框架工作原理
解决JDBC编程劣势
2.2 MyBatis环境搭建
pom.xml
db.properties
mybatis-config.xml
2.3 MyBatis入门程序
创建User实体类
UserMapper.xml 实现sql语句和java对象之间的映射
测试类
2.4 MyBatis的工作原理
8个步骤
框架概述
1.1为什么要学
1.2框架的优点
1.3 当前主流框架
Spring框架
Spring MVC框架
MyBatis框架
Spring Boot框架
Spring Cloud框架
1.4 传统JDBC的劣势
MyBatis
2.1 MyBatis概述
ORM框架工作原理
解决JDBC编程劣势
2.2 MyBatis环境搭建
<!-- 只展示了其中一个依赖-- >
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency>
...
</dependencies>
create database mybatis;
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root
<configuration><properties resource="db.properties"/>
<environments default="development">
<environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${mysql.driver}" /><property name="url" value="${mysql.url}" /><property name="username" value="${mysql.username}" /><property name="password" value="${mysql.password}" /></dataSource></environment></environments>
</configuration>
pom.xml
<?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>org.example</groupId><artifactId>mybatistest</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><!--单元测试--><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>8.0.28</version><scope>runtime</scope></dependency></dependencies></project
db.properties
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd" >
<!--配置mybatis环境-->
<configuration><!--引入外部db.properties--><properties resource="db.properties"></properties><!--配置连接使用的相关参数default为默认使用的环境:development 测试环境product 生产环境--><environments default="development"><!--测试环境--><environment id="development"><!--事务管理类型:指定事务管理的方式 JDBC--><transactionManager type="JDBC"/><!--数据库连接相关配置,动态获取config.properties文件里的内容--><!--数据源类型:POOLED 表示支持JDBC数据源连接池UNPOOLED 表示不支持数据源连接池JNDI 表示支持外部数据源连接池--><dataSource type="POOLED"><!--此处使用的是MySQL数据库,使用Oracle数据库时需要修改,仔细检查各项参数是否正确,里面配置了时区、编码方式、SSL,用以防止中文查询乱码,导致查询结果为null及SSL警告等问题--><property name="driver" value="${mysql.driver}"/><property name="url"value="${mysql.url}"/><property name="username" value="${mysql.username}"/><property name="password" value="${mysql.password}"/></dataSource></environment></environments><mappers><!--配置xxxMapper.xml文件的位置--><mapper resource="mapper/UserMapper.xml"/></mappers></configuration>
2.3 MyBatis入门程序
use mybatis;
create table users(uid int primary key auto_increment,uname varchar(20) not null,uage int not null
);
insert into users(uid,uname,uage) values(null,'张三',20),(null,'李四',18);
package com.itheima.pojo;
public class User {private int uid; // 用户idprivate String uname; // 用户姓名private int uage; // 用户年龄// 省略getter/setter方法…
}
<mapper namespace="com.itheima.pojo.User"><!--id ="接口中的方法名"parameterType="传入的参数类型"resultType = "返回实体类对象,使用包.类名"-->
<select id="findById" parameterType="int" resultType="com.itheima.pojo.User"> select * from users where uid = #{id}
</select>
</mapper>
<!– mapping文件路径配置-->
<mappers><mapper resource="mapper/UserMapper.xml"/>
</mappers>
如果一个项目有多个映射文件,则mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多个<mapper>元素指定映射文件的路径。
public class UserTest { public void userFindByIdTest() {String resources = "mybatis-config.xml"; Reader reader=null;try { reader= Resources.getResourceAsReader(resources);} catch (IOException e) { e.printStackTrace();}SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);SqlSession session=sqlMapper.openSession();User user=session.selectOne("findById",1);System.out.println(user.getUname());session.close();}}
创建User实体类
package com.it.pojo;public class User {private int uid;private String uname;private int uage;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public int getUage() {return uage;}public void setUage(int uage) {this.uage = uage;}@Overridepublic String toString() {return "User{" +"uid=" + uid +", uname='" + uname + '\'' +", uage=" + uage +'}';}}
UserMapper.xml 实现sql语句和java对象之间的映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--mapper为映射的根节点,用来管理DAO接口namespace指定DAO接口的完整类名,表示mapper配置文件管理哪个DAO接口(包.接口名)mybatis会依据这个接口动态创建一个实现类去实现这个接口,而这个实现类是一个Mapper对象-->
<mapper namespace="com.it.pojo.User"><!--id = "接口中的方法名"parameterType = "接口中传入方法的参数类型"resultType = "返回实体类对象:包.类名" 处理结果集 自动封装注意:sql语句后不要出现";"号查询:select标签增加:insert标签修改:update标签删除:delete标签--><select id="findById"parameterType="int"resultType="com.it.pojo.User">select * from users where uid=#{id}</select></mapper>
测试类
package com.it.test;import com.it.pojo.User;
import jdk.management.resource.ResourceRequest;
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 org.junit.Test;import java.io.InputStream;public class UserTest01 {@Testpublic void findById() throws Exception{//1.获取核心配置文件InputStream is= Resources.getResourceAsStream("mybatis-config.xml");//2.创建sqlSessionFactory工厂对象SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);//3.创建sqlSession对象SqlSession sqlSession=sqlSessionFactory.openSession();//4.执行sql语句 sql语句唯一标识:namespace.statementIdUser user=sqlSession.selectOne("com.it.pojo.User.findById",1);System.out.println(user);//5.释放资源sqlSession.close();}}
2.4 MyBatis的工作原理
8个步骤
(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。
(2)加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。
(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。
(4)创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
(5)创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。
(6)封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装到MappedStatement对象中。
(7)操作数据库:根据动态生成的SQL操作数据库。
(8)输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。