注意:以下所有的内容,是通过实验得出,并进行总结,如有错误,请指正
文章目录
注意:以下所有的内容,是通过实验得出,并进行总结,如有错误,请指正
前言
在初学Mybatis框架时,大家或多或少的都会遇到很多问题,今天我将带领大家利用简短的时间带领大家了解Mybatis框架,从了解到实现第一个Mybatis程序
在开始讲解之前,我们先统一一下所用工具的环境:
- MySQL版本:8.0.30
- maven 版本:3.8.6
- IDEA 版本:2021.3.2
- JDK 版本:1.8
ok,版本统一后,我们开始沉浸式的学习~~
一、简介
1. 什么是Mybatis
- MyBatis 是一款优秀的持久层框架。
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- MyBatis本是apache的一个开源项目2010年这个项目迁移到了google 并且改名为MyBatis。
- 2013年11月迁移到Github。
2. 如何获得Mybatis
-
maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency>
-
中文文档:mybatis – MyBatis 3
-
在初步了解完mybatis后,我们来开始练习第一个mybatis程序吧!
二、编写第一个Mybatis程序
1.搭建数据库
由于搭建数据库创建用户表的过程比较简单,此过程不详细给大家说明,代码如下(示例):
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,'test01','123456'),
(2,'test02','123456'),
(3,'test03','123456')
2.新建项目
-
新建一个普通的maven项目
-
删除src文件
-
导入maven依赖(删除父工程的src文件后我们需要创建一个子工程,然后在父工程的pom.xml文件中配置maven依赖)
<!-- 导入依赖 --> <dependencies> <!--mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> <!--注意:这里mysql的驱动尽量与数据库版本保持一致--> </dependency> <!--mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency> <!--junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> </dependencies>
3.创建模块
3.1编写核心配置文件
<?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>
</configuration>
注意:如果在编写核心配置文件时,以下语句有错误时,按照如下步骤更改
"http://mybatis.org/dtd/mybatis-3-config.dtd"
3.1编写Mybatis工具类
//工具类SqlSessionFactory sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
//使用mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
//sqlSession 完全包含了数据库执行SQL命令所需的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
4.编写代码
4.1 实体类
首先,我们需要创建一个用户的实体类,在实体类中我们创建一个有参构造和无参构造以及创建get/set方法用来得到私有属性
package com.XumoRan.pojo;
//实体类
public class User {
private int id;
private String name;
private String pwd;
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public User() {
}
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.2 Dao接口
public interface UserDao {
List<User> getUserList();
}
4.3 接口实现类
在创建完接口后,我们需要创建一个接口的实现类,来实现我们对数据库具体的操作
<?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">
<!--namespace=绑定一个对应的Mapper接口-->
<mapper namespace="com.XumoRan.dao.UserDao">
<select id="getUserList" resultType="com.XumoRan.pojo.User">
select * from mybatis.user
</select>
</mapper>
到这里我们编写的mybatis程序的框架基本完成,最后我们需要创建一个测试类,来获取到我们数据库中的用户表,但是我们在测试之前,需要注意一个问题,在maven中可能会出现资源导出失败的问题,也就是如下异常:
org.apache.ibatis.binging.BingingException:Type interface com.XumoRan.dao.UserDao is not known to the MapperRegistry
所以我们为了防止出现资源导出失败的问题,可以在父工程的pom.xml(也可以在子工程的pom.xml文件下在配置一遍)文件中在build中配置resources
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resource>
<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>
</resource>
</build>
4.3 Junit测试
@Test
public void test(){
//第一步:获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
三、总结
1.可能出现的异常
1.java.sql.SQLException: The server time zone value ''
解决办法:
原: <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
改:<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
serverTimeZone的作用就是指定web服务器和mysql服务器的会话期间的mysql服务器时区,就是临时指定mysql服务器的时区。
2.NullPointException
解决办法:
原:SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
改:sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.源代码以及源文档
源文档:https://pan.baidu.com/s/1skY7FUAH20I4enxjz5eprQ?pwd=hbgg
提取码:hbgg
源代码:https://pan.baidu.com/s/1Mf9xiLrGFWBTsgg3ZwwU4A?pwd=cmc8#list/path=%2F
提取码:cmc8