概述
前言
相信学习过JDBC的人都知道,底层操作数据库的代码还是相当繁琐的。我们实现相关业务的时候,首先得得编写相关的配置类,获取连接,接着编写数据库的sql语句,若是查询语句,还需遍历结果集,最后再关闭连接。这套流程下来确实需要花费一大段时间,但我们的主流业务其实就是编写相关的sql语句,而其余的基本上都是一套固定的模板,所以这时候简化我们数据库操作的Mybatis框架应允而生。
1. 简介
1.1 什么是Mybatis?
[1] Mybatis是一款优秀的持久层框架
[2] 它支持自定义Sql,存储过程以及高级映射
[3] Mybatis免除了几乎所有的JDBC代码以及置参数和获取结果集的操作
[4] Mybatis可以通过简单的XML 或注释来配置和映射原始类型,接口和 java pojo (Plain Old Java Objects, 普通老式java对象)为数据库中的记录
[5] Mybatis本事 apache的一个开源项目 iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis
[6] 2013年11月迁移到Github。(相关的源码可在GitHub上查找)
如何获得Mybatis?
[1] Maven仓库获取jar包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
[2] GitHub上获取源码: https://github.com/mybatis/mybatis-3
[3] 使用中文文档进行学习: https://mybatis.org/mybatis-3/zh/index.html
1.2 持久化
数据持久化: 持久化就是将程序的数据在持久化状态和瞬时状态的转化过程
可以使用的相关方法:数据库(jdbc), io文件持久化
为什么需要持久化?
有一些对象,不能让它丢掉,又不建议保存在内存中,因为内存太贵了。
持久层: 完成持久化工作的代码块
1.3 为什么需要Mybatis?
[1] 帮助程序员将数据存入数据库中
[2] 操作方便
[3] 传统的JDBC代码太复杂了;Mybatis简化了操作, 而且有一些内置的自动化配置
[4] 优点:
- 简单易学
- 灵活
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。
2. 编写第一个Mybatis程序
[1] 搭建数据库
CREATE TABLE `user1`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user1`(`id`,`name`,`pwd`) VALUES
(1,'张三','1122144'),
(2,'李四','1814545'),
(3,'王五','987133')
[2] 新建一个普通的Maven项目
- 在pom.xml中导入Maven依赖
<!--导入依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit:主要是用在测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
接下来关于逻辑层的编写,我们可以参考mybatis的中文官方文档
编写完成后的目录结构(下面逐步进行讲解)
[1] 编写配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--这里的值先放一些固定的值,后期可提取为外部配置文件后再读取(也就是官方文档书写的形式)-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--这里的地址放我们编写关于数据库操作的xml文件-->
<mappers>
<mapper resource="com/gs/dao/UserMapper.xml"/>
</mappers>
</configuration>
[2] 在utils 包下创建一个Mybatis的工具类(主要作用就是获取SqlSession)
官方文档中有这么一段话:
这段代码是固定套路的,不用刻意去记,了解大意即可、
package com.gs.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;
/**
* @Auther: Gs
* @Date: 2020/6/5
* @Description: com.gs.utils
* @version: 1.0
*/
//sqlSessionFactory ---> sqlSession
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 的实例。
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
*/
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
[3] 在pojo包下创建和表对应的实体类 User.class
package com.gs.pojo;
/**
* @Auther: Gs
* @Date: 2020/6/5
* @Description: com.gs.pojo
* @version: 1.0
*/
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;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + ''' +
", pwd='" + pwd + ''' +
'}';
}
}
[4] 在dao包下编写相关的数据库操作代码
- 编写接口类 UserDao
public interface UserDao {
List<User> getUserList();
}
- 编写 UserDao的实现类 UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--这里的路径为自己编写接口的路径-->
<mapper namespace="com.gs.dao.UserDao">
<!--这里的路径为自己实体类的包路径-->
<select id="getUserList" resultType="com.gs.pojo.User">
select * from user1;
</select>
</mapper>
[5] 编写测试代码
package com.gs.dao;
import com.gs.pojo.User;
import com.gs.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.junit.Assert.*;
/**
* @Auther: Gs
* @Date: 2020/6/5
* @Description: com.gs.dao
* @version: 1.0
*/
public class UserDaoTest {
@Test
public void getUserList() {
//第一步: 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSession();
//方式一:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for( User user : userList){
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
}
写到这里满心欢喜的测试了一下,结果报错了
很明显它是没找到我们的配置文件,可我们明明书写了,可它为什么找不到呢?我们打开这个项目打包后的文件目录确实发现dao包下没有相关的xml文件
原因:这主要是由Maven约定大于配置,它默认是不会吧src目录下的xml文件进行打包的,我们必须在pom.xml上加上这段配置才可以避免上面的错误。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
这时我们再次运行程序,查看控制台
观察输出目录
这样我们第一个Mybatis程序就算编写成功了
最后
以上就是不安钢铁侠为你收集整理的MyBatis的简介及第一个Mybatis程序的全部内容,希望文章能够帮你解决MyBatis的简介及第一个Mybatis程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复