一、概念

基本思想:

表结构跟类对应; 表中字段和类的属性对应;表中记录和对象对应;

– 让javabean的属性名和类型尽量和数据库保持一致!

– 一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)

• 将表中的一条记录封装到Object数组中

• 将表中的一条记录封装到map中

• 将表中一条记录封装到javabean对象中

/***
* 测试object数组来封装一条对象,有3种
* 1)将表中的一条记录封装到Object数组中
2)将表中的一条记录封装到map中
3)将表中一条记录封装到javabean对象中
*/
package com.sxt.orm; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; public class Demo01 {
public static void main(String[] args) throws Exception {
Connection coon=JDBCUtil.getMysqlConnection();
PreparedStatement ps=coon.prepareStatement("select empname,salary from emp where id>?");
ps.setObject(1, 1); ResultSet rs=ps.executeQuery(); List<Object[]> list=new ArrayList<Object[]>();// 如果要放多条记录可以采用容器 while (rs.next()) {//getString("empname")等价于getString(1), 1就是上文中要查询的2个信息(empname,salary)之一
//System.out.println(rs.getString("empname")+" "+rs.getDouble("salary"));
Object obj[]=new Object[2];
obj[0]=rs.getString(1);//把接收到的2列信息存到Object类的数组中,通过数组封装了1条记录.
obj[1]=rs.getDouble(2); list.add(obj);//把每次查到到的1条记录插到容器中
} JDBCUtil.close(ps, coon, rs);//即使在这里把数据库的引用关了之后,下边任然可以使用,因为已经存到数组中去了
for (Object[] objects : list) {
System.out.println(objects[0]+" "+objects[1]);//前边不加个字符串连接会报错
}
}
}
/***
* 2)使用map封装数据库的记录
*/
package com.sxt.orm; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Demo02 {
public static void main(String[] args) throws Exception {
Connection coon=JDBCUtil.getMysqlConnection();
PreparedStatement ps=coon.prepareStatement("select id, empname,salary from emp where id>?");
ps.setObject(1, 1); ResultSet rs=ps.executeQuery(); /*
//存储1条信息
Map<String, Object> row=new HashMap<String, Object>(); while (rs.next()) {
row.put("id", rs.getObject("id"));
row.put("empname", rs.getObject("empname"));
row.put("salary", rs.getObject("salary")); //用键值对存储1条信息
}
while (rs.next()) {
Map<String, Object> row=new HashMap<String, Object>();
row.put("id", rs.getObject("id"));
row.put("empname", rs.getObject("empname"));
row.put("salary", rs.getObject("salary")); //用键值对存储1条信息
}
//遍历map
for (String key : row.keySet()) {// key就是row.put("id", rs.getInt("id"));中前边的关键字
System.out.print(key+":"+row.get(key)+" ");
}
} */ //借助list 存储多条信息 容器套容器
List< Map<String, Object> > list=new ArrayList< Map<String,Object> >(); while (rs.next()) {
Map<String, Object> row=new HashMap<String, Object>();
row.put("id", rs.getObject("id"));
row.put("empname", rs.getObject("empname"));
row.put("salary", rs.getObject("salary")); //用键值对存储1条信息
list.add(row); //row是1条记录
} //遍历list
for (Map<String, Object> row : list) {
for (String key : row.keySet()) {// key就是row.put("id", rs.getInt("id"));中前边的关键字
System.out.print(key+":"+row.get(key)+" ");
}
System.out.println();
} }
}

3)使用Javabean

【雇员类】

/***
* 雇员类,一个表对应一个类。一个列属性对应类数属性,一条记录对应一个对象
*/
package com.sxt.orm; import java.sql.Date; public class Emp {
private Integer id;//使用的是包装类 相当于int型
private String empname;
private Integer age;
private Date brithday;
private Double salary;
private Integer deptId; //什么都有的的构造方法
public Emp(Integer id, String empname, Integer age, Date brithday,
Double salary, Integer deptId) {
this.id = id;
this.empname = empname;
this.age = age;
this.brithday = brithday;
this.salary = salary;
this.deptId = deptId;
}
//只有 id empname salary的构造方法 为测试而生
public Emp(Integer id, String empname, Double salary) {
this.id = id;
this.empname = empname;
this.salary = salary;
} //空构造器
public Emp() {
super();
}
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 getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
} }

【测试】

/***
* 2)使用Javabean封装 用的最多
*/
package com.sxt.orm; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Demo03 {
public static void main(String[] args) throws Exception {
Connection coon=JDBCUtil.getMysqlConnection();
PreparedStatement ps=coon.prepareStatement("select id, empname,salary from emp where id>?");
ps.setObject(1, 1);
List<Emp> list=new ArrayList<Emp>();
ResultSet rs=ps.executeQuery();
Emp emp=null; while (rs.next()) {
emp=new Emp(rs.getInt(1),rs.getString(2),rs.getDouble(3));
list.add(emp);//如果查询多条记录加上这句话
} for (Emp tempemp : list) {
System.out.println(tempemp.getId()+" "+tempemp.getEmpname()+" "+tempemp.getSalary());
} }
}

[19/05/08-星期三] JDBC(Java DataBase Connectivity)_ORM(Object Relationship Mapping, 对象关系映射)的更多相关文章

  1. [19/05/05-星期日] JDBC(Java DataBase Connectivity,java数据库连接)_mysql基本知识

    一.概念 (1).是一种开放源代码的关系型数据库管理系统(RDBMS,Relational Database Management System):目前有很多大公司(新浪.京东.阿里)使用: (2). ...

  2. [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识

    一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...

  3. JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language

    JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...

  4. [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

    一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...

  5. JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  6. Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  7. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Java 自定义注解实现ORM对象关系映射

    一,ORM概念 ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关 ...

随机推荐

  1. qt02 textEdit

    1.向QTextEdit中当前光标位置添加一行字符串message ui.messageTextEdit->textCursor().insertText(message+"\n&qu ...

  2. Java数据封装成树形结构,多级

    参考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147 1.实体类 @data public class PublishS ...

  3. 【Linux】CentOS6上安装Python3.7(config、make、make install)及“No module named '_ctypes'”/pip install时“ssl module in Python is not available.”的解决

    1.下载安装包 https://www.python.org/ftp/python/ 该目录下选择所需要的版本进行下载.解压. wget https://www.python.org/ftp/pyth ...

  4. SpringCloud学习系列-SpringCloud

    SpringCloud是什么? SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶 SpringCloud,基于SpringBoot提供了一 ...

  5. 【GDOI2016模拟3.10】习用之语

    前言 这道题看上去很水,结果我在比赛上浪费了N多时间在上面,但还是没AC.比赛结束后发现:实际上这道题还是是大水. 题目 分析 设字符串c1c2c3c4,其中c1.c2.c3.c4={'0'~'9', ...

  6. JavaScript性能优化之小知识总结

    1.避免全局查找 在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些 2.定时器 如果针对的是不断运行的代码,不应该使用setTimeout,而 ...

  7. Supervised pre-trainning有监督预训练

    如我们有一个分类任务,数据库很小,这时还是需要通过预训练来避免深度模型的过拟合问题的,只不过预训练是通过在一个大的数据库上(比如imagenet),通过有监督的训练来完成的.这种有监督预训练加小的数据 ...

  8. SpringBoot属性配置-第三章

    1.application.yml配置#自定义参数对象book: name: A id: 1 page: 100 2.创建实体类: /** * @Auther: youqc * @Date: 2018 ...

  9. oracle各服务说明及cmd启动启动命令

    成功安装Oracle 11g后,共有7个服务,一.这七个服务的含义分别为:1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Sh ...

  10. 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询

    Chapter 3 Joins Cross Joins(交叉联接)就是返回两个表的笛卡尔积(m行的表cross join一个n行的表得到一个m * n行的结果),它有两种标准SQL语法,第一种: SE ...