MyBatis入门

MyBatis是一款优秀的持久层框架,用于简化JDBC开发

持久层:

负责将数据保存到数据库的那一层代码

我们会将操作数据库的Java代码作为持久层,而MyBatis就是对jdbc代码进行了封装。

JavaEE三层架构:表现层、业务层、持久层

框架:

是一个半成品软件。

MyBatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由MyBatis框架执行sql并将结果映射为java对象并返回。

采用“ORM”思想解决了实体和数据库映射的问题,对JDBC进行了封装,屏蔽了JDBC、API底层访问细节,使我们不用与JDBC、API打交道就可以完成对数据库的持久化操作。

ORM: 

Object Relational Mapping:对象关系映射

指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术。

表——>类

记录(record,行数据)——>对象

字段——>对象属性

JDBC缺点:

1.硬编码、系统不易维护:

注册驱动,获取连接,如果要将Mysql数据库换成其他关系型数据库的话,四个地方都要修改

2.操作繁琐:

要手动设置参数、封装结果集;图标4的代码就是对查询到的数据进行封装,这部分代码无技术含量且耗费时间。

MyBatis优化:

硬编码可以配置到配置文件

操作繁琐的地方MyBatis都自动完成

public class UserInfoDaoImpl implements UserInfoDao {@Overridepublic List<UserInfo> selectAll(){try {InputStream in=Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory=builder.build(in);SqlSession sqlSession = sqlSessionFactory.openSession();//有实现类对象的情况:List<UserInfo> userInfos = sqlSession.selectList("org.example.dao.UserInfoDao.selectAll");return userInfos;//没有实现类对象的情况:/**UserInfoDao mapper = sqlSession.getMapper(UserInfoDao.class);List<UserInfo> userInfos1 = mapper.selectAll();userInfos1.forEach(o-> System.out.println(o));*/} catch (IOException e) {e.printStackTrace();return null;}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/157084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024最新最全:【Windows10】u盘安装系列教程【附安装包】

安装教程点这里&#xff1a;【Windows10】u盘安装系列教程【附安装包】 1.题外话 什么是如今程序员就业的风口&#xff1f; 对于那些初入计算机行业的新人和刚刚毕业的大学计算机专业学生来说&#xff0c;他们常常面临着就业市场的挑战。这是一个数据时刻&#xff1a; 首先…

【JavaEE】cookie和session

cookie和session cookie什么是 cookieServlet 中使用 cookie相应的API Servlet 中使用 session 相应的 API代码示例: 实现用户登陆Cookie 和 Session 的区别总结 cookie 什么是 cookie cookie的数据从哪里来? 服务器返回给浏览器的 cookie的数据长什么样? cookie 中是键值对…

NI-9219 100 S/s/ch国产化4通道C系列通用多功能模拟输入模块,支持多种传感器

100 S/s/ch&#xff0c;4通道C系列通用模拟输入模块 NI-9219专为多功能测试而设计。NI-9219可用于测量来自多种传感器&#xff08;如应变计&#xff0c;电阻温度检测器(RTD)&#xff0c;热电偶&#xff0c;测压元件和其他有源传感器等&#xff09;的信号&#xff0c;以及制作1…

基于tpshop开发多商户源码支持手机端+商家+门店 +分销+淘宝数据导入+APP+可视化编辑

tpshop多商户源码,tpshop商城源码,tpshop b2b2c源码-支持手机端商家门店 分销淘宝数据导入APP可视化编辑 tpshop商城源码算是 thinkphp框架里做的比较早 比较好的源码了&#xff0c;写法简明 友好面向程序猿。 这是一款前几年的版本 虽然后台看着好了些&#xff0c;丝毫不影响…

基于VPP的TCP/UDP协议栈加速方案

今天给大家带来英特尔高级软件工程师刘勇在2023英特尔网络技术研讨会上的分享&#xff1a;《基于VPP的TCP/UDP协议栈加速方案》。 随着互联网流量的持续快速增长&#xff0c;作为网络的基本底层组件&#xff0c;TCP/UDP协议栈成为加速网络性能的重点方向。保持和提高带宽增加的…

Flutter 02 基础组件 Container、Text、Image、Icon、ListView

一、Container容器组件&#xff1a; demo1&#xff1a; import package:flutter/material.dart;void main() {runApp(MaterialApp(home: Scaffold(appBar: AppBar(title: const Text("你好Flutter")),body: const MyApp(),),)); }// 容器组件 class MyApp extends St…

树形结构数据展示及返回上一级

11月1日&#xff0c;又是搬砖的一天&#xff0c;让我们红尘作伴&#xff0c;活的潇潇洒洒。。。。。。 html <template><view class"content"><view><input class"sreachTool" v-model"toolValue"/><van-icon name…

gRPC之grpcui界面工具

1、grpcui界面工具 简单的说&#xff0c;就是gRPC中的postman&#xff0c;grpcui官方地址&#xff1a;https://github.com/fullstorydev/grpcui。 1.1 安装 go get -u github.com/fullstorydev/grpcui go install github.com/fullstorydev/grpcui/cmd/grpcuiv1.2.0[rootzsx …

React Hooks的使用

目录 1.React Hooks使用注意事项 1.useState Hook&#xff1a; 2.useEffect Hook&#xff1a; 3.其他常用Hooks&#xff1a; 2.使用React Hooks需要遵循 1.安装React&#xff1a; 2.导入所需的Hooks&#xff1a; 3.使用Hooks创建组件&#xff1a; 4.在应用中使用组件&…

Redis入门指南学习笔记(1):初识Redis

一.什么是Redis? Redis全称为Remote Dictionary Server&#xff0c;即远程字典服务器&#xff0c;它采用字典结构来存储数据&#xff0c;并允许其他应用通过TCP协议来访问数据。 字典在众多开发语言中都很常见&#xff0c;其形式为键值对&#xff0c;根据键可以获取相应的值…

CHS零壹视频恢复程序监控版/海康版/大华版深入扫描功能演示

安防文件系统是一种嵌入式文件系统&#xff0c;一般情况下监控版程序扫描会基于文件系统进行扫描&#xff0c;如果想更深入的扫描一些数据建议开启深入扫描功能&#xff0c;具体方法如下: 适用版本:监控版/海康版/大华版/专业版/高级版 作用&#xff1a;舍弃嵌入式文件系统直…

利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素

利用两个栈s1&#xff0c;s2模拟一个队列时&#xff0c;如何用栈的运算来实现该队列的运算&#xff1f;写出模拟队列插入和删除的函数。一个栈s1用于插入元素&#xff0c;另一个栈s2用于删除元素。 前置知识点&#xff08;栈定义&#xff0c;及出栈入栈函数&#xff09; #def…