package com.example.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
@Configuration
public class MybatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource)
throws Exception {
System.out.println("datasource configuration");
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
// mappers 위치 설정
Resource[] arrResource = new PathMatchingResourcePatternResolver()
.getResources("classpath:/mappers/*Mapper.xml");
sqlSessionFactoryBean.setMapperLocations(arrResource);
return sqlSessionFactoryBean.getObject();
}
}
example > confing > MybatisConfig.java
resources > mappers > memberMapper.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="Member">
<select id="selectMemberOne"
parameterType="String"
resultType="com.example.dto.MemberDTO">
SELECT M.* FROM MEMBER M WHERE M.UEMAIL=#{uemail}
</select>
<select id="selectMemberList"
resultType="com.example.dto.MemberDTO">
SELECT M.*,
TO_CHAR(UREGDATE, 'YYYY-MM-DD') UREGDATE1
FROM MEMBER M
</select>
<!-- parameter 타입이 없으면 안보내도 된다 -->
<insert id = "insertMemberOne"
parameterType="com.example.dto.MemberDTO">
INSERT INTO MEMBER( UEMAIL, UPW, UNAME, UPHONE, UROLE)
VALUES(#{uemail},#{upw},#{uname},#{uphone},#{urole})
</insert>
<delete id="deleteMemberOne"
parameterType="String">
DELETE FROM MEMBER WHERE UEMAIL=#{uemail}
</delete>
<update id="updateMemberOne"
parameterType="com.example.dto.MemberDTO">
UPDATE member SET UEMAIL=#{uemail}, UPW=#{upw},
UNAME=#{uname}, UPHONE=#{uphone}, UROLE=#{urole} WHERE UEMAIL=#{uemail}
</update>
</mapper>
칼럼명 = #{dto에서 매치할 변수 이름}
아이디는 중복되면 안된다.
parameterType은 클래스 타입이면 파일 위치, String이면 String
받는 게 없으면 작성하지 않아도 된다.
resultType도 마찬가지
사용을 위해 Autowired해준다.
@Override
public int insertMember(MemberDTO member) {
// namespace가
return sqlFactory.openSession().insert("Member.insertMemberOne", member);
}
@Override
public int updateMember(MemberDTO member) {
return sqlFactory.openSession().update("Member.updateMemberOne", member);
}
@Override
public List<MemberDTO> selectMemberList() {
return sqlFactory.openSession().selectList(
"Member.selectMemberList");
}