SSM之MyBatis/MyBatis是什么?MyBatis能够干什么?以及MyBatis怎么简单入门学习

写在前面
继续记录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]]

3.2.4 编写User实体类

新建和数据User表相对应的实体类,封装并重写toString方法,如图![[Pasted image 20211209163639.png]]

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]]


版权声明:本文为qq_40903378原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。