[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中的对象和关系数据库中的表存在一种对应关 ...
随机推荐
- 10年前文章_mysql 中文设置
下面的设置针对GB2312, 1 创建数据库时使用 GBK 字符集 CREATE DATABASE `orange` DEFAULT CHARACTER SET gbk COLLATE gbk_ch ...
- Python---进阶---文件操作---搜索文件和保存搜索结果
### 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如果遇到文件夹,则进入该文件夹继续搜索 - input 去接受用户输入的文件名和开始搜索的路径 - os.path.isdi ...
- A1011
找最大的,然后按规定计算后输出. 没啥可说的,除非犯了愚蠢的错误(比如把j写成i这种),按题目要求写就是了. #include<cstdio> int main(){ ]={'W','T' ...
- jquery获取元素
let $lis = $('#sidebar-menu li[to]')//获取sidebar-menu下包含to属性的li
- Apache启动错误:could not bind to address[::]:443
Q:Windows环境下启动apache报错如下: 可是在httpd.conf文件中apache listen的明明是http 80端口,为什么会报443的错误? A:因为你的计算机安装了VM,所有有 ...
- redis过期策略设置
中6中过期策略的具体方式. redis 中的默认的过期策略是volatile-lru .设置方式 可以通过命令直接设置 config set maxmemory-policy volatile-lru ...
- HOJ 2315 Time(模拟)
Description Kim是一个掌控时间的大师.不同于一般人,他习惯使用秒来计算时间.如果你问他现在是几点,他会告诉你现在是今天的xxxx秒.Mik想要考考Kim.他想知道从某一天的00:00:0 ...
- RedisTemplate访问Redis数据结构(二)——List
RedisTemplate使用ListOperations专门操作list列表.首先初始化spring工厂获得redisTemplate和opsForList private RedisTemplat ...
- POJ 1380 Equipment Box (暴力枚举)
Equipment Box 题目链接: http://acm.hust.edu.cn/vjudge/contest/130510#problem/B Description There is a la ...
- 在Ubuntu18.04下安装Java 11
一直以来,本人都使用第三方软件包"ppa:linuxuprising/java"安装Java JDK,最近一次安装时发现无法成功.这是由于现在无法直接从Oracle官网下载Java ...