一、pom.xml配置文件
导入MyBatis框架包以及所需仓库(Maven技术在云端下载)
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bdqn</groupId>
<artifactId>T369-MyBatis</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>T369-MyBatis Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 引入外部Jar包(资源) -->
<dependencies>
<!-- 引入MySQL驱动包 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
</dependency>
<!-- 引入MyBait(数据库操作框架) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- 引入Log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>T369-MyBatis</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
二、配置MyBatis框架核心配置文件mybatis-config.xml
MyBatis框架的核心配置文件中设置的是MyBatis框架的全局信息,包括数据库连接及事务信息、MyBatis框架运行所需的各种特性,以及一些影响MyBatis框架运行时的行为的属性。需要注意的是该配置文件的元素节点是有先后顺序的。
configuration 根节点
properties 描述一些外部的、可替代的属性
settings 修改MyBatis的运行时行为
typeAliases 为Java类型指定一个别名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境配置
environment 一组环境配置
》transactionManager 事务管理器
》dataSource 数据源
databaseIdProvider 启动多数据库厂商支持
mapper 映射器
<?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>
<!-- 引入database.properties配置 -->
<properties resource="database.properties" />
<!-- 设置MyBatis框架的运行时行为 -->
<settings>
<!-- 使用Log4j作为MyBatis框架的日志实现 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<typeAlias type="com.bdqn.entity.Book" alias="book"/>
</typeAliases>
<!-- 配置MyBatis框架的运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器,采用JDBC事务,由应用自行管理事务 -->
<transactionManager type="JDBC" />
<!-- 配置数据源,POOLED:MyBatis提供的数据源,JNDI:JNDI数据源 -->
<dataSource type="POOLED">
<!-- 使用¥{}引用定义的参数,此处参数来自database.properties文件 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 配置映射文件 -->
<mappers>
<mapper resource="mapper/BookMapper.xml" />
</mappers>
</configuration>
三、创建实体类
在应用程序设计中,实体类通常对应需求中的业务实体,并与关系型数据库中的表结构存在对应关系。通过实体类映射SQL语句实现持久化操作时MyBatis框架最常见的工作模式。
MyBatis框架一般采用POJO编程模型定义实体类,POJO可以简单地理解为符合JavaBean规范的普通的Java对象,该对象没有特殊的继承或实现关系(java.io.Serializable接口除外),使用私有属性存储对象状态,访问属性必须通过相应的getter和setter方法,符合面向对象封装的要求。
package com.bdqn.entity;
import java.io.Serializable;
/**
* @author 崔书健
*/
//@Alias("book")
public class Book implements Serializable {
private static final long serialVersionUID = 42L;
private int bid;
private String bName;
private String author;
private String pubComp;
private String pubDate;
private int bCount;
private float price;
public String toString() {
return "book{bid="+this.bid+",bName="+this.bName+",author="+this.author+",pubComp="+this.pubComp+",pubDate="+this.pubDate+",bCount="+this.bCount+",price="+this.price+"}";
}
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getbName() {
return bName;
}
public void setbName(String bName) {
this.bName = bName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPubComp() {
return pubComp;
}
public void setPubComp(String pubComp) {
this.pubComp = pubComp;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}
public int getbCount() {
return bCount;
}
public void setbCount(int bCount) {
this.bCount = bCount;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
四、创建Mapper接口
在MyBatis框架下,Mapper接口是指用于 绑定到SQL映射语句的接口,又称映射器,通常于SQL映射文件配合使用。对应用而言,Mapper接口即为DAO接口,定义了对数据进行持久化操作的API。
package com.bdqn.mapper;
import com.bdqn.entity.Book;
import java.util.List;
public interface BookMapper {
/**
* 统计图书数量的方法
* @return
*/
public int count();
/**
* 查询用户列表
* @return
*/
public List<Book> getBookList();
}
五、创建SQL映射文件
定义与用户操作相关的SQL映射文件,该文件时一个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.bdqn.mapper.BookMapper">
<!-- 查询总数量 -->
<select id="count" resultType="int">
select count(1) from book
</select>
<select id="getBookList" resultType="com.bdqn.entity.Book">
select * from book
</select>
</mapper>
六、编写测试类
本文章使用JUnit进行测试,结果在控制台输出
定义工具类MyBatisUtil
在静态代码块中创建SqlSessionFactory实例,并定义两个静态方法,分别用于创建SqlSession和关闭SqlSession。
package com.bdqn.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;
/**
* @author 崔书健
*/
public class MyBatisUtil {
private static SqlSessionFactory factory;
static{
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
throw new RuntimeException("初始化失败",e);
}
}
public static SqlSession createSqlSession(){
return factory.openSession(false); // false表示关闭自动提交用于事务控制
}
public static void closeSqlSession(SqlSession sqlSession){
if (sqlSession != null){
sqlSession.close();
}
}
}
创建测试类
package com.bdqn.mapper;
import com.bdqn.entity.Book;
import com.bdqn.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.io.InputStream;
import java.util.List;
import java.util.logging.Logger;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author 崔书健
*/
public class SysBookMapperTest {
private SqlSession sqlSession;
/**
* 在每一个测试用例执行之前做的事情
* @throws Exception
*/
@Before
public void setUp() throws Exception{
sqlSession = MyBatisUtil.createSqlSession();
}
/**
* 在每一个测试用例执行之后做的事情
*/
@After
public void tearDown(){
MyBatisUtil.closeSqlSession(sqlSession);
}
/**
* 测试查询总数据量(myBatis框架基本使用)
*/
@Test
public void testCount(){
int count = sqlSession.getMapper(BookMapper.class).count();
System.out.println("总数据量:" + count);
assert true;
}
/**
* 测试查询数据列表
*/
@Test
public void testBookListQuery(){
List<Book> list = sqlSession.getMapper(BookMapper.class).getBookList();
for (Book book : list) {
System.out.println(book);
}
assert true;
}
}