目录
Mybatis简述
JDBC缺点
采用Mybatis简化开发
Mybatis快速入门
1、创建user表,添加数据
2、创建模块,导入坐标
3、编写Mybatis核心配置文件 ——> 替换连接信息,解决硬编码问题
4、编写SQL映射文件——> 统一管理sql语句,解决硬编码问题
5、编码
1、定义pojo类(存放从数据库查询出的结果)
2、加载核心配置文件
3、获取SqlSession对象,执行SQL语句(与PreparedStatements对象一致)
4、释放资源
使用Mapper代理开发
1、定义与SQL映射文件(UserMapper.xml)同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下
注意修改mybatis核心配置文件中mapper的resource
使用Mapper代理加载加载SQL映射文件
2、设置SQL映射文件的namespcae(名称空间)属性为Mapper接口的全限定名
3、在Mapper接口中定义方法,方法名就是SQL映射文件中SQL语句的id,并保持参数类型和返回值类型一致
4、编码
1、通过SqlSession对象的getMapper方法获取 Mapper接口的代理对象
2. 调用对应方法执行sql语句
Mybatis核心配置文件
typeAliases标签
environments标签
什么是Mybatis?
Mybatis是一款优秀的持久层框架,用于简化JDBC开发
Mybatis本是Apache的的一个开源项目iBatis,2010年这个项目有Apache software foundation 迁移到了goole code,并且更名为Mybatis。2013年11月迁移到了Github
官网:https://mybatis.net.cn/
持久层
负责将数据保存到数据库的那一层代码
JavaEE三层架构:表现层、业务层、持久层
表现层:负责页面展示
业务层:处理业务逻辑
持久层:
框架
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
解决硬编码、操作繁琐问题
下面以查询user表中所有数据作为演示,步骤如下
1、创建user表,添加数据
2、创建模块,导入坐标
3、编写Mybatis核心配置文件 ——> 替换连接信息,解决硬编码问题
4、编写SQL映射文件——> 统一管理sql语句,解决硬编码问题
5、编码
1、定义pojo类(存放从数据库查询出的结果)
2、加载核心配置文件
3、获取SqlSession对象,执行SQL语句(与PreparedStatements对象一致)
4、释放资源
create table tb_user
(
id int auto_increment
primary key,
username varchar(20) null,
password varchar(20) null,
gender char null,
addr varchar(30) null
);
创建Maven模块,并在pom.xml导入如下坐标
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
5.1.46
junit
junit
4.13
test
org.slf4j
slf4j-api
1.7.20
ch.qos.logback
logback-classic
1.2.3
ch.qos.logback
logback-core
1.2.3
在上一步操作已在pom.xml导入了mybatis的依赖坐标,这一步在src/main/resources下编写mybatis的核心配置文件 mybatis-config.xml ,去官网复制粘贴即可
以上操作不懂可以访问mybatis官网https://mybatis.net.cn/getting-started.html
这一步在src/main/resources下编写sql映射文件 UserMapper.xml(xxxMapper操作那一张数据库表,前面就写那一张表的表名) ,去官网复制粘贴即可
以上操作不懂可以访问mybatis官网https://mybatis.net.cn/getting-started.html
加载mybatis核心配置文件,获取SqlSessionFactory(去官网复制)
最终代码如下
package com.clear;
import com.clear.pojo.User;
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.InputStream;
import java.util.List;
public class MybatisDemo {
public static void main(String[] args) throws Exception{
// 1、加载mybatis核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession对象,执行sql语句
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行sql
List users = sqlSession.selectList("test.selectAll");
System.out.println(users);
// 释放资源
sqlSession.close();
}
}
结果如下
解决SQL警告
如图,虽然sql语句没问题,数据库也有该表,但是因为IDEA中无法得知表的存在而告警
解决方法
使用Mapper代理开发的目的
解决原生方式中的硬编码
简化后期执行SQL
mybatis官网也是这是说的,如下图所示
步骤如下:
1、在com/clear/mapper下创建一个与SQL映射文件同名的接口
2、将SQL映射文件UserMapper.xml移动至resource/com/clear/mapper目录下
3、(可选步骤)使用Maven工具 compile测试SQL映射文件与接口是否在同一目录
验证成功,SQL映射文件与接口都在classes/com/clear/mapper目录下
代码如下
package com.clear;
import com.clear.mapper.UserMapper;
import com.clear.pojo.User;
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.InputStream;
import java.util.List;
public class MapperDemo {
public static void main(String[] args) throws Exception {
// 1、加载mybatis核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession对象,执行sql语句
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession对象的getMapper方法获取 Mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用对应方法执行sql语句
List users = userMapper.selectAll();
// 执行sql
//List users = sqlSession.selectList("test.selectAll");
System.out.println(users);
// 释放资源
sqlSession.close();
}
}
执行结果如下
mybatis官网https://mybatis.net.cn/configuration.html
注意:在配置各个标签时,需要遵守前后顺序
该标签是意在降低冗余的全限定名的类名书写
例子如下
该标签是配置数据库的连接信息。可以配置多个environment,通过default属性切换不同的environment