一、ORM
ORM是"对象关系映射"(Object-Relational Mapping)的缩写。这是一种编程技术,用于将对象模型与关系型数据库系统之间的数据进行转换。在面向对象的编程语言中,数据通常以对象的形式表示;而在关系型数据库中,数据则以表格的形式存储。
二、配置数据源
XML
spring:
#配置mybatis的数据源 DataSource
datasource:
username: root
password: 429619
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/easydata
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
level:
com.easy.dao: debug
1.配置了MyBatis的数据源(DataSource),包括用户名、密码、驱动类名和数据库连接URL。
2.指定了MyBatis的mapper文件路径,使用通配符*.xml表示所有以xml结尾的文件。
3.设置了日志级别,将com.easy.dao包下的日志输出级别设为debug,以便在调试时输出更多详细信息。
三、$#的区别
$
符号:
文本替换:
当你在XML映射文件中使用 $
符号时,MyBatis会将它后面的表达式直接替换成对应的值。这种方式类似于简单的字符串替换。
如果 username
的值是 'admin' OR '1'='1
,那么最终的SQL语句将会是:
sql
SELECT * FROM user WHERE username = 'admin' OR '1'='1'
#
符号
预编译参数:
当使用 #
符号时,MyBatis会将它后面的表达式作为预编译语句(PreparedStatement)的参数。这种方式更加安全,因为它会自动处理SQL注入的问题。
将SQL语句的语义确定,之后无论传递任何参数都不会改变SQL语句语义,可以有效防止SQL注入 也可以加快批处理的效率
类型转换:
如果 username
是一个字符串 "admin"
,那么最终的SQL语句将会是:、
sql
SELECT * FROM user WHERE username = ?
四、增删改
1. 创建数据模型类 (Staff.java)
首先,我们创建一个数据模型类,也就是实体类Staff,它对应数据库中的Staff表。
java
package com.easy.bean;
import java.math.BigDecimal;
public class Staff {
private int id;
private String code;
private String name;
private BigDecimal salary;
private String username;
private String userpass;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
}
2. 创建数据访问对象接口 (IStaffDao.java)
接着,我们创建一个DAO接口IStaffDao,它定义了对Staff表的操作方法。
java
package com.easy.dao;
import com.easy.bean.Staff;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface IStaffDao {
String getNow();
// 操作数据的行数
int addStaff(Staff staff);
int delStaff(int id);
int editStaff(Staff staff);
}
3. 编写Mapper文件 (Staff_Mapper.xml)
然后,我们创建对应的Mapper XML文件,定义具体的SQL语句
XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.easy.dao.IStaffDao">
<!-- 在这里写SQL语句-->
<select id="getNow" resultType="string">
select now()
</select>
<!-- 预编译# 将SQL语句的语义确定,之后无论传递任何参数都不会改变SQL语句语义,可以有效防止SQL注入
也可以加快批处理的效率-->
<insert id="addStaff">
insert into staff(code,name,salary,username,userpass)
value(#{code},#{name},#{salary},#{username},#{userpass})
</insert>
<delete id="delStaff">
delete from staff where id=#{id}
</delete>
<update id="editStaff">
update staff set name=#{name},salary=#{salary},username=#{username},userpass=#{userpass} where id=#{id}
</update>
</mapper>
4. 创建控制器类 (Controller) (EasyController.java)
最后,我们创建一个控制器类EasyController,用来处理HTTP请求,并通过注入IStaffDao来完成实际的数据操作。
java
package com.easy.controller;
import com.easy.bean.Staff;
import com.easy.dao.IStaffDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController
public class EasyController {
@Autowired
IStaffDao dao;
@GetMapping("now")
public String now(){
return dao.getNow();
}
@PostMapping("staff")
public String addStaff(Staff staff){
// Staff staff=new Staff();
// staff.setCode("10001");
// staff.setName("何容与");
// staff.setSalary(new BigDecimal(10000));
// staff.setUsername("hry");
// staff.setUserpass("123456");
dao.addStaff(staff);
return "添加成功";
}
@DeleteMapping("staff/{id}")
public String delStaff(@PathVariable int id){
dao.delStaff(id);
return "删除成功";
}
@PutMapping("staff")
public String editStaff(Staff staff){
dao.editStaff(staff);
return "修改成功";
}
}