数据库结构

database名:sorm

emp表:
与dept表表通过deptid,达到逻辑关联的效果(加一个真正的外键也不是不可以)

dept表:

1、使用List嵌套Object存储返回的多条记录

package cn.hanquan.testORM;import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;/** 测试使用Object[]来封装一条记录 用List封装多条Object[]*/
public class ORM {static Properties pros = null;// 读取、处理资源文件中的信息static {// 在类加载的时候执行一次pros = new Properties();try {pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Object[]> list = new ArrayList<>();try {// 加载驱动类Class.forName(pros.getProperty("mysqlDriver"));conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));// 执行SQLString sql = "select id,salary,birthday,age from emp where empname=?";ps = conn.prepareStatement(sql);ps.setString(1, "高淇");rs = ps.executeQuery();// 接收结果并输出while (rs.next()) {Object[] obj = new Object[4];// 若将obj定义放在while之外,添加至list时需要clone。否则仅传递引用。obj[0] = rs.getObject(1);obj[1] = rs.getObject(2);obj[2] = rs.getObject(3);obj[3] = rs.getObject(4);list.add(obj);}// 打印for (Object[] tempObj : list) {for (Object o : tempObj) {System.out.print(o + " ");}System.out.println();}System.out.println();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 关闭流try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

输出

1 50000 1988-01-02 26
4 2000 2000-02-02 12

2、使用List嵌套Map存储多条记录

容器套容器,更方便

package cn.hanquan.testORM;import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;/** 测试使用Map来封装一条记录* 使用List<Map>存储多条记录*/
public class ORM {static Properties pros = null;// 读取、处理资源文件中的信息static {// 在类加载的时候执行一次pros = new Properties();try {pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Map<String, Object>> list = new ArrayList<>();try {// 加载驱动类Class.forName(pros.getProperty("mysqlDriver"));conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));// 执行SQLString sql = "select id,salary,empname,age from emp where salary>?";ps = conn.prepareStatement(sql);ps.setInt(1, 1000);rs = ps.executeQuery();// 接收结果并输出while (rs.next()) {Map<String, Object> oneRow = new HashMap<String, Object>();oneRow.put("id", rs.getObject(1));oneRow.put("empname", rs.getObject(2));oneRow.put("name", rs.getObject(3));oneRow.put("age", rs.getObject(4));list.add(oneRow);}// 打印for (Map<String, Object> m : list) {System.out.println(m);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 关闭流try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

输出

{empname=50000, name=高淇, id=1, age=26}
{empname=80000, name=老高, id=2, age=32}
{empname=25000, name=老张, id=3, age=22}
{empname=2000, name=高淇, id=4, age=12}

3、使用Map嵌套Map存储多条记录

类似地,还可以使用List嵌套List,在这里就不再举例说明。

下面是Map嵌套Map的例子:

package cn.hanquan.testORM;import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;/** 测试使用Map来封装一条记录* 使用List<Map>存储多条记录*/
public class ORM {static Properties pros = null;// 读取、处理资源文件中的信息static {// 在类加载的时候执行一次pros = new Properties();try {pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;Map<String, Map<String, Object>> maps = new HashMap<>();try {// 加载驱动类Class.forName(pros.getProperty("mysqlDriver"));conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));// 执行SQLString sql = "select id,salary,empname,age from emp where salary>?";ps = conn.prepareStatement(sql);ps.setInt(1, 3000);rs = ps.executeQuery();// 接收结果并输出while (rs.next()) {Map<String, Object> oneRow = new HashMap<String, Object>();oneRow.put("id", rs.getObject(1));oneRow.put("empname", rs.getObject(2));oneRow.put("name", rs.getObject(3));oneRow.put("age", rs.getObject(4));maps.put(rs.getObject(1).toString(), oneRow);}// 打印for (String id : maps.keySet()) {System.out.println(maps.get(id));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 关闭流try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

输出

{empname=50000, name=高淇, id=1, age=26}
{empname=80000, name=老高, id=2, age=32}
{empname=25000, name=老张, id=3, age=22}

4、将表中一条记录封装到JavaBean中

将表中一条记录封装到JavaBean中是很常用的一种方式。工作中,会使用一些ORM框架,比如Hibernate/Mybatis辅助我们做这些。

表结构对应类结构

表明对应类名

快捷键:使用”ALT+SHIFT+S 增加相应的Set,Get方法

数据库中的内容

JavaBean——Emp.java

package cn.hanquan.testORM;import java.sql.Date;public class Emp {public Integer id;public String empname;public Integer salary;public Date birthday;public Integer age;public Integer deptid;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getEmpname() {return empname;}public void setEmpname(String empname) {this.empname = empname;}public Integer getSalary() {return salary;}public void setSalary(Integer salary) {this.salary = salary;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getDeptid() {return deptid;}public void setDeptid(Integer deptid) {this.deptid = deptid;}public Emp(Integer id, String empname, Integer salary, Date birthday, Integer age, Integer deptid) {super();this.id = id;this.empname = empname;this.salary = salary;this.birthday = birthday;this.age = age;this.deptid = deptid;}public Emp() {}public String toString() {return id + " " + empname + " " + salary + " " + birthday + " " + age + " " + deptid;}
}

使用JavaBean存储过程

package cn.hanquan.testORM;import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;/** 测试使用JavaBean来封装一条记录* 使用List<Emp>存储多条记录*/
public class TestJavaBean {static Properties pros = null;// 读取、处理资源文件中的信息static {// 在类加载的时候执行一次pros = new Properties();try {pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Emp> list = new ArrayList<>();try {// 加载驱动类Class.forName(pros.getProperty("mysqlDriver"));conn = DriverManager.getConnection(pros.getProperty("mysqlURL"), pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));// 执行SQLString sql = "select * from emp where salary>?";ps = conn.prepareStatement(sql);ps.setInt(1, 300);rs = ps.executeQuery();// 接收结果并输出while (rs.next()) {Emp emp = new Emp(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getDate(4), rs.getInt(5),   rs.getInt(6));list.add(emp);}// 打印for (Emp e : list) {System.out.println(e.toString());}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 关闭流try {if (ps != null) {ps.close();}} catch (SQLException e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}}
}

输出

1 高淇 50000 1988-01-02 26 0
2 老高 80000 1975-05-05 32 0
3 老张 25000 1988-02-08 22 0
4 高淇 2000 2000-02-02 12 0

【Java数据库】ORM思想:对象关系映射 使用Java容器存储多条记录相关推荐

  1. java对象关系映射ROM

    一.对象关系映射ORM概述 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术:简单的说,ORM是通过使 ...

  2. C++ 对象关系映射(ORM)介绍

    用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis),TopLink,JDO,JPA-- ...

  3. Java中带有NetSuite数据实体的对象关系映射(ORM)

    对象关系映射(ORM)技术使使用关系数据源更容易,并且可以将逻辑业务模型与物理存储模型联系在一起. 遵循本教程,将与NetSuite数据的连接集成到基于Java的ORM框架Hibernate中. 您可 ...

  4. Java对象关系映射(ORM)

    一.什么是对象关系映射 简单来说,对象关系映射即是将Java中的对象一一对应映射到MySQL(本文基于MySQL)的Table(表)中,通过对对象各个属性赋值来更新数据库. 官方的说,对象关系映射(O ...

  5. 学习笔记之什么是持久化和对象关系映射ORM技术

    ----------------本文转自:http://www.cppblog.com/javenstudio/articles/541.html--------------------- 何谓&qu ...

  6. 对象关系映射(ORM)介绍理解

    问题背景 假设,让你设计一个框架,把jdbc封装一下?? JDBC操作步骤: 获取数据库连接Connection 创建操作命令对象Statement 执行sql语句(sql中,如果有占位符,在执行sq ...

  7. mysql数据库对象关系映射

    http://www.2cto.com/database/201310/248690.html mysql数据库对象关系映射 1.对"对象关系映射"的理解 a.对象:可以理解为ja ...

  8. netsuite 数据集成_Java中带有NetSuite数据实体的对象关系映射(ORM)

    netsuite 数据集成 对象关系映射(ORM)技术使使用关系数据源更加容易,并且可以将逻辑业务模型与物理存储模型联系在一起. 遵循本教程,将NetSuite数据的连接集成到基于Java的ORM框架 ...

  9. ORM(Object Relational Mapping,对象/关系映射)

    ORM(Object Relational Mapping,对象/关系映射) 在考虑O/R Mapping的时候,有两个概念是经常会接触的,那就是VO和PO. 所谓的VO,就是Value Object ...

最新文章

  1. Android之一起制作简易唱片播放器
  2. 未来智能社会的一砖一瓦都需要今天我们一点点的探索发现!
  3. jmeter linux安装,Linux下安装Jmeter
  4. 12-黑马程序员------C 语言学习笔记--- C语言指针与函数
  5. css3宽度变大动画_学所 前端 | HTML5+CSS3
  6. Python Django 全局上下文代码示例
  7. 工作408- Module build failed (from ./node_modules/sass-loader/dist/cjs.js)
  8. Codeforces Round #295 (Div. 1) C. Pluses everywhere
  9. gradle错误 dependency.systemPath‘ for com.alibaba:jconsole:jar must specify an absolute path
  10. ASP.NET---操作数据库增删改查
  11. php递归mysql查询_PHP MySQL递归查询
  12. 铁路售票系统_自助售票机功能升级了!快来掌握新技能!
  13. UART RS232 RS485协议原理及应用
  14. 使用PyHive操作Hive
  15. VHDL——分频器设计
  16. 十六进制转float
  17. IM多人聊天-群聊头像合成方法
  18. 离散傅里叶变换DFT、离散余弦变换DCT、离散正弦变换DST,原理与公式推导
  19. 经典算法应用之七----10亿数据中取最大的100个数据
  20. 玩转可视化图表之矩形树图

热门文章

  1. HDU - 5017 Ellipsoid(三分套三分/模拟退火)
  2. HDU - 5459 Jesus Is Here(思维+非线性递推)
  3. 图文解释Glados自动签到免费获取天数(腾讯云函数serverless版)
  4. LCM from 1 to n
  5. HDU3400(计算几何中的三分法利用)
  6. 10.切片slice.rs
  7. 用 70 行代码给你自己写一个 strace
  8. 【白话科普】10s 从零看懂 H5
  9. Spring+Mybatis多数据源配置(四)——AbstractRoutingDataSource实现数据源动态切换
  10. 如何使用开源SFU构建RTC云服务