본문 바로가기
KOSTA교육/수업

[50/100] 240625

by 이원혁 2024. 6. 25.
반응형

Mybatis + spring

 

mybatis 의존성 추가.

 

기존에 mybatis에서 session과 dao를 사용했었지만 spring과 결합되면서

public class UserDao {
    private SqlSession sqlSession;

    public UserDao(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List<User> findAllUsers() {
        return sqlSession.selectList("com.example.mapper.UserMapper.findAllUsers");
    }
}

기존에 사용하던 이런 dao가

package com.example.mapper;

import java.util.List;
import com.example.model.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT * FROM USERS")
    List<User> findAllUsers();
}

mybatis mapper로 변경된다.

 


또한 기존에는

<configuration>
    <typeAliases>
        <typeAlias alias="User" type="com.example.model.User"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

타입알리어스와 매퍼로 사용하던것이

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- Component scan -->
    <context:component-scan base-package="com.example"/>

    <!-- DataSource 설정 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.h2.Driver"/>
        <property name="url" value="jdbc:h2:mem:testdb"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

    <!-- MyBatis SqlSessionFactory 설정 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- MyBatis SqlSessionTemplate 설정 -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <!-- 트랜잭션 관리자 설정 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

spring 설정 파일에 추가합니다.

 

 

그리고 기존에 mybatis에서 

SqlSession session = sqlSessionFactory.openSession();
try {
    // 트랜잭션 시작
    // 데이터 조작
    session.commit();
} catch (Exception e) {
    session.rollback();
    throw e;
} finally {
    session.close();
}

트랜잭션 조작을 하던 것을

 

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    @Transactional
    public List<User> getAllUsers() {
        return userMapper.findAllUsers();
    }
}

@Transactional로 관리하게 됩니다.

 

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String listUsers(Model model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "userList";
    }
}

dao를 사용하지 않고 userservice를 이용하게 됩니다.

반응형

'KOSTA교육 > 수업' 카테고리의 다른 글

[52/100] 240627  (0) 2024.06.27
[51/100] 240626  (0) 2024.06.26
[49/100] 240624  (0) 2024.06.24
[48/100] 240621  (0) 2024.06.21
[47/100] 240620  (0) 2024.06.20