0%

'mybatis框架一'

前言

现在是2019年9月23号,晚上23:40,我目前是研二上学期,秋季上学期刚开学,我对自己职业规划是毕业后从事java后端开发,对于很多企业都要求后端开发者具备mybatis框架知识体系,为了毕业后能够找到一份令自己满意的工作,我开始学习了mybatis框架,以下是我学习mybatis框架的一些浅薄的认知,适合初学者阅读

MyBatis框架的介绍

(1)MyBatis框架是什么?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

(2)MyBatis为什么会出现,并且他解决的什么问题?

​ 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

​ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

​ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

(3)同类的技术有哪些?

最原始的JDBC,Hibernate框架

MyBatis框架的入门案例

技术点

mybatis框架 + 开发工具IDEA

环境搭建

(1)新建一个基于maven管理的java项目,在项目的配置文件(pom.xml文件)下导入所需的依赖(以下是我的配置,具体版本可以根据实际情况而定,自行选择):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>

(2)在资源目录resources下新建一个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
29
30
31
32
33


​```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">
<!--配置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/eesy"/>
<property name="username" value="root"/>
<property name="password" value="yx1994"/>

</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<!-- <mapper resource="com/itheima/dao/IUserDao.xml"/>-->
</mappers>
</configuration>

入门案例

(1)搭建好开发环境之后,我们可以新建我们的实体类和dao接口:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//我的实体类:
package com.itheima.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) {
this.birthday = birthday;
}


public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}


}
// 我的dao接口 即用户的持久成接口
public interface IUserDao {
/*
查询所有操作 ,此处先只演示一个查询所用用户的一个方法
*/
List<User> findAll();
}

(2)完成第一步之后,我们需要在resources目录下,新建一个与dao接口相同的路径的xml配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--我的新建文件 IUserDao.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">
<!--配置查询的sql-->
<mapper namespace="com.itheima.dao.IUserDao">
<!--
id属性:就是dao接口的方法名称
resultType:就是执行sql对应实体的全类名
在select标签里面写sql语句
-->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>

(3)需要在SqlMapConfig.xml文件里面配置一下我们的映射文件

1
2
3
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>

(4)我们可以写一个测试类来测试一下,我们写的能否从数据库取到数据,并且封装到实体中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void testFindAll() throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession 创建Dao接口的代理对象 // 根据dao接口的字节码创建dao的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user:users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}

(5)执行结果:

以上我们已经完成了mybatis入门的第一个案例,这其中还有很多对数据库的增删改查操作,我们都可以用配置文件的方式,完成对数据的访问。

-------- 本文结束 感谢阅读 --------