MyBatis(一)MyBatis概述

news/2024/11/22 22:07:18/

一、什么是框架

● 在文献中看到的framework被翻译为框架

● java常用的框架:

  • SSM三大框架:Sping + SpringMVC + MyBatis
  • SpringBoot
  • SpringCloud

● 框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类(引入框架),基于这些现有的接口和类进行开发,可以大大提升开发的效率。

● 框架一般以jar包的形式存在(jar包中有class文件以及各种配置文件等)。

● SSM三大框架的学习顺序:MyBatis—Spring—SpringMVC

二、三层架构

● 表现层(UI):直接跟前端打交互(一是接收前端ajax请求,二是返回json数据给前端)

● 业务逻辑层(BLL):一是处理表现层转发过来的前端请求(也就是具体业务),二是将从持久层获取的数据返回到表现层。

● 数据访问层(DAL):直接操作数据库完成CRUD,并将获得的数据返回到上一层(也就是业务逻辑)。

●  Java持久层框架:

  • MyBatis
  • Hibernate(实现了JPA规范)
  • JOOQ
  • Guzz
  • Spring Data(实现了JPA规范)
  • ActiveJDBC

三、JDBC的不足

实例代码1:

//.......
// sq1语句写死在java程序中
String sq1 ="insert into tuser(id,idCard,username,password,birth,gender,email,city,street,zipcode,phone,grade) values(?,?,?,?,?,?,?,?,?,?,?,?)"; 
PreparedStatement ps =conn.prepareStatement(sql);
// 繁琐的赋值:思考一下,这种有规律的代码能不能通过反射机制来做自动化。 
ps.setString(1,“1");
ps.setString(2, "123456789"); 
ps.setString(3,"zhangsan"); 
ps.setString(4,"123456");
ps.setString(5,"1980-10-11"); 
ps.setString(6,"男");
ps.setString(7,"zhangsan@126.com"); 
ps.setString(8,"北京");
ps.setString(9,"大兴区凉水河二街"); 
ps.setString(10,"1000000");
ps.setString(11,"16398574152"); 
ps.setString(12,"A");// 执行SOL
int count =ps.executeUpdate();
// ......

实例代码2:

//......
//sql语句写死在程序里
String sq1="select id,idCard,username,passwordbirth,gender,email,city,street,zipcode,phone,grade from t user";
PreparedStatement ps = conn.prepareStatement(sal); 
ResultSet rs =ps.executeQuery();
List<User> userList = new ArrayList<>();
//思考以下循环中的所有代码是否可以使用反射进行自动化封装。 
while(rs.next()){
// 获取数据
String id = rs.getString("id");
String idCard =rs.getString("idCard");
String username =rs.getString("username"); 
String password = rs.getString("password"); 
String birth = rs.getString("birth"); 
String gender = rs.getString("gender"); 
String email = rs.getString("email"); 
String city = rs.getString("city");
String street = rs.getString("street"); 
String zipcode = rs.getString("zipcode"); 
String phone = rs.getString("phone"); String grade = rs.getString("grade");// 创建对象
User user = new User();
// 给对象属性赋值 user.setId(id);
user.setIdCard(idCard):
user.setUsername(username); 
user.setPassword(password); 
user.setBirth(birth); 
user.setGender(gender);
user.setEmail(email); 
user.setCity(city);
user.setStreet(street); 
user.setZipcode(zipcode); 
user.setPhone(phone); 
user.setGrade(grade);
// 添加到集合
userList.add(user);}
//......

不足:

  • SQL语句写死在Java程序中,不灵活。改SQL的话要更改代码。违背开闭原则OCP。
  • 给 ?传值是繁琐的。思考:能不能自动化?
  • 将结果集封装成Java对象是繁琐的。思考:能不能自动化?

四、下载MyBatis并了解MyBatis

● Mybatis本质上就是对JDBC的封装,通过Mybatis完成CRUD。

● Mybatis在三层架构中负责持久层的,属于持久层框架。

● Mybatis的发展【引用百度百科】:

  • MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
  • iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  • 当前,最新版本是MyBatis 3.5.11,其发布时间是2022年09月18日。

● 下载:Releases · mybatis/mybatis-3 (github.com)

ORM:对象关系映射

  • O(Obiect):Java虚拟机的Java对象
  • R(Relational):关系型数据库
  • M(Mapping):将Java虚拟机中的java对象映射到数据库表中的一行记录,或是将数据库表中一行记录映射成Java虚拟机中的一个Java对象。

● MyBatis框架特点:

  • 支持定制化 SQL、存储过程、基本映射以及高级映射
  • 避了几乎所有的JDBC 代码中手动设置参数以及获取结果集
  • 支持XML开发,也支持注解式开发。[为了保证sql语句的灵活,所以mybatis大部分是采用XML方式开发]
  • 将接口和Java的POJOs(Plain Ordinary Java Obiect,简单普通的Java对象)映射成数据库中的记录体积小好学: 两个ar包,两个XML配置文件,
  • 完全做到sql解耦合,
  • 提供了基本映射标签
  • 提供了高级映射标签
  • 提供了XML标签,支持动态SQL的编写
  • ......

 


http://www.ppmy.cn/news/19948.html

相关文章

SNARK+深度神经网络

1. 引言 SNARK深度神经网络&#xff0c;相关开源实现有&#xff1a; 1&#xff09;Ezkl&#xff08;Rust&#xff09;&#xff1a;借助Halo2证明系统&#xff0c;实现了50层的MobileNetV2的执行证明。具体见Daniel Kang等人2022年论文Scaling up Trustless DNN Inference with…

2023年web类第一期总结

&#x1f340;本人简介&#xff1a; 吉师大一最爱逃课的网安混子、 华为云享专家、阿里云专家博主、腾讯云自媒体分享计划博主、 华为MindSpore优秀开发者、迷雾安全团队核心成员&#xff0c;CSDN2022年运维与安全领域第15名 &#x1f341;本人制作小程序以及资源分享地址&am…

【Linux】六、Linux 基础IO(四)|动态库和静态库

目录 十一、动态库和静态库 11.1 动态库和静态库定义 11.2 动静态库的基本原理 11.3 静态库的打包与使用 11.3.1 静态库的打包 11.3.2 静态库的使用 11.4 动态库的打包与使用 11.4.1 动态库的打包 11.4.2 动态库的使用 11.5 动态库的加载 十一、动态库和静态库 11.1…

指针与数组

目录指针运算&#xff08;补&#xff09;指针指针指针的关系运算&#xff08;补&#xff09;指针与数组数组名二级指针指针数组指针运算&#xff08;补&#xff09; 指针指针 上一篇博客我们介绍了指针运算中的三种常见运算&#xff1a;指针整数&#xff0c;指针关系运算&…

JavaEE10-Spring Boot配置文件

目录 1.配置文件作用 2.配置文件的格式 为配置文件安装提示插件 2.1. .properties&#xff08;旧版&#xff0c;默认的&#xff09; 2.1.1.基本语法 PS:配置文件中使用"#"来添加注释信息&#xff0c;2种添加方式&#xff1a; 2.1.2.缺点分析 2.2. .yml&#…

1.设计模式的前奏

哪些维度评判代码质量的好坏&#xff1f; 常用的评价标准 可维护性&#xff08;maintainability&#xff09;:维护代码的成本可读性&#xff08;readability&#xff09;可扩展性&#xff08;extensibility&#xff09;&#xff1a;码应对未来需求变化的能力灵活性&#xff0…

11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题

本篇文章是Java方法的专题练习,从第五题开始难度增大,涉及大厂真题,前四道题目是基础练习,友友们可有目的性的选择学习&#x1f618;&#x1f495; 文章目录前言一、数组的遍历1.注意点:输出语句的用法2.题目正解二、数组最大值三、判断是否存在四、复制数组五、案例一:卖飞机票…

XC-16 SpringSecurity Oauth2 JWT

SpringSecurityOauth2用户认证需求分析用户认证与授权单点登录需求第三方认证需求用户认证技术方案单点登录技术方案Oauth2认证Oauth2认证流程2.2.2Oauth2在本项目中的应用SpringSecurity Oauth2认证解决方案SpringSecurityOauth2研目标搭建认证服务器导入基础工程创建数据库Oa…