
namespace는 인터페이스 풀네임(패키지 + 클래스명) 으로 지정한다. 역할
생성
Environment env = new Environment(
"dev", // 환경 이름
new JdbcTransactionFactory(), // 트랜잭션 매니저
new PooledDataSource(DRIVER, URL, USER, PASSWORD) // 커넥션풀
);
키워드
역할
사용
Configuration config = new Configuration(env);
config.addMapper(Mapper.class);
키워드
addMapper(인터페이스.class) : Mapper 인터페이스를 설정에 등록sqlSession.getMapper(Mapper.class)로 사용역할
생성
SqlSessionFactory factory =
new SqlSessionFactoryBuilder().build(configuration);
암기 포인트
SqlSessionFactory는 애플리케이션 전체에서 한 번만 생성(싱글톤)
Builder는 “공장 만드는 도구”라 매번 new해도 됨
build() 인자로:
역할
selectOne, selectList, insert, update, delete 메서드 제공생성
SqlSession sqlSession = sqlSessionFactory.openSession(false);
암기 포인트
openSession(false) : auto-commit 끄고, Service에서 직접 commit/rollbackclose()주요 메서드
selectOne(statement, param)selectList(statement, param)insert/update/delete(statement, param) → 반환값: 영향받은 행 수(int)역할
형태
<properties resource="config/connection-info.properties"/>
사용
${driver}, ${url}, ${username}, ${password} 식으로 참조역할
자주 쓰는 것
mapUnderscoreToCamelCase : menu_name → menuName 자동 매핑jdbcTypeForNull : NULL 처리 방식예시
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
역할
형태
<typeAliases>
<typeAlias type="com.example.Member" alias="Member"/>
</typeAliases>
효과
resultType="com.example.Member" 대신 resultType="Member" 로 사용 가능역할
형태(프로퍼티 직접)
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
...
</dataSource>
</environment>
</environments>
형태(프로퍼티 파일 사용)
<properties resource="config/connection-info.properties"/>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
...
</dataSource>
</environment>
</environments>
키워드
역할
형태
<mappers>
<mapper resource="member/model/mapper/member-mapper.xml"/>
</mappers>
여러 방식
resource : 클래스패스 기준 XMLurl : 절대경로class : Mapper 인터페이스package : 패키지 단위 스캔<typeHandler> : DB 타입 ↔ 자바 타입 커스텀 매핑 (예: ENUM, 암호화/복호화)<objectFactory> : 결과 객체 생성 방식 커스터마이징<plugins> : AOP처럼 쿼리 실행 과정에 끼어들어 로그/검증 등 부가기능 구현역할
사용
Mapper mapper = sqlSession.getMapper(Mapper.class);
Date date = mapper.selectSysdate();
역할
<resultMap>을 자바 어노테이션으로 표현한 것예시
@Results(id = "menuResultMap", value = {
@Result(id = true, property = "code", column = "MENU_CODE"),
@Result(property = "name", column = "MENU_NAME"),
...
})
포인트
역할
예시
@Select("""
SELECT
MENU_CODE
, MENU_NAME
FROM TBL_MENU
WHERE MENU_CODE = #{code}
""")
@ResultMap("menuResultMap")
MenuDTO selectMenuByCode(int code);
포인트
namespace = 인터페이스 풀클래스명id = 인터페이스 메서드 이름역할
형태
<resultMap id="resultMember" type="Member">
<id property="userId" column="USER_ID"/>
<result property="password" column="PASSWORD"/>
</resultMap>
역할
핵심 속성
파라미터 바인딩
#{field} : PreparedStatement의 ?와 동일, 안전 (권장)${field} : 문자열 그대로 치환 (SQL 인젝션 위험)역할
포인트
#{필드명} 바인딩역할
기본 동작
역할
예시
<sql id="columns">
MENU_CODE, MENU_NAME, MENU_PRICE
</sql>
<select id="selectSqlTest" resultMap="menuResultMap2">
SELECT
<include refid="columns"/>
FROM TBL_MENU
</select>
개념
연동 규칙
결과
getMapper(인터페이스.class)로 호출하면key=value 형태로 문자열 설정을 관리하는 자바 클래스.properties 파일로 분리해서 관리할 때 사용예시
Properties props = new Properties();
// props.load(inputStream);
String url = props.getProperty("url");