【MyBatis】第一章 快速入门
第一章 快速入门
文章目录
- 第一章 快速入门
- 一、介绍
- 1.使用 JDBC 的缺陷
- 2.MyBatis 框架解决的主要问题
- 二、入门案例
- 1.准备数据库
- 2.创建实体类
- 3.创建持久层 DAO 接口
- 4.创建 SQL 映射文件
- 5.创建 MyBatis 配置文件
- 6.编写测试类
- 三、开启日志
一、介绍
1.使用 JDBC 的缺陷
- 代码较多,开发效率低
- 需要关注 Connection、Statement、ResultSet 对象的创建和销毁
- 需要手动将 ResultSet 查询的结果封装为 List
- 重复代码较多
- 业务代码和数据库操作耦合
2.MyBatis 框架解决的主要问题
减轻了使用 JDBC 的复杂性,不需要关注 Connection、Statement、ResultSet 对象的创建和销毁,不需要编写关闭资源的代码,
直接使用对象表示结果数据,让开发者专注 SQL 的处理
MyBatis 可以完成
- 注册数据库驱动
- 创建 Connection、Statement、ResultSet 对象
- 从 XML 中获取 SQL 并执行,将 ResultSet 结果转换为对象
- 关闭资源
也就是说 MyBatis 是对 JDBC 封装的 SQL 映射框架
二、入门案例
1.准备数据库
数据库名:Student
表名:student
字段
数据
2.创建实体类
Student.java
package com.sisyphus.student.pojo;/*** @Description: $* @Param: $* @return: $* @Author: Sisyphus* @Date: $*/
public class Student {private Integer id;private String name;private String email;private Integer age;@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", email='" + email + '\'' +", age=" + age +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}
3.创建持久层 DAO 接口
StudentDao 接口,定义操作数据库的方法
package com.sisyphus.student.dao;import com.sisyphus.student.pojo.Student;import java.util.List;public interface StudentDao {//查询所有数据List<Student> selectStudents();
}
4.创建 SQL 映射文件
StudentMapper.xml,编写 SQL 语句,一个表对应一个 SQL 映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sisyphus.student.dao.StudentDao"><select id="selectStudents" resultType="com.sisyphus.student.pojo.Student">select * from student</select>
</mapper>
文件中包含以下模块
约束文件
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis-3-mapper.dtd 是约束文件的名称
约束文件的作用是限制、检查在当前文件中出现的标签、属性必须符合 MyBatis 的要求
命名空间
<mapper namespace="com.sisyphus.student.dao.StudentDao">
mapper 是当前文件的根标签
namespace 叫做命名空间、唯一值、要求使用 DAO 接口的全限定名
SQL 语句
<select id="selectStudents" resultType="com.sisyphus.student.dao.Student">select id,name,email,age from student
</select>
可以使用特定的标签,表示数据库的特定操作
<select>查询
<update>更新
<insert>插入
<delete>删除
标签属性中的 id 表示你要执行的 SQL 语句的唯一标识,MyBatis 会使用这个 id 的值来找到要执行的 SQL 语句,可以自定义,一般为你要使用的接口中的方法名称
resultType 表示 SQL 语句执行后得到的结果类型,一般为实体类的全限定名
5.创建 MyBatis 配置文件
mybatis-config.xml,提供数据库的连接信息和 SQL 映射文件的位置信息
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置 mybatis 环境:数据库的连接信息--><!--default 表示使用哪个环境,必须和某个 environment 的 id 值一样--><environments default="mysql"><!--id:数据源的名称,唯一值、自定义--><environment id="mysql"><!--配置事务类型:使用 JDBC 事务(表示使用 JDBC 中的 Connection 对象的 commit、rollback 进行事务管理)--><transactionManager type="JDBC"/><!--dataSource:表示数据源,连接数据库的type: 表示数据源类型 POOLED 表示使用连接池--><dataSource type="POOLED"><!--连接数据库的四个要素--><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql:///student?userUnicode=true&characterEncoding=utf8&useSSL=false"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><!--告诉 mybatis SQL 映射文件的位置--><mapper resource="mapper/StudentMapper.xml"/></mappers>
</configuration>
6.编写测试类
package com.sisyphus.student;import com.sisyphus.student.pojo.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** @Description: $* @Param: $* @return: $* @Author: Sisyphus* @Date: $*/
public class MyBatisTest {@Testpublic void testStart() throws IOException{//1.MyBatis 配置文件,从类路径的根开始(target/classes)String config = "mybatis-config.xml";//2.读取配置文件InputStream in = Resources.getResourceAsStream(config);//3.创建 sqlSessionFactory 对象,目的是获取 SQlSessionSqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//4.获取 SqlSession,目的是执行 SQL 语句SqlSession session = factory.openSession();//5.执行 SqlSession 的 selectListList<Student> studentList = session.selectList("com.sisyphus.student.dao.StudentDao.selectStudents");//6.循环输出查询结果studentList.forEach(student -> System.out.println(student));//7.关闭 SqlSession,释放资源session.close();}
}
三、开启日志
在 mybatis-config.xml 添加如下标签
<!--settings:控制 MyBatis 全局行为--><settings><!--设置 MyBatis 输出日志--><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
【MyBatis】第一章 快速入门相关推荐
- 【MyBatis-Plus】第一章 快速入门
第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.概述 2.特性 二.入门案例 1.安装插件 2.准备工作 3.MyBatis-Puls 替换 MyBatis 4.修改 StudentDao ...
- 【Nginx】第一章 快速入门
第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.引入 2.什么是 Nginx 3.Nginx 作用 二.Windows 下使用 1.启动 Nginx 2.配置监听 3.关闭 nginx 三 ...
- C++Primer 第一章 快速入门 学习
C++已经学习2年了,现在回头想巩固一下基础,就从C++primer第一章开始吧. 1.1 编写简单的C++程序 main函数是程序的入口函数. 编译与执行 GNU 编译环境 在GNU编译器下,需要输 ...
- Java 学习笔记:第一章 Java入门
Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...
- Spring入门到精通:第一章 基础入门:1.Spring框架概述
Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
<Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...
- C++术语 【from C++ Primer 第1章 快速入门】
C++术语 [from C++ Primer 第1章 快速入门] argument(实参) 传递给被调用函数的值. block(块) 花括号括起来的语句序列. buffer(缓冲区) 一段用来存放数据 ...
- 第一章 程序设计入门--算法竞赛入门经典
第一章 程序设计入门–算法竞赛入门经典 知识点一: int m=25; printf("%d\n",m); printf("%03d\n",m); 输出如下: ...
- 基于《java2实用教程》的java知识点复习整理【第一章——java入门】
第一章--java入门 一.知识结构框架 二.知识点详解 1.java特点:编写一次,随处运行 简单 Java要比C++简单,C++中许多容易混淆的概念,被Java弃之不用了,或者以一种更清楚更容易理 ...
最新文章
- ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE
- scrapy 设置随机UA
- storage.googleapis.com 访问与下载慢
- 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
- csh远程登录服务器,ubuntu远程连接服务器某一个用户(非root用户)出现sh: 1: source: not found...
- (27)FPGA面试技能提升篇(UVM、VMM)
- eclipse建maven pom报错
- c语言除法的编译,怎样代替除法指令
- love2d游戏1--1942game(一)
- 如何学习嵌入式Linux_韦东山
- FreeRTOS-时间片轮转调度
- MAE,何凯明-2021
- linux之fstab文件详解
- 【华为机试真题 Python实现】黑板上的数字涂颜色【2022 Q1 Q2 |100分】
- 回味宋朝——文化的盛世
- 408 操作系统 操作系统概述
- 歌对华为使用安卓设限,但物联网操作系统还有更大机会
- 【围观】CISP-PTE 考题示例
- 概率论各种基础分布期望和方差推导过程汇总
- e的lnx为什么等于x
热门文章
- 服务器找不到硬盘如何解决方案,Linux云服务器磁盘不见了?解决方案在这里
- 易经读书笔记18山风蛊
- 黑科技!两行代码完美解决:同时设置overflow-x:hidden,overflow-y:visible无效的问题...
- spring MVC 项目 WEB-INF下的jsp不能加载css文件
- 20175126《Java程序设计》第四周学习总结
- 【实战】Weblogic xmldecoder反序列化Getshell
- react.js从入门到精通(六)——路由的使用
- 函数式编程 读书笔记
- C++Event机制的简单实现
- websphere application server的垃圾清理