Java对象关系映射(ORM)
一、什么是对象关系映射
简单来说,对象关系映射即是将Java中的对象一一对应映射到MySQL(本文基于MySQL)的Table(表)中,通过对对象各个属性赋值来更新数据库。
官方的说,对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。(本段来自百度百科)
二、如何写ORM代码
首先,我们要在工程中编写配置文件(XML格式),下面给出配置文件的具体代码(由于本人也不是特别熟悉配置文件中每个语句的具体使用,避免误导大家,暂时不解释配置文件):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC" /><!-- 数据源 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/World?useSSL=false&serverTimezone=GMT%2B8" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments><mappers><package name="com.csuft.db.mapper"/></mappers>
</configuration>
本人使用的是MySQL8.0默认的Example(World数据库),所以在配置文件中的url是jdbc:mysql://127.0.0.1:3306/World?...
接着我们来看看如何使用映射,emmmm,我们一起来读取(SELECT)一下World数据库中City表中的数据,并在控制台中模拟换页的效果,每页显示五条信息,下面请看代码:
public class City {int id;String name;String countryCode;String district;int population;@Overridepublic String toString() {return "City [id=" + id + ", name=" + name + ", countryCode=" + countryCode + ", district=" + district+ ", population=" + population + "]";}}
首先根据City表的字段写一个City类,类中的字段对应于表的字段,重写toString方法,方便对象打印到控制台上。
public interface CityMapper {@Select("SELECT * FROM city LIMIT 5 offset #{offset}")@Results({@Result(column="ID",property="id"),@Result(column="Name",property="name"),@Result(column="CountryCode",property="countryCode"),@Result(column="District",property="district"),@Result(column="Population",property="population")})List<City> find(int offset);
}
定义一个映射的接口,是不是不知道有什么用?不着急,可以理解为通过这个接口中的方法可以执行映射的SQL语句
接着重头戏来了,我们一起看一下如何执行映射:
public class App {public static void main(String[] args) {try {//根据配置文件创建数据源(一个生产对话的工厂)SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(new FileReader("config.xml"));//获得 SQLSession(通过工厂获得对话)SqlSession session = factory.openSession();//在通过对话获取到映射CityMapper mapper = session.getMapper(CityMapper.class);//调用映射的find方法查询表中数据Scanner sc = new Scanner(System.in);int offset = 0;while(true) {List<City> list = mapper.find(offset);for (City c : list) {System.out.println(c);}System.out.println("请输入是否显示下一页数据?(是/1,退出/0)");int temp = sc.nextInt();if(temp == 1) {offset += 5;}else if(temp == 0){System.out.println("成功退出查询!");break;}else {System.out.println("输入有误!退出查询!");break;}}//释放资源,提交对话 sc.close();session.commit();session.close();} catch (FileNotFoundException e) {e.printStackTrace();}}
}
具体的步骤在代码注释中已经给出来了,我们可以理解为Java程序和数据库之间是在进行对话,如同生活中一样,对话需要媒介,这里的媒介就是映射。(还有一个就是:如果只是查询,数据库中的数据没有改变,可以不需要会话提交)
本文是本人学习JDBC的小心得,转载请注明,若有错误,请评论指出,不胜感激
Java对象关系映射(ORM)相关推荐
- java对象关系映射ROM
一.对象关系映射ORM概述 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术:简单的说,ORM是通过使 ...
- 学习笔记之什么是持久化和对象关系映射ORM技术
----------------本文转自:http://www.cppblog.com/javenstudio/articles/541.html--------------------- 何谓&qu ...
- 对象关系映射(ORM)及代码生成器和插件C#源码(DBFrameworkV4.5.3)
1. ORM及代码生成器和插件C#源码(DBFrameworkV4.5.3) 一.使用对象关系映射组件Kenly.DBFramework.dll不用编写任何SQL或者存储过程即可实现下列功能: 1.数 ...
- 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
通过阅读MongoDB 3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射. 1.定义抽象类:AbstractMo ...
- 对象-关系映射ORM(Object Relational Mapping)(转)
ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现 Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java).映射文件(*.hbm.xml)和数据库配置文件 ...
- python中通过元类(TYPE)简单实现对象关系映射(ORM)
ORM是创建一个实例对象,用创建他的类名当做数据表名,用创建他的类属性对应数据表的字段,不需要在自己写复杂的sql语句,而是通过对实例对象的操作时,能让代码自动帮我们整理为对应的sql语句. clas ...
- orm 对象关系映射
引用:http://baike.baidu.com/view/197951.htm 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心原则: 简单:以最基本的形 ...
- 【分享】关于对象关系映射的理解
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- Object/Relation Mapping 对象关系映射
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应 ...
最新文章
- 今日头条首次改进DQN网络,解决推荐中的在线广告投放问题
- 面试最后如何回答“你有什么要问我的吗?”
- 如何有效地提升 JavaScript 水平?
- 通信网络基础期末复习-第三章-网络的时延分析
- 关于textArea的一些琐事
- mysql left day 7_day7-mysql函数
- vc++ cserialport 打开多个串口_STM32之USART串口
- 超火GitHub项目!一夜获得5000星,竟是微软开源的计算器
- thinkphp 前端页面js接收后端传过来的数据
- 麻省理工、微软为AI量身打造了一套leetcode编程题
- 60+PPT 下载丨Oracle Open World 2019
- 第一章练习题三级菜单
- 知乎推荐算法工程师面经
- android背景图边框渐变,GitHub - jvyun/TestShape: 使用自定义属性替代项目中的shape文件,可以给View设置背景色、弧度、背景渐变、边框、边框颜色、渐变方向等...
- 2017.10.26-构建之法:现代软件工程-阅读笔记
- 求助动态贝叶斯网络参数学习函数的使用方法
- python黑马教程ppt_Python零基础教程下载|黑马Python零基础教程(附带教学课件 开发工具 环境配置下载 - 极光下载站...
- 数据库实验 实验三 数据查询
- Kubernetes 学习总结(24)—— Kubernetes 滚动更新、蓝绿发布、金丝雀发布等发布策略详解
- 装饰装修类小程序开发