JDBC中的ORM

ORM是对象和关系数据库的映射技术,通过它,一个对象可以对应数据库的一条记录。本文通过举例展示了如何使用ORM实现对Hero对象的CRUD操作,包括获取、添加、删除、更新和列出所有Hero对象的方法,强调了ORM带来的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORM是指:对象和关系数据库的映射,简单说,一个对象,对应数据库里的一条记录。
1.举个例子
代码如下:

package jdbc8;

public class Hero {
    public int id;
    public String name;
    public float hp;
    public int damage;
 
}
package jdbc8;
import java.sql.*;
public class test1 {
	public static Hero get(int id) {
		Hero hero = null;
		Connection c = null;
		Statement s = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");
			s = c.createStatement();
			String sql = "select * from hero where id = " + id;
			rs = s.executeQuery(sql);
			if(rs.next()) {
				hero = new Hero();
				String name = rs.getString(2);
				float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                hero.name = name;
                hero.hp = hp;
                hero.damage = damage;
                hero.id = id;
			}
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			if(rs != null) {
				try {
					rs.close();
				}catch(Exception e) {
					e.printStackTrace();
				}
				rs = null;
			}
			
			if(s != null) {
				try {
					s.close();
				}catch(Exception e) {
					e.printStackTrace();
				}
				s = null;
			}
		
			if(c != null) {
				try {
					c.close();
				}catch(Exception e) {
					e.printStackTrace();
				}
				c = null;
			}
		}
		return hero;
	}
	
	public static void main(String[] args) {
		Hero h = get(12);
		System.out.println(h.name);
	}
}

结果打印出数据库中第12条信息的名字。这里实现就是查询功能,提供方法get(int id),返回一个Hero对象。

2.练习
根据ORM的思想,设计其他几个常见的ORM方法:
1.把一个Hero对象插入到数据库中

public static void add(Hero h)

2.把这个Hero对象对应的数据删除掉

public static void delete(Hero h)

3.更新这条Hero对象

public static void update(Hero h)

4.把所有的Hero数据查询出来,转换为Hero对象后,放在一个集合中返回

public static List list();

代码如下:

package jdbc8;

public class Hero {
    public int id;
    public String name;
    public float hp;
    public int damage;
 
}
package jdbc8;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class TestJDBC {
	//获取第id条的信息
	public static Hero get(int id) {
		Hero hero = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		try(Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
				"root", "admin");Statement s = c.createStatement();){
			String sql = "select * from hero where id = " + id;
			ResultSet rs = s.executeQuery(sql);
			
			while(rs.next()) {
				hero = new Hero();
				String name = rs.getString(2);
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                hero.name = name;
                hero.hp = hp;
                hero.damage = damage;
			}
		}catch (SQLException e) {
            e.printStackTrace();
        }
		return hero;
	}
	
	//增加一条信息
	public static void add(Hero h) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		String sql = "insert into hero values(null,?,?,?)";
		try(Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
				"root", "admin");PreparedStatement ps = c.prepareStatement(sql);) {
			// 设置参数
            ps.setString(1, h.name);
            ps.setFloat(2, h.hp);
            ps.setInt(3, h.damage);
   
            ps.execute();
		}catch(SQLException e) {
			e.printStackTrace();
		}
	}
	//删除一条消息
	public static void delete(Hero h) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		String sql = "delete from hero where id = ?";
		try(Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncodeing=UTF-8",
				"root","admin");PreparedStatement ps = c.prepareStatement(sql);){
				ps.setInt(1, h.id);
				ps.execute();
		}catch(SQLException e) {
			e.printStackTrace();
		}
	}
	//更改一条消息
	public static void update(Hero h) {
		try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String sql = "update hero set name = ? , hp =? , damage = ? where id = ?";
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin");
                PreparedStatement ps = c.prepareStatement(sql);) {
            // 设置参数
            ps.setString(1, h.name);
            ps.setFloat(2, h.hp);
            ps.setInt(3, h.damage);
            ps.setInt(4, h.id);
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
	}
	//将数据库中的信息放入到List中
	public static List<Hero> list() {
        List<Hero> heros = new ArrayList<>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
                "root", "admin"); Statement s = c.createStatement();) {
            String sql = "select * from hero";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                Hero hero = new Hero();
                int id = rs.getInt(1);
                String name = rs.getString(2);
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                hero.name = name;
                hero.hp = hp;
                hero.damage = damage;
                hero.id = id;
                heros.add(hero);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return heros;
    }
	public static void main(String[] args) {
		List<Hero> hs = list();
		System.out.println("数据库中一共有:" + hs.size() + "条消息");
		Hero h = new Hero();
		h.name = "33";
		System.out.println("添加一条信息");
		add(h);
		hs = list();
		System.out.println("取出信息有" + hs.size() + "条");
		System.out.println("取出id=101的数据,它的name是:");
		h = get(101);
		System.out.println(h.name);
		System.out.println("更改名字");
		h.name = "cc";
		update(h);
		System.out.println("现在名字是:");
		h = get(101);
		System.out.println(h.name);
		System.out.println("删除id=101的数据");
        delete(h);
        hs =list();
        System.out.println("数据库中总共有" + hs.size() + " 条数据");
	}
}

这样做的好处可以直接把已有对象添加进数据库,数据库中信息也可以保持在对象中,也可以根据id快速删除,查询信息,这样做方便了很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值