对象关系映射ORM

目录

ORM【重要】

[1、 什么是ORM](#1、 什么是ORM)

[2、 实体类](#2、 实体类)

[3、 ORM改造登录案例](#3、 ORM改造登录案例)


ORM【重要】

1、 什么是ORM

目前使用JDBC完成了CRUD,但是现在是进行CRUD,增删改方法要设计很多参数,查询的方法需要设计集合才能返回.


在实际开发中,我们需要将零散的数据封装到对象处理.
ORM (Object Relational Mapping) 对象关系映射

是指数据库表Java的实体类有关系,可以进行映射

  • 数据库表 --> Java的类

    • tb_user ---> User.java
  • 字段 --> 类的属性

    • id int --> private int id;

    • username varchar --> private String username;

    • ...

  • 一行数据 --> 类的对象

  • 一行数据内每个列的值 --> 对象的属性值

2、 实体类

实体类: 数据表中零散数据的载体,用来封装数据.

  • 表名 设计 类名

  • 将列名设计成属性名

    • id --> id

    • create_time --> createTime (下划线转驼峰)

  • 将列的数据类型设计成属性的数据类型

  • 给类提供对应set get


一般项目中一个表就会对应一个实体类,所有的实体类都会放在model/entity/pojo/javabeen包结构中


将来写项目,数据库设计完,搭建完项目,第一件事件就是根据表结构,创建实体类

java 复制代码
public class User {   // 实体类,是表名
    // 属性是字段名
    private int id;
    private String username;
    private String password;
    private String phone;
    private Date createTime;
    private double money;
    private int sex;
    
    // setter getter...
}

3、 ORM改造登录案例

需求变更: 登录,如果成功,返回该用户所有信息

java 复制代码
public class Demo5_login_orm {
​
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:" );
        String username = scanner.nextLine( );
​
        System.out.println("请输入密  码:" );
        String password = scanner.nextLine( );
​
        User user = login(username, password);
​
        if (user != null) {
            System.out.println("登录成功,信息如下" );
            System.out.println(user );
        } else {
            System.out.println("登录失败,用户名或密码错误!" );
        }
    }
​
    // 需求变更: 登录,如果成功,返回该用户所有信息
    // 数据信息使用User对象封装
    public static User login(String username, String password) {
        Connection conn = null;
        Statement s = null;
        ResultSet rs = null;
        try {
            // 1加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2获得连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java2403?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=UTC",
                    "root", "123456");
            // 3获得执行语句对象
            s = conn.createStatement( );
​
            String sql = "select * from tb_user where username = '"+username+"' and password = '"+password+"'";
            System.out.println("拼接后的sql: " + sql );
            // 4执行sql
            rs = s.executeQuery(sql);
            if (rs.next()) {// 登录成功,从结果集取出数据
                int id = rs.getInt("id");
                String uname = rs.getString("username");
                String pwd = rs.getString("password");
                String phone = rs.getString("phone");
                Date createTime = rs.getDate("create_time");
                double money = rs.getDouble("money");
                int sex = rs.getInt("sex");
​
                User user = new User(id,uname,pwd,phone,createTime,money,sex);
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace( );
        } finally {
            // 5关流
            try {
                rs.close();
                s.close( );
                conn.close( );
            } catch (SQLException e) {
                e.printStackTrace( );
            }
        }
        return null;
    }
}
相关推荐
Lhappy嘻嘻3 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
伊玛目的门徒4 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
懒鸟一枚7 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123458 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑8 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ10 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案11 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅11 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp11 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG47711 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程