mybatis框架的技术难点学习:入门教程-搭建入门工程
mybatis框架的技术难点学习:入门教程-搭建入门工程CREATE TABLE `book` ( `id` int(11) NOT NULL COMMENT '主键ID' `bookname` varchar(255) DEFAULT NULL `booktype` varchar(255) DEFAULT NULL PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;创建完表之后,接下来就是需要来配置MyBatis相关的东西了。第二步就是创建一个数据表<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</ve
Maven作为一个优秀的项目构建和管理工具,在日常的开发中被大多数开发者使用,后续的项目也是基于Maven来构建。
利用IDEA创建项目工具来创建一个Maven项目
这里可以从Maven仓库地址中进行查看,https://mvnrepository.com/ 从这里可以查找Maven相关的依赖以及版本。
找到对应的MyBatis的依赖之后,在项目Pom文件中进行引入,这里我们选择的是如下的版本
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
当然为了让项目运行起来,还需要引入其他的一些依赖。整体的项目配置依赖如下
<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mySQL-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.28</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.28</version>
</dependency>
</dependencies>
</project>
当然上面这些依赖都是一些基础的依赖想要让项目跑起来就要看接下来的步骤
准备数据库首先创建一个数据库可以使用Navicat 的客户端来创建。创建一个MyBatis的数据库。字符集设置成utf8mb4,方便存储一些中文内容。
第二步就是创建一个数据表
CREATE TABLE `book` (
`id` int(11) NOT NULL COMMENT '主键ID'
`bookname` varchar(255) DEFAULT NULL
`booktype` varchar(255) DEFAULT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建完表之后,接下来就是需要来配置MyBatis相关的东西了。
配置MyBatis配置MyBatis有很多中方式,在开发中我们经常使用的方式是通过XML的方式进行配置。这里需要注意的就是,除了我们经常使用XML的方式,在于Spring集成的时候还可以通过Spring Bean的方式进行配置,或者有的时候我们还可以通过注解的方式进行配置。
在使用XML的方式进行配置的时候,首先需要在src/main/resource下面创建一个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>
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<typeAliases>
<package name="com.mybatis.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/BookMapper.xml"/>
</mappers>
</configuration>
简单地做个说明。
- <settings> 中的logImpl 属性配置指定使用LOG4J输出日志
- <typeAliases> 元素下是配置了一个包的别名,通常确定一个类引用的时候需要知道它的全类名,在MyBatis映射实体类的时候需要经常使用到这个路径,所以需要在配置的时候添加全类名路径,在使用的时候就不需要写类路径,而是直接使用类名就可以了。
- <environments> 环境配置,在其中配置了数据库连接相关的内容,包括数据库驱动,数据库连接地址,用户名,密码等等一些内容。
- <mappers> 配置包含了全路径的Mapper映射文件。这个Mapper映射文件就是我们用来编写SQL语句的映射文件,通过映射关系来实现ORM操作。
在之前的分析中,我们知道MyBatis是一个结果映射的框架,所以这里创建的实体类就是我们需要从数据库中获取到的数据对象。在实际开发的过程中一个数据表会对应一个这样的对象,并且表字段与对象属性是一一对应的,而且这个对象就是用来完成CRUD操作的。所以在这里将这个对象暂且先称为实体对象。
在上面指定typeAliases属性的配置路径下创建如下的实体对象。
public class Book {
private Long id;
private String bookname;
private String booktype;
}
然后在对应的 src/main/resource 创建一个mapper目录,然后将BookMapper.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.mybatis.mapper.BookMapper">
<select id="selectAll" resultType="Book">
select id bookname booktype from book
</select>
</mapper>
定义完成之后,简单地来说明一下
- <mapper> 作为XML的根节点元素,属性namespace 定义当前的XML对应的名称空间
- <select> 元素定义一个查询操作 id属性表示定义一个唯一的绑定ID,resultType属性定义了当前SQL操作完之后返回的结果。
在src/main/resource 路径下 创建log4j.properties 的文件。内容如下
#全局配置
log4j.rootLogger = ERROR stdout
# MyBatis 日志配置
log4j.logger.com.mybatis.mapper = TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
需要注意的点是,我这里演示的是最原始的方式,在实际开发中的配置要比这个高级。
编写测试代码package com.mybatis.test;
import com.mybatis.model.Book;
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 org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class BootTest {
private static SqlSessionFactory sqlSessionFactory;
@BeforeClass
public static void init(){
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
@Test
public void testSelectAll(){
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
List<Book> bookList = sqlSession.selectList("selectAll");
printBookList(bookList);
}finally {
sqlSession.close();
}
}
private void printBookList(List<Book> bookList) {
for (Book item: bookList) {
System.out.println(item.getId() " " item.getBookname() " " item.getBooktype());
}
}
}
简单的代码说明
- 首先通过Resource 工具类将配置文件读取到Reader中。
- 再通过SQLSessionFactoryBuilder 构建一个 SQLSessionFactory 工厂对象,在创建工厂的过程中,加载到配置文件mybatis-config.xml的配置文件,然后将对应的配置项进行解析。
- 使用SQLSessionFactory创建一个SqlSession对象。
- 通过SqlSession 的selectList方法查找到BookMapper.xml id = “selectAll”的方法,然后执行对应的SQL。
- 通过一系列的底层操作,映射查询返回值对象,将结果进行输出。最终关闭Session 防止连接超出,导致系统崩溃。
通过上面的操作,我们对于MyBatis有了一个简单的认识,并且知道如何直接构建MyBatis项目,脱离的Spring 框架的支持,可以直接理解到MyBatis的底层实现原理。并且通过最简单的方式理解MyBatis的原理。