一心同学主要在这篇文章介绍MyBatis的安装,以及简单使用。
环境
IDEA
Maven:3.3.9
MyBatis:3.5.6
MySql:8.0.23
数据库准备
CREATE DATABASE `mybatis_blog`;
USE `mybatis_blog`;
DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `blog`(`id`,`name`,`pwd`) values (1,'yixin','123456'),(2,'张三','111222'),(3,'李四','135790');
第一步
创建一个Maven项目,并在其pom.xml导入mybatis和mysql的依赖,并刷新maven
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
第二步
编写MyBatis核心配置文件mybatis-config.xml,并将其放在resources目录下
注意:属性的顺序不能调换!,这个文件大有讲究,由于本节博客只是讲授MyBatis的简单入门使用,这里一心同学将会在下一个博客详解。
<?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>
<properties resource="db.properties"><!--将数据库的相关信息导入进来,以方便数据连接调用-->
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/><!--采用JDBC连接方式-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers><!--设置映射器,需要告诉 MyBatis 到哪里去找到这些语句。-->
<mapper resource="com/yixin/dao/BlogMapper.xml"/>
</mappers>
</configuration>
db.properties是记录你要连接的数据库的相关信息
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_blog?useSSL=true&useUnicode=true&characterEncoding=UTF-8\
&autoReconnect=true&failOverReadOnly=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username=root
password=123456
注意:这两个文件是放在同一个目录下,如果不想要db.properties,也可以将以上的${driver},${url},${username},${password}替换成你数据库相应的信息即可:
第三步
创建实体类,而且在创建包路径时希望大家可以规范创建,这是一个良好的习惯,目录如下:
在pojo路径下编写实体类Blog
package com.yixin.pojo;
public class Blog {
private int id;
private String name;
private String pwd;
//get、set方法
//有参,无参方法
}
第四步
在dao路径下编写Mapper接口类
package com.yixin.dao;
import com.yixin.pojo.Blog;
import java.util.List;
public interface BlogMapper {
public List<Blog> selectBlogAll();
}
第五步
在dao路径下编写BlogMapper.xml配置文件,是放置SQL语句的文件(重要!!!),通常为了规范,命名跟其接口类一样
<?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.yixin.dao.BlogMapper"><!---与其接口类相映射--->
<select id="selectBlogAll" resultType="com.yixin.pojo.Blog"><!---resultType:是返回结果类型---->
select * from blog
</select>
</mapper>
其中的id名,分为两种情况:
1.如果我们的调用方式是希望通过接口来调用相应的方法操作数据库,那么在BlogMapper.xml文件中,所有的id名都应当与BlogMapper接口的方法名一致。
特点:该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。
这种方式有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。
BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);
List<Blog> blogList=mapper.selectBlogAll();
2.如果我们的调用方式是希望通过SqlSession实例来直接执行已映射的 SQL 语句,因为SqlSession提供了在数据库执行 SQL 命令所需的所有方法。那么BlogMapper.xml中id的名字可以选择和MapperBlog接口不一致,因为既然选择了这种方式,也就意味不需要MapperBlog接口了。
List<Blog> blogList=sqlSession.selectList("com.yixin.dao.BlogMapper.selectBlogAll");
//也可以不选择全限定名
//List<Blog> blogList=sqlSession.selectList("selectBlogAll");
到这一步我们就已经将MyBatis配置得差不多了,我们先来了解如何使用MyBatis
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);
List<Blog> blogList=mapper.selectBlogAll();
for (Blog blog : blogList) {
System.out.println(blog);
}
sqlSession.close();
以上代码会发现以下这四行代码的配置是固定的,那么我们就来为MyBatis编写一个工具类
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
package com.yixin.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;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
到这里我们就已经完全配置好了,开始测试:
@Test
public void test(){
SqlSession sqlSession= MybatisUtils.getSession();
BlogMapper mapper= sqlSession.getMapper(BlogMapper.class);
List<Blog> blogList=mapper.selectBlogAll();
for (Blog blog : blogList) {
System.out.println(blog);
}
sqlSession.close();
}
输出结果:
说明就已经成功了。
在运行过程中,可能因为配置不匹配会出现以下问题:
问题1:
解决:这是因为Maven静态资源过滤问题
只需要在pom.xml下添加以下代码并重新刷新maven,解决静态资源过滤
<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>
问题2:
解决:
如果看到这个错误,说明你的数据库配置错误,注意:MySQL8.0及以上的版本,url需要在后面加一个时区serverTimezone
结语
到这里,一心同学对MyBatis的简单使用讲解就结束了,下一个博客将会详细讲解配置文件以及MyBatis之间的调用关系。