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