写在前面:
继续记录SSM三大框架中的MyBatis学习之旅,详细代码笔记可在我的Gitee仓库ssm-learning克隆下载学习使用!
3. MyBatis
3.1 简介
3.1.1 背景
原始JDBC开发存在很多问题,如下:
- 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
- SQL语句在代码中硬编码,造成代码维护复杂,实际应用SQL变化可能性很大,而SQL变动又需要改动java代码
- 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时需要手动将实体数据设置到SQL语句的占位符中
解决方案: - 使用数据库连接池初始化连接资源
- 将SQL语句抽取到xml配置文件中
- 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
3.1.2 MyBatis
是一个基于Java的持久层框架
优点:
- 内部封装jdbc,开发者只需要关注SQL语句本身,不需要关注驱动加载、创建连接等繁琐过程
- 通过xml或注解来配置statement并通过Java对象和statement中的SQL动态参数映射生成最终执行的SQL语句
- 将SQL语句执行后结果自动映射为java对象返回
- 采用ORM(ObjectRelationMapping)思想解决实体与数据库映射问题,屏蔽jdbc api底层访问细节而不用关注即可完成数据库操作
3.2 入门
3.2.1 MyBatis开发步骤
MyBatis开发简要开发步骤可分为6步,即添加Mybatis坐标,创建数据库User表,编写User实体类,编写UserMapping.xml配置文件,编写SqlMapConfig.xml配置文件以及编写测试类6块。
以下将分别对这些步骤一一做以讲解。
3.2.2 添加Mybatis坐标
在IDEA中新建项目并补全缺失目录后打开pom.xml文件,添加用到的相关资源依赖,如下配置:
<!-- Mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!-- Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- 日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
3.2.3创建数据库User表
打开Navicat并连接数据库,创建User表,如图![![[Pasted image 20211209163342.png]]](https://img-blog.csdnimg.cn/c573802411224841935ca62a7f4031e0.png)
3.2.4 编写User实体类
新建和数据User表相对应的实体类,封装并重写toString方法,如图![![[Pasted image 20211209163639.png]]](https://img-blog.csdnimg.cn/5e6fd82b3eca4d1b9ebd96ee2897f078.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqx6Iqx55qE5bCP6ISR55Oc,size_20,color_FFFFFF,t_70,g_se,x_16)
3.2.5 编写UserMapping映射文件
在main目录下的resources目录中新建UserMapping.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="userMapper">
<select id="queryAll" resultType="com.demo.entity.User">
select * from user
</select>
</mapper>
3.2.6 编写sqlMapperCoonfig配置文件
同上操作,新建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="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件UserMapping-->
<mappers>
<mapper resource="UserMapping.xml"/>
</mappers>
</configuration>
3.2.7 编写测试文件
在test目录中新建测试类,代码如下:
public void test1() throws IOException {
// 获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
// 获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行数据库操作,参数为:namespace+id
List<User> userList = sqlSession.selectList("userMapper.queryAll");
/// 打印数据
System.out.println(userList);
// 释放资源
sqlSession.close();
}
用Junit单元测试后结果如图![![[Pasted image 20211209195307.png]]](https://img-blog.csdnimg.cn/f8449f9443fa4553bec07892b0a47a9c.png)
版权声明:本文为qq_40903378原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。