ToB企服应用市场:ToB评测及商务社交产业平台

标题: 小白手把手讲授用spring框架实现mybatis和mysql以及工作原理 [打印本页]

作者: 缠丝猫    时间: 2024-10-31 10:57
标题: 小白手把手讲授用spring框架实现mybatis和mysql以及工作原理
Maven_Mybatis_Mysql

什么是Mybatis

MyBatis 是一款优秀的长期层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
简单来说,MyBatis是一个开源的长期层框架,它提供了一种简单且强大的方式来与关系型数据库进行交互。MyBatis通过使用XML或注解来定义数据库操作,并通过原生的SQL查询语句与数据库进行交互。
长期化

长期化是将步伐数据在长期状态和瞬时状态间转换的机制。
为什么需要长期化服务呢?那是由于内存本身的缺陷引起的
为什么需要Mybatis?

工作原理

我们知道,JDBC有四个核心对象:
(1)DriverManager,用于注册数据库连接
(2)Connection,与数据库连接对象
(3)Statement/PrepareStatement,操作数据库SQL语句的对象
(4)ResultSet,结果集或一张虚拟表
而MyBatis也有四大核心对象:
(1)SqlSession对象,该对象中包罗了执行SQL语句的所有方法。类似于JDBC内里的Connection 。
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC内里的Statement/PrepareStatement。
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处置惩罚,最终得到自己想要的数据格式或类型。可以自定义返回类型
在JDBC中,Connection不直接执行SQL方法,而是使用Statement大概PrepareStatement来执行方法。在使用JDBC建立了连接之后,可以使用Connection接口的createStatement()方法来获取Statement对象,也可以调用prepareStatement()方法得到PrepareStatement对象,通过executeUpdate()方法来执行SQL语句。而在MyBatis中,SqlSession对象包罗了执行SQL语句的所有方法,但是它是委托Executor执行的。从某种意义上来看,MyBatis内里的SqlSession类似于JDBC中的Connection,他们都是委托给其他类去执行。

POJO

POJO是“Plain Old Java Object”的缩写,直译为“简单老式Java对象”。这个术语最早出现在Java社区中,用以描述那些没有遵循特定设计模式、没有继续特定类、也没有实现特定接口的普通Java对象。简而言之,POJO类就是最基础的Java类,也可以理解为普通的Java类。例如如下代码:
  1. public class User {
  2.     private int uid;
  3.     private String uname;
  4.     private int uage;
  5.     public int getUid() {
  6.         return uid;
  7.     }
  8.     public void setUid(int uid) {
  9.         this.uid = uid;
  10.     }
  11.     public String getUname() {
  12.         return uname;
  13.     }
  14.     public void setUname(String uname) {
  15.         this.uname = uname;
  16.     }
  17.     public int getUage() {
  18.         return uage;
  19.     }
  20.     public void setUage(int uage) {
  21.         this.uage = uage;
  22.     }
  23. }
复制代码
在与数据库交互时,POJO类可以作为长期化对象,将数据库中的表映射为Java对象,方便步伐员进行数据库操作。为什么说POJO的设计更能简化开发?其实本质上就是我们在开发中先定义核心的POJO,比如上面的User类,它与我们的业务相关,它是关于用户数据承载的类,但我们只是简单的基于面向对象设计理念,将用户抽象为一个User类,它具有用户相关的属性描述,此时基于面向对象OO、基本的Java语言规范以及基本的开发规范(属性private、对外getter、setter)就完成了一个基本的POJO。其他人一看,它就是一个纯粹的Java对象罢了,它有基本的属性和方法。
代码样例


这是整个的代码布局,根据前面讲到的mybatis配置设定这种目录布局,会比较清晰。首先我们先建一个数据库,然后用idea连接上。



连接好以后就可以写一下数据库的配置文件,db.properties
  1. mysql.driver=com.mysql.cj.jdbc.Driver
  2. mysql.username=root
  3. mysql.password=xxxxx
  4. mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
复制代码
  1. package com.ivanlee.test;
  2. import com.ivanlee.pojo.User;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.Test;
  8. import java.io.Reader;
  9. import java.io.IOException;
  10. public class UserTest {
  11.     @Test
  12.     public void userFindByTest() {
  13.         String resources = "mybatis-config.xml";
  14.         Reader reader = null;
  15.         try {
  16.             reader = Resources.getResourceAsReader(resources);
  17.         }catch (IOException e) {
  18.             e.printStackTrace();
  19.         }
  20.         SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
  21.         SqlSession session = sqlMapper.openSession();
  22.         User user = session.selectOne("findById",1);
  23.         System.out.println("姓名\t年龄");
  24.         System.out.println(user.getUname()+"\t"+user.getUage());
  25.         session.close();
  26.     }
  27. }
复制代码
新建一个user类用来进行测试,"findById" 是一个 SQL 语句的标识符,它通常定义在一个 MyBatis 的映射文件(XML 文件或注解方式)中。这个标识符对应于一个具体的 SQL 查询语句,用于从数据库中查询数据。1 是传递给 SQL 语句的参数,表示你要查找的记录的主键值。

这里的findById是我们在mapper映射里定义好的方法,不是java库定义的
如果想打印更多的信息,我们还可以继续添加搜刮方式,写到mapper内里。
  1. List<User> users = session.selectList("findAll");
  2. System.out.println("姓名\t年龄");
  3. for(User user: users){
  4.     System.out.println(user.getUname()+"\t"+user.getUage());
  5. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4