前言
现在是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"> <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/eesy"/> <property name="username" value="root"/> <property name="password" value="yx1994"/>
</dataSource> </environment> </environments> <mappers> </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 + '\'' + '}'; }
}
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
|
<?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.itheima.dao.IUserDao">
<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 { InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); SqlSession session = factory.openSession(); IUserDao userDao = session.getMapper(IUserDao.class); List<User> users = userDao.findAll(); for (User user:users){ System.out.println(user); } session.close(); in.close(); }
|
(5)执行结果:

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