[19/05/08-星期三] JDBC(Java DataBase Connectivity)_ORM(Object Relationship Mapping, 对象关系映射)
一、概念
基本思想:
– 表结构跟类对应; 表中字段和类的属性对应;表中记录和对象对应;
– 让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, 对象关系映射)的更多相关文章
- [19/05/05-星期日] JDBC(Java DataBase Connectivity,java数据库连接)_mysql基本知识
一.概念 (1).是一种开放源代码的关系型数据库管理系统(RDBMS,Relational Database Management System):目前有很多大公司(新浪.京东.阿里)使用: (2). ...
- [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识
一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...
- JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language
JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据 ...
- [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)
一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...
- JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java 自定义注解实现ORM对象关系映射
一,ORM概念 ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关 ...
随机推荐
- AtCoder Regular Contest 092 2D Plane 2N Points AtCoder - 3942 (匈牙利算法)
Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...
- 在浏览器下载pdf,或者txt文档是会直接打开
window.location.href = url会直接打开,解释大概是因为浏览器自身可以解析.pdf或者txt.解决方法如下: 本来就要用a标签里面加上download属性的,结果发现不行,就算了 ...
- 运行biggan demo
http://www.zhuanzhi.ai/document/8705953a704e1bf8e051c161d1587d88
- eclips 中的 svn 更新报错,被锁住解决办法
svn更新不下来,在文件的目录上选择 Team,然后选择 Refresh/Cleanup ,然后就可以了,这个方法我自己试有效,做为参考,对其它情况不一定有效 报错如下 解决方法
- Java——容器(Interator)
[Interator接口] <1> 所有实现了Collection接口的容器类都有一个interator方法用以返回一个实现了Interaor接口的对象. <2> Inte ...
- [codeforces743C]:Vladik and fractions(数学)
题目传送门 题目描述 请找出一组合法解使得$\frac{1}{x}+\frac{1}{y}+\frac{1}{z}=\frac{2}{n}$成立. 其中$x,y,z$为正整数且互不相同. 输入格式 一 ...
- (转)Matplotlib的子图subplot的使用
转:https://www.jianshu.com/p/de223a79217a 前言 Matplotlib的可以把很多张图画到一个显示界面,这就设计到面板切分成一个一个子图.这是怎么做到的呢.mat ...
- CS2001 VS编译错误
Severity Code Description Project File Line Suppression State Error CS2001 Source file 'C:\Workspace ...
- node.js配置环境变量
今天配置node.js的时候,碰到了配置环境变量的问题 为什么会出这样的问题: 因为我将 node.js 安装到了D盘,(这是个坑,以后一定要安到C盘),当我发现,我的node操作指令无效的时候,知道 ...
- React-Native 之 GD (十九)TabBarItem 逻辑完善 / 关闭筛选菜单滑动手势 / Navigator 掉帧卡顿问题处理
1.TabBarItem 逻辑完善 那么为了更好的用户体验,我们这边还需要来处理一下点击 TabBarItem 的一下细节,那就是当用户点击 Item 时,可能只是单纯的想进行页面的 切换或者置顶操作 ...