第一章 快速入门

文章目录

  • 第一章 快速入门
  • 一、介绍
    • 1.使用 JDBC 的缺陷
    • 2.MyBatis 框架解决的主要问题
  • 二、入门案例
    • 1.准备数据库
    • 2.创建实体类
    • 3.创建持久层 DAO 接口
    • 4.创建 SQL 映射文件
    • 5.创建 MyBatis 配置文件
    • 6.编写测试类
  • 三、开启日志

一、介绍

1.使用 JDBC 的缺陷

  1. 代码较多,开发效率低
  2. 需要关注 Connection、Statement、ResultSet 对象的创建和销毁
  3. 需要手动将 ResultSet 查询的结果封装为 List
  4. 重复代码较多
  5. 业务代码和数据库操作耦合

2.MyBatis 框架解决的主要问题

减轻了使用 JDBC 的复杂性,不需要关注 Connection、Statement、ResultSet 对象的创建和销毁,不需要编写关闭资源的代码,
直接使用对象表示结果数据,让开发者专注 SQL 的处理

MyBatis 可以完成

  1. 注册数据库驱动
  2. 创建 Connection、Statement、ResultSet 对象
  3. 从 XML 中获取 SQL 并执行,将 ResultSet 结果转换为对象
  4. 关闭资源

也就是说 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&amp;characterEncoding=utf8&amp;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】第一章 快速入门相关推荐

  1. 【MyBatis-Plus】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.概述 2.特性 二.入门案例 1.安装插件 2.准备工作 3.MyBatis-Puls 替换 MyBatis 4.修改 StudentDao ...

  2. 【Nginx】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.引入 2.什么是 Nginx 3.Nginx 作用 二.Windows 下使用 1.启动 Nginx 2.配置监听 3.关闭 nginx 三 ...

  3. C++Primer 第一章 快速入门 学习

    C++已经学习2年了,现在回头想巩固一下基础,就从C++primer第一章开始吧. 1.1 编写简单的C++程序 main函数是程序的入口函数. 编译与执行 GNU 编译环境 在GNU编译器下,需要输 ...

  4. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  5. Spring入门到精通:第一章 基础入门:1.Spring框架概述

    Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...

  6. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  7. C++术语 【from C++ Primer 第1章 快速入门】

    C++术语 [from C++ Primer 第1章 快速入门] argument(实参) 传递给被调用函数的值. block(块) 花括号括起来的语句序列. buffer(缓冲区) 一段用来存放数据 ...

  8. 第一章 程序设计入门--算法竞赛入门经典

    第一章 程序设计入门–算法竞赛入门经典 知识点一: int m=25; printf("%d\n",m); printf("%03d\n",m); 输出如下: ...

  9. 基于《java2实用教程》的java知识点复习整理【第一章——java入门】

    第一章--java入门 一.知识结构框架 二.知识点详解 1.java特点:编写一次,随处运行 简单 Java要比C++简单,C++中许多容易混淆的概念,被Java弃之不用了,或者以一种更清楚更容易理 ...

最新文章

  1. ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE
  2. scrapy 设置随机UA
  3. storage.googleapis.com 访问与下载慢
  4. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计
  5. csh远程登录服务器,ubuntu远程连接服务器某一个用户(非root用户)出现sh: 1: source: not found...
  6. (27)FPGA面试技能提升篇(UVM、VMM)
  7. eclipse建maven pom报错
  8. c语言除法的编译,怎样代替除法指令
  9. love2d游戏1--1942game(一)
  10. 如何学习嵌入式Linux_韦东山
  11. FreeRTOS-时间片轮转调度
  12. MAE,何凯明-2021
  13. linux之fstab文件详解
  14. 【华为机试真题 Python实现】黑板上的数字涂颜色【2022 Q1 Q2 |100分】
  15. 回味宋朝——文化的盛世
  16. 408 操作系统 操作系统概述
  17. 歌对华为使用安卓设限,但物联网操作系统还有更大机会
  18. 【围观】CISP-PTE 考题示例
  19. 概率论各种基础分布期望和方差推导过程汇总
  20. e的lnx为什么等于x

热门文章

  1. 服务器找不到硬盘如何解决方案,Linux云服务器磁盘不见了?解决方案在这里
  2. 易经读书笔记18山风蛊
  3. 黑科技!两行代码完美解决:同时设置overflow-x:hidden,overflow-y:visible无效的问题...
  4. spring MVC 项目 WEB-INF下的jsp不能加载css文件
  5. 20175126《Java程序设计》第四周学习总结
  6. 【实战】Weblogic xmldecoder反序列化Getshell
  7. react.js从入门到精通(六)——路由的使用
  8. 函数式编程 读书笔记
  9. C++Event机制的简单实现
  10. websphere application server的垃圾清理