1. JSTL Function
JSTL Function은 JSTL의 일부로, 문자열 처리와 컬렉션 조작을 위한 함수들을 제공한다.
💡 주요 특징
- 문자열 조작, 길이 계산, 부분 문자열 추출 등의 기능을 제공한다.
- JSP 페이지에서 Java 메소드를 직접 호출하지 않고도 복잡한 연산을 수행할 수 있게 한다.
- EL과 함께 사용하여 뷰 로직을 간결하게 만든다.
📌 자주 사용되는 JSTL 함수
함수 | 설명 |
fn:length() | 컬렉션이나 문자열의 길이를 반환 |
fn:toLowerCase() | 문자열을 소문자로 변환 |
fn:toLowerCase() | 문자열을 대문자로 변환 |
fn:substring() | 문자열의 일부분 추출 |
fn:substring() | 문자열 내의 특정 부분을 다른 문자열로 대체 |
fn:contains() | 문자열이 특정 부분 문자열을 포함하는지 확인 |
JSTL function 정리
프로그래밍 언어에서는 개발자의 편의를 위해 몇가지 기본적인 함수를 제공하는데, JSTL에서도 마찬가지로 우리가 흔히 사용하는 substring, trim 등과 같은 함수를 제공한다. 오늘은 jstl에서 사용이
fruitdev.tistory.com
- 참고 : fruitdev
2. MyBatis
- 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.
- SQL, 동적 쿼리, 저장 프로시저 그리고 고급 매핑을 지원하는 SQL Mapper이다.
- MyBatis는 JDBC를 통해 RDBMS에 액세스 하는 작업을 캡슐화하고 기존 JDBC의 중복작업을 간소화해 준다.
- XML 파일의 형태인 Mapper를 통해 프로그램 코드로부터 SQL 쿼리가 분리되는 환경을 제공하고
Java 객체와 매핑하는 작업을 도와준다.
💡 주요 특징
- 기존 JDBC보다 사용하기 편리하다.
수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거할 수 있다.
또, JDBC는 세부적인 작업이 가능하게 작업별로 각각의 메소드를 호출하게 된다.
이러한 사항들은 다수의 메소드를 호출하고 관련된 객체를 해제해야 하는 단점이 있다.
기존 JDBC를 이용하여 프로그래밍을 하는 방식은 프로그램 소스 안에 SQL문을 작성하는 방식으로
생산성이 좋지 않다. JDBC의 모든 기능을 Mybatis가 대부분 제공한다. - SQL문과 프로그래밍 코드의 분리로 이식성이 좋다.
SQL을 별도의 파일로 분리해서 관리하게 해 준다.
SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일하지 않아도 된다. - 간단하다.
Spring 연동 모듈을 제공해 주기 때문에 Spring 설정이 간단하다.
객체 프로퍼티로 파라미터와 결과를 객체(DTO, Map 등)로 자동 매핑을 지원한다. - 다양한 프로그래밍 언어로 구현이 가능하다.
Java, C#, .NET, Ruby
📌 자주 사용되는 MyBatis 요소
요소 | 설명 |
<select> | SELECT 쿼리 정의 |
<insert> | INSERT 쿼리 정의 |
< update > | UPDATE 쿼리 정의 |
<delete> | DELETE 쿼리 정의 |
<if> | 조건부 SQL 구문 |
<foreach> | 컬렉션을 순회하며 SQL 작성 |
#[] | 파라미터 바인딩 |
💻 예시 코드
1. 기본 SELECT 쿼리
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
2. INSERT 쿼리
<insert id="insertUser" parameterType="User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
3. UPDATE 쿼리
<update id="updateUser" parameterType="User">
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
4. DELETE 쿼리
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
5. 동적 SQL(조건부 쿼리)
<select id="findUsers" parameterType="map" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name LIKE #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
6. foreach를 이용한 IN절
<select id="getUsersInList" parameterType="list" resultType="User">
SELECT * FROM users WHERE id IN
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
7. 결과 매핑
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<result property="email" column="user_email"/>
</resultMap>
<select id="getUser" resultMap="userResultMap">
SELECT user_id, user_name, user_email FROM users WHERE user_id = #{id}
</select>
8. 저장 프로시저 호출
<select id="getUserCount" statementType="CALLABLE">
{call get_user_count(
#{count,mode=OUT,jdbcType=INTEGER}
)}
</select>
9. SQL 조각 재사용
<sql id="userColumns">
id, name, email
</sql>
<select id="getUsers" resultType="User">
SELECT <include refid="userColumns"/> FROM users
</select>
[MyBatis] MyBatis란? 개념 및 구조
Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.
velog.io
- 참고 : yunSeok
JPA vs Mybatis, 현직 개발자는 이럴 때 사용합니다. I 이랜서 블로그
서버에서 데이터 베이스를 효율적으로 사용하기 위해 사용하는 JPA와 Mybatis를 실무에서는 언제 어떻게 사용할까요? 이랜서에서 알려드립니다. I 소트프웨어, 소프트웨어 개발자, 네이버 소프트
www.elancer.co.kr
- 참고 : http://www.elancer.co.kr
3. MyBatis Annotation
MyBatis Annotation은 XML 설정 대신 Java 코드에 직접 SQL 매핑을 정의할 수 있게 해주는 기능이다.
주로 간단한 쿼리나 소규모 프로젝트에서 사용된다.
💡 주요 어노테이션
- @Select
SELECT 쿼리 - @Insert
INSERT 쿼리 - @Update
UPDATE 쿼리 - @Delete
DELETE 쿼리 - @Results
결과 매핑 - @Result
개별 컬럼 매핑
💻 예시 코드
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
@Results({
@Result(property = "userId", column = "id"),
@Result(property = "userName", column = "name"),
@Result(property = "userEmail", column = "email")
})
User getUserById(int id);
@Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUser(User user);
}
🌊 코드 흐름
1️⃣ 인터페이스 정의
- @Mapper 어노테이션은 이 인터페이스가 MyBatis 매퍼임을 나타낸다.
- Spring과 함께 사용할 때, 이 어노테이션이 붙은 인터페이스를 자동으로 감지하고 구현체를 생성한다.
2️⃣ getUserById 메소드
- @Select 어노테이션은 SELECT 쿼리를 정의한다.
- #{id}는 메소드 파라미터의 id 값을 SQL에 바인딩한다.
- @Results는 쿼리 결과를 User 객체에 매핑하는 방법을 정의한다.
- 각 @Result는 데이터베이스 컬럼을 Java 객체의 속성에 매핑한다.
3️⃣ insertUser 메소드
- @Insert 어노테이션은 INSERT 쿼리를 정의한다.
- #{name}과 #{email}은 User 객체의 속성 값을 SQL에 바인딩한다.
- @Options(useGeneratedKeys = true, keyProperty = "id")는 자동 생성된 키
(ex : auto-increment ID)를 User 객체의 id 속성에 설정하도록 지시한다.
🌊 실행 흐름
1️⃣ getUserById 호출 시
- 애플리케이션이 userMapper.getUserById(1)과 같이 메소드를 호출한다.
- MyBatis는 @Select 어노테이션의 SQL을 실행한다.
- 쿼리 결과를 받아 @Results 정의에 따라 User 객체에 매핑한다.
- 매핑된 User 객체가 반환된다.
2️⃣ insertUser 호출 시
- 애플리케이션이 userMapper.insertUser(new User("John", "john@example.com"))과 같이
메소드를 호출한다. - MyBatis는 @Insert 어노테이션의 SQL을 실행한다.
- SQL 실행 후, 자동 생성된 ID가 User 객체의 id 속성에 설정된다.
삽입된 행의 수(보통 1)가 반환된다.
MyBatis 매퍼 인터페이스와 어노테이션 실습 : Mybatis (4)
MyBatis에서 XML파일을 사용하지않고 매퍼 인터페이스와 어노테이션으로 구성하는 방법에대해 간단한 예제로 살펴봅니다.
sirobako.co.kr
- 참고 : sirobako.co.kr
4. Library, Framework 차이
1️⃣ Library
Library는 특정 기능을 수행하는 코드의 집합으로, 재사용 가능한 함수나 클래스들을 모아놓은 것이다.
💡 주요 특징
- 특정 작업을 수행하는 도구로 사용된다.
- 애플리케이션에 포함되어 특정 기능을 제공한다.
- 개발자가 필요한 부분만 선택적으로 사용할 수 있다.
- 애플리케이션의 전체 구조에 영향을 미치지 않는다.
📌 자주 사용되는 Java 라이브러리 예시
라이브러리 | 주요 기능 |
Apache Commons | 문자열 처리, 파일 IO, 컬렉션 유틸리티 |
Gson | JSON 파싱 및 생성 |
Log4j | 로깅 |
JUnit | 단위 테스트 |
Mockito | 목 객체 생성 및 테스트 |
2️⃣ Framework
Framework는 애플리케이션 개발을 위한 골격이나 기반 구조를 제공하는 소프트웨어이다.
💡 주요 특징
- 애플리케이션의 아키텍처를 제공한다.
- 개발 프로세스를 표준화하고 생산성을 향상시킨다.
- 제어의 역전(IoC) 원칙을 따르는 경우가 많다.
- 확장성과 유지보수성을 높여준다.
📌 자주 사용되는 Java 프레임워크 예시
프레임워크 | 주요 기능 |
Spring | DI, AOP, 트랜잭션 관리, MVC |
Hibernate | ORM, 데이터베이스 추상화 |
Struts | ORM, 데이터베이스 추상화 |
JavaServer Faces | 컴포넌트 기반 UI 개발 |
Play Framework | 반응형 웹 애플리케이션 개발 |
프레임워크(Framework)와 라이브러리(Library)의 차이점
1. 프레임워크(Framework)란? 개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 라이브러리 형
sharonprogress.tistory.com
- 참고 : sharonprogress
'에이콘아카데미 회고 > 5회차) 자바기반 풀스택 개발자 양성과정' 카테고리의 다른 글
Spring, Spring Boot) 55번째 회고 (0) | 2024.07.06 |
---|---|
MVC) 54번째 회고 (0) | 2024.07.06 |
EL, JSTL) 52번째 회고 (0) | 2024.07.06 |
JAVA, SQL) 51번째 회고 (0) | 2024.07.06 |
CSS, JSP) 50번째 회고 (0) | 2024.07.06 |