[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中的对象和关系数据库中的表存在一种对应关 ...
随机推荐
- java日志文件log4j.properties配置详解
一.Log4j配置 第一步:加入log4j-1.2.8.jar到lib下. 第二步:在CLASSPATH下建立log4j.properties.内容如下: 放在src下的话就不用配置 否则得去web. ...
- 基于VSFTP的本地YUM源及光盘YUM源搭建
基于VSFTP的本地YUM源及光盘YUM源搭建 一.yum环境的本地源搭建(基于VSFTP): 1)安装vsftp; *********************************** ...
- hdu 4609: 3-idiots (FFT)
题目链接 题意:从N个数中,选出三个两两不同的数,求这三个数能够作为一个三角形的三边长的概率. 题解:用一个数组num[]记录大小为 i 的数出现的次数,通过 num[] 卷 num[] 得到 num ...
- vue 常见错的可能原因
标签或者组件名写错 Unknown custom element: <h> - did you register the component correctly? For recursiv ...
- LeetCode--114--二叉树展开为链表(python)
给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6将其展开为: 1 \ 2 \ 3 \ 4 \ ...
- 命令——tree
tree——以树形结构显示目录文件 [root@centos71 ~]# yum provides tree Loaded plugins: fastestmirror Loading mirror ...
- 理解URL以及如何区分相对URL和绝对URL
URL(Uniform Resource Locator 统一资源定位符)可以理解为网络地址. url 包含了关于文件储存位置和浏览器应该如何处理文件的信息. URL的第一个部分称为模式scheme, ...
- ExoPlayer + 边缓存边播放
在此基础上改动:https://www.cnblogs.com/candyzhmm/p/9957928.html private void openPlayer(String videoUrl) { ...
- 一、Nginx常见问题
1.相同server_name多个虚拟主机优先级访问 最先读取哪个配置文件,就访问那个的网页 2.location匹配优先级 相同location,会被后面的覆盖 匹配优先级更高的,找后面的 = ...
- 文档流&文字&CSS常用命令
文档流 文档流就是文档内元素流动方向 流动方向 内联元素从左往右流,宽度不够,之字形,且元素会被截断 块元素从上往下流动,一排一排 注意事项 内联元素中有英文单词,流动时宽度不够,英文单词会整体迁移, ...