MyBatis入门(一)

本文最后更新于:January 23, 2021 pm

MyBatis是一个持久层框架

它封装了jdbc操作的很多细节, 使开发者只需关注sql语句本身, 而无需关注注册驱动, 创建连接等繁杂过程.

它使用了ORM思想实现了结果集的封装.

ORM(Object Relational Mapping): 对象关系映射

就是把数据库表实体类及实体类的属性对应起来

让我们可以操作实体类就实现操作数据库表.

一. MyBatis环境搭建

第一步: 创建Maven工程并导入坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>

第二步: 创建实体类和dao的接口

User实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package top.clearlight.domain;

import java.util.Date;

public class User {

private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;

// toString() 和 getter和setter方法
}

UserDao接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package top.clearlight.dao;

import top.clearlight.domain.User;

import java.util.List;

/**
* 用户的持久层接口
*/

public interface UserDao {

/**
* 查询所有操作
*/

List<User> findAll();

}

第三步: 创建MyBatis的主配置文件

SqlMapConfig.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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">

<!--MyBatis的主配置文件-->
<configuration>
<!-- 配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池)-->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/stu"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>

<!-- 指定映射配置文件的位置, 映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="top/clearlight/dao/UserDao.xml"/>
</mappers>
</configuration>

第四步: 创建映射配置文件

resources→top→clearlight→dao→UserDao.xml:

1
2
3
4
5
6
7
8
9
10
11
<?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="top.clearlight.dao.UserDao">
<!--配置查询所有 id为指定的方法 resultType为返回的数据集的封装类型-->
<select id="findAll" resultType="top.clearlight.domain.User">
select *
from user
</select>
</mapper>

注意事项:

  1. 创建UserDao.xmlUserDao.java 时是为了和之前的知识一致,

    MyBatis中它把持久层的操作接口名称和映射文件也叫做: Mapper

    所以: UserDaoUserMapper 是一样的

  2. 在idea中创建目录的时候, 它和包是不一样的

    包在创建时: top.clearlight.dao它是三级结构

    目录在创建时: top.clearlight.dao它是一级目录

  3. MyBatis的映射配置文件位置必须和dao接口的包结构相同

  4. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

  5. 映射配置文件的操作配置(select), id属性的取值必须是dao接口的方法名

当遵从第三四五点之后, 开发中就无需再写dao的实现类

测试类

1583847823526

注意事项:

  • 不要忘记在映射配置中告知MyBatis要封装到那个实体类中

    配置的方式: 指定实体类的全限定类名

MyBatis基于注解的入门案例:

UserDao.xml移除, 在dao接口的方法上使用@Select注解, 并且指定SQL语句

UserDao接口:

1
2
3
4
5
6
7
8
public interface UserDao {

/**
* 查询所有操作
*/

@Select("select * from user")
List<User> findAll();
}

同时需要在SqlMapConfig.xml中的mapper配置时, 使用class属性指定dao接口的全限定类名

SqlMapConfig.xml:

1
2
3
4
5
6
7
 <!--   指定映射配置文件的位置, 映射配置文件指的是每个dao独立的配置文件
如果使用注解来配置的话, 此处应该使用class属性指定被注解的dao全限定类名
-->

<mappers>
<!-- <mapper resource="top/clearlight/dao/UserDao.xml"/>-->
<mapper class="top.clearlight.dao.UserDao"/>
</mappers>

明确:

实际开发中, 都是越简便越好, 所以都是采用不写dao实现类的方式.

不管使用XML还是注解配置.

但是MyBatis它是支持写dao实现类的.

本文作者: xyli
本文链接: http://clearlight.com.cn/posts/17177.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!