目录
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是一款优秀的持久层框架,用于简化JDBC开发
Mybatis本是Apache的的一个开源项目iBatis,2010年这个项目有Apache software foundation 迁移到了goole code,并且更名为Mybatis。2013年11月迁移到了Github
持久层
负责将数据保存到数据库的那一层代码
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导入如下坐标
- <dependencies>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.5.5version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.46version>
- dependency>
-
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.13version>
- <scope>testscope>
- dependency>
-
-
- <dependency>
- <groupId>org.slf4jgroupId>
- <artifactId>slf4j-apiartifactId>
- <version>1.7.20version>
- dependency>
-
- <dependency>
- <groupId>ch.qos.logbackgroupId>
- <artifactId>logback-classicartifactId>
- <version>1.2.3version>
- dependency>
-
-
- <dependency>
- <groupId>ch.qos.logbackgroupId>
- <artifactId>logback-coreartifactId>
- <version>1.2.3version>
- dependency>
- dependencies>
在上一步操作已在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

