知识储备:
mysql
JDBC
JAVA
Maven
总结:
实操线索:
1安装 —2新建项目----3mysql 建库----4maven 导依赖-----5创建子模块—6-配置----7编写工具类—8-实体类----9创建dao接口—10-编写配置文件----测试
一 前言
大家之前都有学习过 JDBC,通过 JDBC 来操作数据库,需要以下几个步骤:
- 加载数据库驱动
Class.forName();
2创 建并获取数据库链接
Connection conn=DriverManager.getConnection();
3创建 jdbc statement 对象
StateMent stat=
conn.createprepareStatement():
4编写 sql 语句
String sql=“select name from test”;
5设置 sql 语句中的参数(使用 preparedStatement)
通过 statement 执行 sql 并获取结果
ResultSet rs=
stat.exequery():
6对 sql 执行结果进行解析处理
释放资源(resultSet、preparedstatement、connection)
String name=rs.getString();
rs.close():
stat.close():
conn.close();
我们写程序本质上都是 CRUD,如果按照这种方式来写,我们会写的很难受。而且在系统层面也有着一定资源浪费。
二 Mybatis 简介(附 官网https://mybatis.org/mybatis-3/zh/getting-started.html)
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar 文件+配置几个 sql 映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis 不会对应用程序或者数据库的现有设计强加任何影响。sql 写在 xml 里,便于统一管理和优化。通过 sql 语句可以满足操作数据库的所有需求。
解除 sql 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql 和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的 orm 字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供 xml 标签,支持编写动态 sql。
三 实操
1 新建maven 项目
2 创建mysql 并插入数据
CREATE DATABASE mybatis
;
use mybatis
;
CREATE TABLE user
(
id
INT(20) not null PRIMARY KEY,
name
VARCHAR(30) DEFAULT NULL,
pwd
VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO user
(id
,name
,pwd
) VALUES
(1,‘kuls1’,‘111111’),
(2,‘kuls2’,‘222222’),
(3,‘kuls3’,‘333333’);
3 导入maven 依赖
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
com.kuls
mybatisdemo
pom
1.0-SNAPSHOT
我们创建 mybatis-config.xml,根据官网的模板编写核心配置文件:
<?xml version="1.0" encoding="UTF-8" ?> 6 编写 Mybatis 工具类 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200331190215416.png) **我们继续来看官方文档,每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。** 上面的话是官方的原话,我们结合代码来分析一下这段话 String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 首先,通过 Mybatis 中的一个工具类Resources的 getResourceAsStream 方法从类路径或其它位置加载资源文件,这里的资源文件就是我们上面所配置的核心配置文件,然后通过SqlSessionFactoryBuilder(相当于一个创造器)创建一个sqlSessionFactory(sqlSession 的工厂,不懂工厂的朋友可以去了解一下工厂设计模式),所谓工厂,就是能够不断地产生产品,这里的产品就是sqlSession。我们可以通过 SqlSessionFactory 的openSession方法获取sqlSession对象。
我们再 com.kuls 下创建一个包 utils 来存放我们的工具类:
package com.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;
/**
- @author kuls
- @Desc 公众号:JAVAandPython君
- @date 2020/3/17 11:49 上午
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//固定代码,使用mybatis获取sqlSessionFactory对象
String resource = “mybatis-config.xml”;
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
// org.apache.ibatis.session.SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
public static SqlSession getSqlSession(){
//获取SqlSession对象
return sqlSessionFactory.openSession(true);
}
}
通过这个工具类可以帮我们随时拿到sqlSession,在SqlSession中提供了在数据库执行 SQL 命令所需的所有方法。
7.编写实体类
com.kuls.pojo 中创建 User.java
package com.kuls.pojo;
/**
-
@author kuls
-
@Desc 公众号:JAVAandPython君
-
@date 2020/3/17 11:59 上午
*/
public class User {
private int id;
private String name;
private String pwd;public User() {
}public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
…省略了get和set方法以及toString方法,大家自己生成
8.创建Dao接口并绑定
创建UserMapper.java(在原来的写法中,dao包为UserDao的方法来命名,但是在Mybatis更加习惯Mapper的命名方式)
public interface UserDao {
//获取所有用户
List getUserList();
}
创建完接口后,我们需要在mybatis-config.xml中进行接口的绑定:
9.编写Mapper配置文件
这里就是Mybatis中改动比较大的部分,在以往的Dao接口,我们通常都是需要创建一个实现类来进行数据的操作,但是Mybatis中是以配置文件的形式来进行的。
我们再图中位置创建一个UserMapper.xml文件,记住,这里的名称要与Dao层文件的名称相同。
namespace的路径需要绑定到对应的接口
select标签代表的就是查询语句
select中的id需要和接口中的方法名称相同!!!
resultType代表着返回结果类型,我们要获取所有的User,所以此处为pojo包中的User类。
select标签中,填写我们相应的语句。
这里大家没有特别理解也没多大关系,我们现在得首要目的就是让它跑起来!
10.创建测试类进行测试
package com.kuls.dao;
import com.kuls.pojo.User;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
//通过工具类拿到sqlsession
SqlSession sqlSession = MybatisUtils.getSqlSession();
//通过sqlSession拿到相应的mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//通过mapper调用mapper中的方法
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}