MyBatis入门

一心同学主要在这篇文章介绍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}替换成你数据库相应的信息即可:

MyBatis入门

第三步

创建实体类,而且在创建包路径时希望大家可以规范创建,这是一个良好的习惯,目录如下

MyBatis入门

在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();

}

输出结果

MyBatis入门

说明就已经成功了。

在运行过程中,可能因为配置不匹配会出现以下问题:

问题1:

MyBatis入门

解决:这是因为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

MyBatis入门

解决

如果看到这个错误,说明你的数据库配置错误,注意:MySQL8.0及以上的版本,url需要在后面加一个时区serverTimezone

结语

到这里,一心同学对MyBatis的简单使用讲解就结束了,下一个博客将会详细讲解配置文件以及MyBatis之间的调用关系。

上一篇:MyBatis官方文档-入门,java异步编程实战


下一篇:动态SQL