MyBatis的ORM映射

目录

什么是ORM

一,列的别名

二,结果映射

三,总结


什么是ORM

        ORM:对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

        1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 

        2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM,如下:

一,列的别名

在SQL中使用 as 为查询字段添加列别名,以匹配属性名:

在RoleDao接口中

public List<Role> findAll();

在RoleDao.xml文件中

<select id="findAll" resultType="com.by.pojo.Role" >select id, role_name as roleName, role_desc as roleDesc from role</select>

在测试类中

public class MyBatisTset {private SqlSession sqlSession;private InputStream inputStream;@Beforepublic void init() throws IOException {//加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);//创建SessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//使用数据的会话实例sqlSession = sessionFactory.openSession();}@Testpublic void testFindAll(){RoleDao roleDao = sqlSession.getMapper(RoleDao.class);List<Role> roleList = roleDao.findAll();for (Role role : roleList) {System.out.println(role);}}@Afterpublic void close() throws IOException {sqlSession.close();inputStream.close();}
}

输出结果:

 

如果我们的查询很多,都使用别名的话写起来岂不是很麻烦,有没有别的解决办法呢?

二,结果映射

在RoleDao接口中

public List<Role> findAll2();

在RoleDao.xml文件中

<!--id:和select查询标签的返回值保持一致type: 映射实体的全类名--><resultMap id="findAll2ResultMap" type="com.by.pojo.Role"><!--描述主键字段的映射关系:property:实体类的属性column:数据表字段名称--><id property="id" column="id" /><!--描述非主键字段的映射关系:property:实体类的属性column:数据表字段名称--><result property="roleName" column="role_name" /><result property="roleDesc" column="role_desc" /></resultMap><select id="findAll2" resultMap="findAll2ResultMap" >select * from role</select>

在测试类中

public class MyBatisTset {private SqlSession sqlSession;private InputStream inputStream;@Beforepublic void init() throws IOException {//加载配置文件String resource = "mybatis-config.xml";inputStream = Resources.getResourceAsStream(resource);//创建SessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//使用数据的会话实例sqlSession = sessionFactory.openSession();}@Testpublic void testFindAll(){RoleDao roleDao = sqlSession.getMapper(RoleDao.class);List<Role> roleList = roleDao.findAll2();for (Role role : roleList) {System.out.println(role);}}@Afterpublic void close() throws IOException {sqlSession.close();inputStream.close();}
}

输出结果

三,总结

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。 
        ORM技术特点: 
        1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 
        2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。 

        ORM的优缺点 
        1.ORM的缺点是会牺牲程序的执行效率和会固定思维模式。 
        2.从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。

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

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

相关文章

时间与时间戳转换及android和ios对时间识别的区别

注意&#xff1a; "2021-05-01 12:53:59.55" 时间对象在 ios 中会出现 NaN-NaN1-NaN 需要将对象格式化为&#xff1a;"2021/05/01 12:53:59.55" 可同时兼容 android 和 ios。 //将某时间转时间戳 /* var time new Date("2021-05-01 12:53:59.55&qu…

力扣思维题——寻找重复数

题目链接&#xff1a;https://leetcode.cn/problems/find-the-duplicate-number/description/?envTypestudy-plan-v2&envIdtop-100-liked 这题的思维难度较大。一种是利用双指针法进行计算环的起点&#xff0c;这种方法在面试里很难说清楚&#xff0c;也很难想到。大致做…

idea structure视图介绍

作用 idea的Structure视图可以辅助查看代码结构 如何呼出Structure视图&#xff1f; Alt 7 Ctrl F12 侧边栏点Structure 我的常用配置 1、选Show Toolbar&#xff0c;便于使用功能按钮 2、使用Float视图&#xff0c;悬浮于窗口表面&#xff0c;可以使用 ShiftEsc来退出…

C语言初学6:循环

while 循环 一、while 循环的语法&#xff1a; while(condition) {statement(s); } condition 为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时&#xff0c;退出循环&#xff0c;程序流将继续执行紧接着循环的下一条语句。 二、while 循环举例 #i…

quic协议及核心源码分析

quic协议 1、网络通信时&#xff0c;为了确保数据不丢包&#xff0c;早在几十年前就发明了tcp协议&#xff01;然而此一时非彼一时&#xff0c;随着技术进步和业务需求增多&#xff0c;tcp也暴露了部分比较明显的缺陷&#xff0c;比如: 建立连接的3次握手延迟大&#xff1b; T…

leetcode203题目移除链表元素

涉及递归 比较清晰 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) :…

c语言:文件操作(2),认识各种文件操作函数

fgets 作用 fgets是C语言标准库中用于从文件中读取字符串的函数。 fgets函数从指定的文件流stream中读取最多n-1个字符&#xff0c;或者直到遇到换行符&#xff08;包括换行符在内&#xff09;&#xff0c;并将其存储到以str指向的字符数组中。读取的字符串会以null字符\0结…

(05)专利撰写笔记

含义不确定、不清楚 目录 一、所述 二、不精确的词 三、约、大约、左右 四、指代不清 五、技术术语本身使用不当 六、逻辑关系混乱 七、位置关系描述  一、所述 要求除了权利要求用“所述”来引述之外&#xff0c;在说明书中要避免出现“所述”二字&#xff0c;而要用…

14. 从零用Rust编写正反向代理, HTTP文件服务器的实现过程及参数

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

12.23C语言 指针

& 地址运算符&#xff0c;用于取地址 /*注释内容*/ //注释一行 *的意思&#xff1a;1.算术运算符 2.用于指针声明int *ptr;表示这个变量是一个指针3.数组元素访问&#xff1a;在数组名后面使用 * 可以表示数组的起始地址。例如&#xff1a; int arr[5] {1, 2, 3, 4, 5…

《LeetCode力扣练习》代码随想录——双指针法(四数之和---Java)

《LeetCode力扣练习》代码随想录——双指针法&#xff08;四数之和—Java&#xff09; 刷题思路来源于 代码随想录 18. 四数之和 双指针 class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> resultnew…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

【时序分析】TimeGPT:首个时间序列分析基础大模型

TimeGPT:首个时间序列分析基础大模型 1. 论文解读1.1 研究背景1.2 TimeGPT详解1.2.1 时间序列预测问题基础1.2.2 TimeGPT架构1.2.3 训练数据集1.2.4 训练TimeGPT1.2.5 不确定性量化1.2.6 实验结果1.2.6.1 Zero-shot 推断1.2.6.2 Fine Tuning1.2.6.3 时间对比1.2.7 讨论2. Time…

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案

干洗店预约上门取货小程序与互联网洗鞋店小程序开发制作功能方案 一、洗衣洗鞋店小程序功能 1. 预约订单&#xff1a;忙碌时&#xff0c;您可以使用预约功能轻松获取洗衣服务。 2. 在线下单&#xff1a;用户可直接通过小程序在线下单&#xff0c;享受专人上门取货与配送服务。…

Unity2017升级到Unity2018在Window7上输出空异常错误问题

Unity2017升级到Unity2018在Window7上输出空异常错误问题 一、环境Window7二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&#xff09;三、日志四、解决方案第一种解决方案第二种解决方案 一、环境Window7 二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&…

小白入门之安装NodeJS

重生之我在大四学JAVA 第五章 安装NodeJS 如果你在购买我闲鱼的程序&#xff0c;请尽量使用node14版本 修改安装路径 接着傻瓜式NEXT 测试是否安装成功 如果上面没提示版本号&#xff0c;就按照前两章配置环境变量步骤配置下环境变量 设置镜像地址 npm config set re…

基于遗传算法特征选择及单层感知机模型的IMDB电影评论文本分类案例

基于遗传算法特征选择及单层感知机模型的IMDB电影评论文本分类案例 1.数据载入及处理2.感知机模型建立3.模型训练4.遗传算法进行特征选择注意 5.联系我们 1.数据载入及处理 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dat…

【Flutter】黑白图片

一、将图片处理成黑白图片 //第一种方法CachedNetworkImage(imageUrl: imageUrl,width: 80,height: 80,fit: BoxFit.cover,color: Colors.black,//目标颜色colorBlendMode: BlendMode.color,//颜色混合模式)//第二种方法ShaderMask(shaderCallback: (Rect bounds) {return Lin…

lc1:两数之和

一句话描述问题&#xff1a;从数组中找两个数&#xff0c;等于目标值&#xff0c;返回他们的下标。 一句话题解M1&#xff1a;双层下标循环&#xff0c;第二层循环起点为上层起点1,两个循环数组值相加等于目标值&#xff0c;返回对应下标。 一句话题解M2&#xff1a;第一层循环…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Channel 模块的实现

在这篇文章中虽然实现了能够和多客户端建立连接&#xff0c;并且同时和多个客户端进行通信。 基于多反应堆的高并发服务器【C/C/Reactor】&#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135141316?spm1001.2014.3001.5501但是有…