> Java > java지도 시간 > 본문

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

WBOY
풀어 주다: 2023-05-20 10:07:41
앞으로
1421명이 탐색했습니다.

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

위 그림과 같이 아이디어에 중요한 7개의 모듈을 구축해보겠습니다

(1) 컨트롤러 패키지: SpringMVC에 대해 공부했거나 알고 있다면 컨트롤러가 컨트롤 레이어라는 것을 알아야 합니다. 이는 브라우저 정보를 수신하고 관련 정보를 전송하기 위해 응답하는 장소와 동일합니다. 특히, 브라우저에서 정보를 수신하는 방법과 정보에 응답하는 방법을 이해하기 위해 컴퓨터 네트워크 관련 지식도 결합합니다. 관련 데이터 조작 구현 (오랫동안 웹 프로그래밍을 가르쳐 주신 대학원 선배님에게 특별한 감사의 말씀을 전하고 싶습니다. 덕분에 많은 도움이 되었습니다. 관련 시간을 활용하여 더 많은 정보를 확인하시기 바랍니다.
(2) 엔터티 패키지: 여기에 저장됩니다. 단순히 Java에서 클래스를 만드는 방법을 배우는 것과 똑같습니다.
(3) 매퍼 패키지라고 합니다. SpringMVC의 지속성 레이어(DAO 레이어(데이터 액세스 객체))는 여기에서 찾을 수 있습니다. 데이터베이스를 직접 운영하며 일반적으로 다섯 번째 패키지인 매핑 패키지와 함께 사용됩니다.
(4) 서비스 패키지: 비즈니스 로직이라고 합니다. Spring MVC의 레이어이므로 여기에 저장된 클래스는 모두 관련 비즈니스 로직 처리와 관련되어 있습니다.
(5) 매핑 패키지: 리소스 아래에 클래스 경로로 넣고 mybatis 파일을 저장합니다. 이제 SpringBoot는 매우 통합되어 있으므로 많은 구성 파일을 넣을 수 있습니다. 마이바티스 파운데이션이 많지 않은 친구들도 함께 배울 수 있습니다. 매퍼 패키지와 매핑 패키지를 함께 사용하는 이유는 매핑 관계를 형성하고, 데이터베이스 파일에 액세스하기 위해 함께 사용되기 때문입니다.
(6) application.yml: 전역 기본 구성 파일로 적용됩니다. 많은 구성 정보를 전체 프로젝트에 통합하려면 이 구성 파일이 반드시 필요합니다. 작성이 비교적 간단하고 명확하기 때문에 여기에서 구성 파일을 작성하려면 yaml 언어를 사용하는 것이 가장 좋습니다. application-dev.yml: 특정 환경의 구성 파일을 실제 프로젝트와 결합해야 하는 것으로 간주됩니다. 프로젝트 자체가 개발 환경일 뿐만 아니라 테스트, 프로덕션 등 일련의 환경이기 때문입니다. 개발을 할 때는 개발 환경을 사용하여 application-dev.yml을 구성하고, 테스트를 할 때는 테스트 환경을 사용하여 application-test.yml을 구성합니다. pro.yml. 현재는 개발 환경에 대해서만 이야기하고 있으므로 하나의 구성 파일인 application-dev.yml만 사용합니다. 특정 환경 구성 정보는 사용 시 application.yml의 기본 구성을 재정의하므로 기본 구성 문과 환경 구성 문 간의 충돌을 걱정할 필요가 없습니다.

(1) 프로그램 입구

모든 Java 프로그램에는 프로그램 입구가 있습니다. SpringBoot를 초기화할 때 DemoApplication 자체가 이미 존재합니다. 여기서는 너무 많은 구성을 수행할 필요가 없습니다.

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
로그인 후 복사

● @SpringBootApplication 주석: springboot 프로젝트의 시작 항목 클래스임을 나타내는 데 사용됩니다. 목적은 자동 구성을 활성화하는 것입니다(실제로는 Configuration 구성 클래스에서 상속됩니다. 이해하려면

●@MapperScan("com.example.demo.mapper")은 매퍼 파일을 스캔하고 관련 데이터베이스 파일 URL 매핑에 효과적으로 액세스하는 것입니다(이 주석은 매우 유용합니다! )

(2) 데이터베이스 파일 생성

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

●해당 sql 생성 테이블 문은 다음과 같습니다.

CREATE TABLE `water` (
  `id` int NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `salary` double(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;
로그인 후 복사

(3) User 엔터티 클래스 생성

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

package com.example.demo.entity;

/**
 * @description:    实体类
 * @author: Fish_Vast
 * @Date: 2021/8/25
 * @version: 1.0
 */
public class User {
    private String name;
    private Integer id;
    private Double salary;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", salary=" + salary +
                '}';
    }
}
로그인 후 복사

● 이에 익숙하므로 순수 Java를 기반으로 작성될 수 있습니다. 클래스는 세 개의 전용 속성, null 매개변수 생성자, 해당 get 및 set 메서드를 생성하고 toString() 메서드도 재정의합니다. 여기서 주목할 만한 점은 속성을 선언할 때 래퍼 클래스를 사용하여 선언하는 것이 가장 좋다는 것입니다.

●Java에서 mybatis 관련 읽기 및 입력 시 기본 데이터 유형 대신 패키징 클래스를 사용하려는 이유는 무엇입니까?
① MySQL에서 필드에 값이 할당되지 않은 경우 기본값은 null입니다. 데이터베이스에서 확인하면 해당 Java 코드에서 필드가 int 유형인 경우 null이 int에 해당할 수 없습니다. type은 int가 기본 데이터 유형을 나타내기 때문에 기본 숫자만 될 수 있습니다.
②엔터티 클래스의 속성에는 값을 할당할 수도 있고 할당하지 않을 수도 있습니다. 예를 들어 int의 기본값은 0입니다. 그러나 값을 0으로 적극적으로 설정하는 것과 기본값 0을 설정하는 것은 서로 다른 개념입니다. 예를 들어, 수업의 점수: 0은 특정 학생의 점수가 0점임을 의미하고, null은 해당 학생이 시험에서 점수가 없음을 의미합니다. 이는 서로 다른 개념입니다.

(4)建立UserMapper接口

Java에서 SpringBoot의 기본 추가, 삭제, 수정 및 쿼리를 구현하는 방법

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {
    //1.通过id查询用户信息
    User getUser(int id);
    //2.通过id删除用户信息
    int delete(int id);
    //3.更改用户信息
    int update(User user);
    //4.插入用户信息
    int save(User user);
    //5.查询所有用户信息
    List<User> selectAll();
}
로그인 후 복사

●@Repository,注解它本身的作用便是标注数据访问组件,作为DAO对象,它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。通过这个注解能够报出更多发现不了的错误,更有利于对项目的维护和开发。其实@Repository不在接口上进行注明,我们的程序照样可以运行,因为在我们使用@MapperScan的时候,我们已经将我们的接口交给框架中的代理类,所以即便是我们不写,程序不会报错,只是我们在Service层写明接口的时候,IDEA会给出红色的波浪线。可以这样理解,标注@Repository是为了告诉编译器我将接口注入到了IoC容器了,你不要报错啦~
●相应地,写出增删查改和查询全部信息的五个方法。

(5)配置UserMapper.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.example.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="salary" jdbcType="DOUBLE" property="salary" />
    </resultMap>
    <!--查询用户信息-->
    <select id="getUser" resultType="com.example.demo.entity.User">
        select * from water where id = #{id}
    </select>
    <!--删除用户信息-->
    <delete id="delete" parameterType="int">
        delete from water where id=#{id}
    </delete>
    <!--返回所有用户信息-->
    <select id="selectAll"  resultType="com.example.demo.entity.User">
        select * from water
    </select>

    <!--增加用户信息-->
    <insert id="save" parameterType="com.example.demo.entity.User" >
        insert into water
        <trim prefix="(" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                id,
            </if>
            <if test="name != null" >
                name,
            </if>
            <if test="salary != null" >
                salary,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides="," >
            <if test="id != null" >
                #{id,jdbcType=INTEGER},
            </if>
            <if test="name != null" >
                #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                #{salary,jdbcType=DOUBLE},
            </if>
        </trim>
    </insert>

    <!--根据id更改用户信息-->
    <update id="update" parameterType="com.example.demo.entity.User">
        update water
        <set >
            <if test="name != null" >
                name = #{name,jdbcType=VARCHAR},
            </if>
            <if test="salary != null" >
                salary = #{salary,jdbcType=DOUBLE},
            </if>
        </set>
        where id = #{id,jdbcType=INTEGER}
    </update>
</mapper>
로그인 후 복사

●mapper namespace用于绑定mapper接口的,当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句(通过mapper方法名进行绑定);
●resultMap 定义了一个id为BaseResultMap的标识,type代表使用哪种类作为我们所要映射的类;