当前位置:   article > 正文

java笔记 mybatis 基本增删改

java笔记 mybatis 基本增删改

搭建mybatis

在pom.xml文件中添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

配置数据源

新建一个application.yml文件

# 注释 springboot主配置文件
#yml基本语法
student:
  name: zhangsan
  sex: nan
spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/easydata
#配置mybatis的数据源 DataSource

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,以便在调试时输出更多详细信息。 

ROM

ORM (Object Relational Mapping) 是一种编程技术,用于实现面向对象编程语言与关系型数据库之间的数据转换。ORM 的主要目的是允许开发人员以面向对象的方式操作数据库,而不需要直接编写 SQL 语句。

ORM 的关键概念包括:

  1. 对象与表的映射

    • 类映射到数据库表。
    • 对象实例映射到表中的行。
    • 类属性映射到表中的列。
  2. 常见 ORM 框架

    • Hibernate:是一个全功能的 ORM 解决方案,支持多种查询方式,如 HQL (Hibernate Query Language) 和 Criteria API。
    • MyBatis:提供基于 SQL 的映射,适合需要高度定制 SQL 的情况。
    • Spring Data JPA:是 Spring Framework 的一部分,提供了一种简单的方法来访问数据库,基于 Java Persistence API (JPA)。

$和#的区别

<!--#与$区别
     拼接字符串
     #{} 预编译,-->
<!--    预编译
   # 将SQL语句的语义确定之后,无论传递任何参数都不会改变SQL语句语义,
      可以有效防止AQL注入也可以加快批处理的效率-->

$ 符号

当使用 $ 符号时,MyBatis 会将参数值直接插入到 SQL 语句中。这种方式类似于传统的字符串拼接方法,即使用 ${} 表达式。

<select id="selectUser" parameterType="int" resultType="User"> SELECT * FROM user WHERE username = ${username} </select>

这种情况下,如果 username 的值为 'admin',生成的 SQL 将是:

SELECT * FROM user WHERE username = 'admin'

使用 $ 符号的主要问题在于它不会对输入值进行预编译,因此容易导致 SQL 注入攻击。

# 符号

当使用 # 符号时,MyBatis 会将参数值以预编译参数的方式插入到 SQL 语句中。这种方式使用 ${}#{} 表达式,并且更安全。

<select id="selectUser" parameterType="int" resultType="User"> SELECT * FROM user WHERE username = #{username} </select>

这种情况下,如果 username 的值为 'admin',生成的 SQL 将是:

SELECT * FROM user WHERE username = ?

并且 username 的值 'admin' 会被作为预编译参数传递给数据库。这有助于防止 SQL 注入攻击,并提高 SQL 语句执行的效率。

增删改

步骤:

1. 创建数据模型类 (Staff.java)
首先,我们创建一个数据模型类,也就是实体类Staff,它对应数据库中的Staff表。

  1. package com.easy.bean;
  2. import org.springframework.core.SpringVersion;
  3. import java.math.BigDecimal;
  4. public class Staff {
  5. private int id;
  6. private String code;
  7. private String name;
  8. private BigDecimal salary;
  9. private String username;
  10. private String userpass;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getCode() {
  18. return code;
  19. }
  20. public void setCode(String code) {
  21. this.code = code;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public BigDecimal getSalary() {
  30. return salary;
  31. }
  32. public void setSalary(BigDecimal salary) {
  33. this.salary = salary;
  34. }
  35. public String getUsername() {
  36. return username;
  37. }
  38. public void setUsername(String username) {
  39. this.username = username;
  40. }
  41. public String getUserpass() {
  42. return userpass;
  43. }
  44. public void setUserpass(String userpass) {
  45. this.userpass = userpass;
  46. }
  47. }

2. 创建数据访问对象接口 (IStaffDao.java)

接着,我们创建一个DAO接口IStaffDao,它定义了对Staff表的操作方法,增删改。

  1. package com.easy.dao;
  2. import com.easy.bean.Staff;
  3. import org.apache.ibatis.annotations.Mapper;
  4. @Mapper
  5. public interface IStaffDao {
  6. String getNow();
  7. int addStaff(Staff staff);
  8. int delStaff(int id);
  9. int editStaff(Staff staff);
  10. }

3. 编写Mapper文件 (Staff_Mapper.xml)


然后,我们创建对应的Mapper XML文件,定义具体的SQL语句。如果SQL语句直接在接口中定义也可以省略此步。注意:如果你在IStaffDao接口中使用的注解来编写SQL语句,则可以省略这个XML文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.easy.dao.IStaffDao">
  6. <!-- 在这里写SQL语句-->
  7. <select id="getNow" resultType="string">
  8. select now()
  9. </select>
  10. <insert id="addStaff">
  11. insert into staff(code,name,salary,username,userpass)
  12. value(#{code},#{name},#{salary},#{username},#{userpass})
  13. </insert>
  14. <delete id="delStaff">
  15. delete from staff where id=#{id}
  16. </delete>
  17. <update id="editStaff">
  18. update staff set name=#{name},salary=#{salary},username=#{username},userpass=#{userpass} where id=#{id}
  19. </update>
  20. <!-- 预编译
  21. # 将SQL语句的语义确定之后,无论传递任何参数都不会改变SQL语句语义,
  22. 可以有效防止AQL注入
  23. 也可以加快批处理的效率-->
  24. <!--#与$区别
  25. 拼接字符串
  26. #{} 预编译,-->
  27. </mapper>


4. 创建控制器类 (Controller) (EasyController.java)
最后,我们创建一个控制器类EasyController,用来处理HTTP请求,并通过注入IStaffDao来完成实际的数据操作。
 

  1. package com.easy.controller;
  2. import com.easy.bean.Department;
  3. import com.easy.bean.Staff;
  4. import com.easy.dao.IStaffDao;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.*;
  7. import java.math.BigDecimal;
  8. @RestController
  9. public class EasyController {
  10. @Autowired
  11. IStaffDao dao;
  12. @GetMapping("now")
  13. public String now(){
  14. return dao.getNow();
  15. }
  16. @PostMapping("staff")
  17. public String addStaff(Staff staff){
  18. // Staff staff=new Staff();
  19. // staff.setCode("1001");
  20. // staff.setName("李思思");
  21. // staff.setSalary(new BigDecimal(2000));
  22. // staff.setUsername("lisisi");
  23. // staff.setUserpass("1234");
  24. dao.addStaff(staff);
  25. return "添加成功";
  26. }
  27. @DeleteMapping("staff/{id}")
  28. public String delStaff(@PathVariable int id){
  29. dao.delStaff(id);
  30. return "删除成功";
  31. }
  32. @PutMapping("staff")
  33. public String editStaff(Staff staff){
  34. dao.editStaff(staff);
  35. return "修改成功";
  36. }
  37. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/946885
推荐阅读
相关标签
  

闽ICP备14008679号