implementation 'org.mybatis:mybatis:3.5.16'//mybatis
implementation 'org.mybatis:mybatis-spring:3.0.3' //mybatis spring
AppCtx
@Configuration
@EnableTransactionManagement //세팅자동화
@MapperScan("mappers") //메퍼스캔
public class AppCtx {
@Bean(destroyMethod = "close")
public DataSource dataSource() {
DataSource ds = new DataSource();
/* DB 연결 설정 S */
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
ds.setUsername("SPRING");
ds.setPassword("oracle");
/* DB 연결 설정 E */
/* 커넥션 풀 설정 S */
ds.setTestWhileIdle(true); // 유휴 객체 유효성 체크
ds.setInitialSize(2);
ds.setMaxActive(10);
ds.setTimeBetweenEvictionRunsMillis(10 * 1000); // 10초에 한번씩 연결 상태 체크
ds.setMinEvictableIdleTimeMillis(1000 * 60); // 유휴 객체 생존 시간 1분
/* 커넥션 풀 설정 E */
return ds;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource()); //설정값
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject(); //세션객체 생성
return sqlSessionFactory;
}
}
logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d %5p %c{2} - %m%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="stdout" />
</root>
<logger name="org.springframework.jdbc" level="TRACE" />
<logger name="mappers" level="DEBUG" />
</configuration>
MemberMapper
public interface MemberMapper {
@Select("SELECT COUNT(*) FROM MEMBER")
long getTotal();
}
Test
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = AppCtx.class)
public class Ex03 {
@Autowired
private MemberMapper memberMapper;
@Test
void test1(){
long total = memberMapper.getTotal();
System.out.println(total);
}
}
public interface MemberMapper {
@Select("SELECT COUNT(*) FROM MEMBER")
long getTotal();
int register(Member member);
Member get(String email);
int exists(String email);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mappers.member.MemberMapper">
<resultMap id="memberMap" type="member.entities.Member">
<result column="SEQ" property="seq"/>
<result column="EMAIL" property="email"/>
<result column="PASSWORD" property="password"/>
<result column="USER_NAME" property="userName"/>
<result column="REG_DT" property="regDt"/>
</resultMap>
<insert id="register" >
INSERT INTO MEMBER(SEQ, EMAIL, PASSWORD, USER_NAME, REG_DT)
VALUES (SEQ_MEMBER.NEXTVAL, #{email}, #{password}, #{userName})
</insert>
<select id="get" resultMap="memberMap">
SELECT SEQ, EMAIL, PASSWORD, USER_NAME, REG_DT, FROM MEMBER
WHERE EMAIL = #{email}
</select>
<select id="exists" resultType="int">
SELECT COUNT(*) FROM MEMBER WHERE EMAIL = #{email}
</select>
</mapper>