* 'spring-boot-starter-jdbc' or 'spring-boot-starter-data-jpa' 의존성을 추가하면 DataSource 구현체로 tomcat-jdbc을 제공 * H2 의존성을 추가하고 난 후, 설정 파일에 아무 설정이 되어 있지 않으면 스프링 부트는 자동적으로 H2 데이터베이스를 기본 데이터베이스로 사용
*spring-boot-starter-jdbc 의존성을 추가하면 DataSource, JdbcTemplate을 별다른 설정없이 주입하여 사용 가능(@Autowired 등)
// 합계
integerList.stream().reduce(Integer::sum); // returnType Optional<Integer>
integerList.stream().reduce((a,b) -> a + b); // returnType Optional<Integer>
integerList.stream().reduce(0, Integer::sum); // returnType Integer
integerList.stream().reduce(0, (a,b) -> a + b); // returnType Integer
// 문자열 변환
stringList.stream().collect(Collectors.joining(",")); // {1,3,2,5,4} -> "1,3,2,5,4"
- Grouping
// 객체 내 특정 데이터를 기준으로, 또 다른 특정 데이터를 그룹핑
Map<String, List<Integer>> myVoIntegerMap =
myVoList.stream().collect(Collectors.groupingBy(MyVo::getKeyString, Collectors.mapping(MyVo::getInteger, Collectors.toList())));
// 객체 내 특정 데이터를 기준으로, 객체 자체를 그룹핑
Map<String, List<MyVo>> myVoMap =
myVoList.stream().collect(Collectors.groupingBy(MyVo::getKeyString));
// 두 개의 키를 기준으로 이중 Map 생성
Map<String, Map<String, MyVo>> myVoDoubleMap =
myVoList.stream().collect(Collectors.groupingBy(MyVo::getId, Collectors.toMap(MyVo::getSubId, Function.identity())));
@Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource();
// DB 정보 ( 환경에 맞게 수정 필요 ) dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/rmsdb"); // jdbc:mysql://'domain':'port'/'DataBaseName' dataSource.setUsername("root"); // ID dataSource.setPassword("qweqweqwe"); // PW
return dataSource; }
@Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath*:com/example/demo/*.xml") ); // Mapper 위치 설정
@Mapper public interface MapperInterface { List selectList(); TestDto selectOne(TestDto testDto); int create(TestDto testDto); int update(TestDto testDto); int delete(TestDto testDto); }
@Before : 조인포인트 전에 실행 @AfterReturning : 조인포인트에서 성공적으로 리턴 된 후 실행 @AfterThrowing : 예외가 발생하였을 경우 실행 @After : 조인포인트에서 메서드의 실행결과에 상관없이 무조건 실행 @Around : 조인포인트의 전 과정(전, 후)에 수행