[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中的对象和关系数据库中的表存在一种对应关 ...
随机推荐
- 洛谷 P4902 乘积 (约数筛,前缀和(积))
洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...
- pycharm不支持svn,是需要svn命令行工具没有安装(for windows)
1. 安装svn命令行工具 Subversion for Windows下载https://sourceforge.net/projects/win32svn/?source=typ_redirect ...
- 同样是1ms子帧,为什么5G的时延比LTE小得多
转载:http://www.txrjy.com/forum.php?mod=viewthread&tid=1045092 个子帧中一定包含14个OFDM符号.当子载波间隔是15KHz时,1个5 ...
- 理解URL以及如何区分相对URL和绝对URL
URL(Uniform Resource Locator 统一资源定位符)可以理解为网络地址. url 包含了关于文件储存位置和浏览器应该如何处理文件的信息. URL的第一个部分称为模式scheme, ...
- Bugku 杂项 又一张图片,还单纯吗
又一张图片,还单纯吗 下载后,用binwalk打开图片 使用foremost 2.png进行分离 得到图片 关于foremost foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d ...
- BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 LCA + 树的直径
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...
- ES6 Object.setPrototypeOf ()方法和defineProperty()方法的使用
将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性). 示例: <script type="text/javascript"> ...
- vim输入操作
在英文状态下按下 键盘上的 ”I“ 使用下箭标移动光标到最下面一行,然后按下END键,按下ENTER键 输入你的内容 按下ESC键,然后输入冒号,即 (:wq) 输入保存流程结束
- 一台电脑多个git使用 push 时候出现denied
http://my.oschina.net/silentboy/blog/220158 当一台电脑上多个git account 的时候, 出现如下问题, $ git push origin maste ...
- Oracle诊断: 服务器启后,无法连接
Oracle 服务器启后,使用Toad 客户端连接oracle 时候,遇到下面的错误: oracle ORA-12514: TNS: no listener TNS: listener does no ...