前言
本文来讲解ORM编程思想和SQL注入,旨在帮助大家更容易的理解和掌握
个人主页:艺杯羹
系列专栏:JDBC
一. ORM编程思想
1. 简介
这是一种思想,对象关系映射(英语:Object Relational Mapping,简称ORM,或O/R mapping)是一种为了解决面向对象语言与关系数据库存在的互不匹配的现象
这个思想就是要求:
- 表与所创建的类要对应
- 表的一个字段和类中一个属性一一对应
- 表的一行数据和类的一个对象对应
实体类
实体类就是一个定义了属性,拥有getter、setter、无参构造方法(基本必备)的一个类。实体类可以在数据传输过程中对数据进行封装,相当于一个“工具”、“容器”、“载体”,能存储、传输数据,能管理数据
特点分类 |
具体描述 |
类名 |
实体类名尽量和数据库中的表名一一对应 |
属性与字段 |
实体类中的属性对应数据库表中的字段,相关的命名最好也一一对应 |
方法 |
实体类内方法主要有 getter、setter 方法,用于设置、获取数据 |
访问修饰符 |
实体类属性一般为 private 类型,方法为 public 类型 |
构造方法 |
实体类应该有无参、有参构造方法 |
关系图如下:
2. 实操ORM思想
a. Students实体类
// 实体类,存放Users表中的数据 public class Students { private int studentid; private String studentname; private int studentage; public int getStudentid() { return studentid; } public void setStudentid(int studentid) { this.studentid = studentid; } public String getStudentname() { return studentname; } public void setStudentname(String studentname) { this.studentname = studentname; } public int getStudentage() { return studentage; } public void setStudentage(int studentage) { this.studentage = studentage; } }
b. ORM映射
public List<Students> selectAllStu(){ Connection connection = null; PreparedStatement ps = null; ResultSet rs = null; List<Students> list = new ArrayList<>(); try{ // 获取数据库连接 connection = JdbcUtils.getConnection(); // 创建PreparedStatement对象 ps = connection.prepareStatement("select * from students"); // 执行查询 rs = ps.executeQuery(); // 操作ResultSet对象获取查询的结果集 while(rs.next()){ // 获取列中的数据 int studentid = rs.getInt("studentid"); String studentname = rs.getString("studentname"); int studentage = rs.getInt("studentage"); // ORM映射处理 Students student = new Students(); student.setStudentid(studentid); student.setStudentname(studentname); student.setStudentage(studentage); list.add(student); } }catch (Exception e){ e.printStackTrace(); } return list; }
测试
ResultSetTest tst = new ResultSetTest(); List<Students> students = tst.selectAllStu(); for(Students student : students){ System.out.println(student.getStudentid()+" "+student.getStudentname()+" "+student.getStudentage()); }
二. SQL注入
1. 简介
所谓 SQL 注入,就是通过把含有 SQL 语句片段的参数插入到需要执行的 SQL 语句中,
最终达到欺骗数据库服务器执行恶意操作的 SQL 命令
这种情况会导致数据泄露的风险,如果是登录账号,被使用sql注入攻击,那么就会导致数据泄露
这里我那statement来举个例子
这是一个用户登录查询的sql语句
// 在Statement里 String sql = "SELECT * FROM users WHERE username = '"+username+"' AND password = '"+password+"'"
如果攻击者,输入如下内容
' OR '1'='1' --
那么就会有数据泄露的风险,为什么?现在我们看看源代码
// 这里的意思就变成名字是一直都是为真的 // 并且后面使用 -- 这个符号将密码注释掉了 // 这样就出现了SQL注入 SELECT * FROM users WHERE username = '' OR '1'='1' --' AND password = '任意值';
2. 解决SQL注入
就像之前的文章提到的,为什么使用Statement会出现SQL注入,就是这个原因
如何去解决呢,就是用PrepareStatement
因为prepareStatement会先用**?**来占位,就能够防止SQL注入
三. 总结
到此,就讲解完了ORM编程思想和SQL注入,相信你能够很好的理解了
希望本文能够帮助到你😊