简介
- 我们知道创建Maven项目后,在项目中的pom.xml配置文件中引入MyBatis依赖之后,我们就可以使用MyBatis相关的类和接口和相应的功能。
- 但为了对MyBatis的体系结构和功能有更加深刻的理解和全面的认识,本文Maven项目中的pom.xml配置文件将不再引入MyBatis依赖,转而通过自定义编写MyBatis相关的类和接口来实现同样的功能。
- MyBatis相关类和接口的介绍流程按照 测试类 中的操作步骤为顺序,先用到的类和接口先出现。
思维导图
环境搭建
Maven项目依赖
- 在pom.xml 文件中,并不引入MyBatis框架的依赖:
- mysql-connector-java(数据库连接)
- junit (单元测试)
- log4j(日志文件)
- dom4j(解析xml文件)
- jaxen(dom4j的依赖)
<?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>cn.water</groupId>
<artifactId>section02_MyPom</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
</project>
创建数据库
#创建数据库
CREATE DATABASE mybatis;
USE mybatis;
#创建表
CREATE TABLE USER(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) NOT NULL COMMENT '用户名称',
birthday DATETIME DEFAULT NULL COMMENT '生日',
sex CHAR(1) DEFAULT NULL COMMENT '性别',
address VARCHAR(256) DEFAULT NULL COMMENT '地址'
) ENGINE = INNODB DEFAULT CHARSET = utf8;
#插入数据
INSERT INTO USER VALUES
(41,'老王','2018-02-27 17:47:08','男','北京'),
(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),
(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),
(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),
(46,'老王','2018-03-07 17:37:26','男','北京'),
(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
目录结构
- src/main
- java
- cn/water/dao
- UserAnnoDao.java(持久层接口)
- UserDao.java(持久层接口)
- cn/water/domain
- cn/water/mybatis
- cfg
- Configuration.java(实体类)
- Mapper.java(实体类)
- defaults
- DeaultSqlSession.java(产品实现类)
- DeaultSqlSessionFactory.java(工厂实现类)
- io
- Resources.java(AsStream类)
- proxy
- session
- SqlSession.java(产品接口)
- SqlSessionFactory.java(工厂接口)
- SqlSessionFactoryBuilder.java(工厂构建者)
- Utils
- DataSourceUtil.java(数据库连接对象工具类)
- Executor.java(数据库操作工具类)
- XMLConfigBuilder.java(封装信息工具类)
- resources
- cn/water/dao
- UserDao.xml(持久层接口的映射配置文件)
- SqlMapConfig.xml(MyBatis主配置文件)
- src/tese
- pom.xml
数据库表
#创建数据库
CREATE DATABASE eesy_mybatis;
USE eesy_mybatis;
#创建表
CREATE TABLE USER(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) NOT NULL COMMENT '用户名称',
birthday DATETIME DEFAULT NULL COMMENT '生日',
sex CHAR(1) DEFAULT NULL COMMENT '性别',
address VARCHAR(256) DEFAULT NULL COMMENT '地址'
) ENGINE = INNODB DEFAULT CHARSET = utf8;
#插入数据
INSERT INTO USER VALUES
(41,'老王','2018-02-27 17:47:08','男','北京'),
(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),
(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),
(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),
(46,'老王','2018-03-07 17:37:26','男','北京'),
(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
MyBatis主配置文件
- 提取 MyBatis主配置文件中映射信息的方式是读取 mapper标签的属性,所以 mappers 标签中最好只设置一种 mapper标签,resource 或是 class。
SqlMapConfig.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>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<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="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="cn.water.dao.UserAnnoDao"></mapper>
</mappers>
</configuration>
映射配置文件
UserDao.java
<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="cn.water.dao.UserDao">
<select id="findAll" resultType="cn.water.domain.User">
SELECT * FROM user;
</select>
</mapper>
实体类
User.java
package cn.water.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday