JDBC, MyBatis, JPA, SpringBootJpa 모두 데이터베이스와 연결하여 작동하는 프레임워크.

1.MyBatis 연결

@Repository
@Mapper -->**해당 레포지토리를 mybatis레포지토리로 만드는 어노테이션.**
public interface MemberMyBatisRepository {

**-->기존 서비스 계층에 있던 매서드를 정의했다.
클래스 파일이 아닌 인터페이스 파일이니까 메서드만 정의하고 {}구현 부분은 필요없다.
mybatis레포지토리는 db와 작용해야하므로 밑의 내용들은 결국 db로부터 데이터를 추가하거나 조회
하는 기능이므로 sql문으로 작성해야한다.
그리고 mybatis는 이 sql문을 mapper.xml파일에 작성해야한다.**

     List<Member> findAll();

     Optional<Member> findById(Long id);

     Optional<Member> findByEmail(String email);

     void save(Member member);
}

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.beyond.basic.b2_board.repository.MemberMyBatisRepository">
-->이 mapper파일(쿼리파일)이 어떤 레포지토리와 연결되있는지를 명시한다.
    <insert id="save" parameterType="com.beyond.basic.b2_board.domain.Member">
        insert into member(name, email, password) values(#{name},#{email},#{password});
    </insert>
    -->각 쿼리 태그에 id옵션을 붙여 myBaris레포지토리의 어떤 메서드와 매칭되는지를 명시해야한다.
    또한, parameter Typew은 아래의 #{}변수가 어떤 객체의 필드인지 해당 객체(클래스)파일의 위치를 명시한다.
    
    <select id="findAll" resultType="com.beyond.basic.b2_board.domain.Member">   
        select * from member;
    </select>
     -->findAll메서드는 db에서 조회해서 멤버를 리턴해야한다. 여기서 resultType은 해당 리턴타입을 알려주는 것
    
    <select id="findById" resultType="com.beyond.basic.b2_board.domain.Member">
        select * from member where id = #{id};
    </select>
    -->리턴타입은 옵셔널<멤버> 이지만 멤버클래스만 명시하면 자동으로 프로그램에서 옵셔널로 감싼다.
    
    <select id="findByEmail" resultType="com.beyond.basic.b2_board.domain.Member">
        select * from member where email = #{email};
    </select>

</mapper>

---->차례대로 인터페이스의 save,findAll,findById,findByEmail을 구현한다.
이때 save메서드는 회원가입으로 받은 데이터를 db에 저장해야하니까 insert 쿼리,
나머지는 모두 db로부터 데이터를 조회해야하니까 select쿼리 이다. 
xml문에서 변수는 #{}이다.**

2.스프링데이터JPA

어노테이션