오늘보다 더 나은 내일의 나에게_

비전공자의 IoT 국비 교육 수강일지 Day_70 본문

비전공자의 코딩일지

비전공자의 IoT 국비 교육 수강일지 Day_70

chan_96 2022. 3. 29. 16:55
728x90

BootSample 프로젝트

서버 실행 후 페이지 접속

주요 설정 application.properties
=> 스프링 레거시 프로젝트에서 servlet-context.xml 있는 설정을 application.properties 여기서 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp​


요청 후 링크로 접속


main.jsp 작성


RController 생성 후 Member테이블(controller 패키지) 생성



com.smhrd.myapp.database 패키지의 DataBaseConfigMyBatis에 추가!
더보기
package com.smhrd.myapp.database;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration //설정파일
@EnableTransactionManagement   //트랜잭션 관리
@MapperScan(basePackages = "com.smhrd.myapp.mapper")
public class DataBaseConfigMyBatis {
   
   @Bean
   public DataSource batisDataSource() {
      HikariConfig dataSourceConfig = new HikariConfig();      
      dataSourceConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
       dataSourceConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
       dataSourceConfig.setUsername("hr");
       dataSourceConfig.setPassword("hr");
       dataSourceConfig.setMaximumPoolSize(10);
       dataSourceConfig.setMinimumIdle(5);
       dataSourceConfig.setMaxLifetime(1200000);
       dataSourceConfig.setConnectionTimeout(20000);
       dataSourceConfig.setIdleTimeout(300000);
       
       return new HikariDataSource(dataSourceConfig);
   }
   
   //데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체
   @Bean(name= "batisSqlSessionFactory")
   public SqlSessionFactory batisSqlSessionFactory(@Qualifier("batisDataSource") DataSource batisDataSource, ApplicationContext applicationContext) throws Exception {
      SqlSessionFactoryBean sqlSession = new SqlSessionFactoryBean();
      sqlSession.setDataSource(batisDataSource);
      sqlSession.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml")); //mybatis-config.xml의 경로
      sqlSession.setMapperLocations(applicationContext.getResources("classpath:/com/smhrd/myapp/mapper/MemberMapper.xml")); //쿼리문을 관리하는 mapper파일의 경로   
        
      return sqlSession.getObject();
      
   }
   
   //마이바티스 스프링 연동모듈의 핵심
    @Bean(name = "batisSqlSessionTemplate")
    public SqlSessionTemplate batisSqlSessionTemplate(SqlSessionFactory batisSqlSessionFactory) throws Exception {
 
        return new SqlSessionTemplate(batisSqlSessionFactory);
    }   
   
}



pom.xml에 추가!
mvnrepository 링크
더보기
<!-- HIKARI CP 커넥션 풀 사용 위한 스타터 -->        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

<!-- 오라클 드라이버 -->
       <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>
        
      <!-- class 파일로 configuration -->
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
        </dependency>


      <!-- mybatis -->
       <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>2.0.1</version>
      </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

MemberMapper 인터페이스 작성(com.smhrd.myapp.mapper)


resources폴더에 폴더 생성


MemberMapper.xml 생성
경로


mybatis-config.xml 생성

링크에서 설정 필요한 옵션 값 추가 가능
더보기
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <!-- https://mybatis.org/mybatis-3/ko/configuration.html -->
    <settings>
         <setting name="callSettersOnNulls" value="true"/>
    </settings>

</configuration>

MemberService 작성(com.smhrd.myapp.service 패키지)

RController 작성(com.smhrd.myapp.controller)
=> RequestMapping( ) 안에 경로 적을 때 ""으로 작성('' 작성 시 오류)


버튼 작성 후 함수 작성

RController dataFindAllJPA() 메서드 작성



MemberService dataFindAllJPA( ) 메서드 작성
=> MemberRepo 추가!


pom.xml 작성
<!-- JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>​


DataBaseConfigJPA 생성(com.smhrd.myapp.database; )
더보기
package com.smhrd.myapp.database;

import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
//configuration annotation
@EnableJpaRepositories(
       basePackages="com.smhrd.myapp.repo",  //repository를 관리할 패키지 명시
       entityManagerFactoryRef = "entityManagerFactory", //EntityManagerFactory
       transactionManagerRef = "transactionManager") // transactionManager
public class DataBaseConfigJPA {
   private static final String DEFAULT_NAMING_STRATEGY
      = "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy";
   
   @Bean
   @Primary //해당 Bean을 우선적으로 선택하도록 하는 annotation
   public DataSource defaultDataSource() {
      HikariConfig dataSourceConfig = new HikariConfig();
      dataSourceConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
       dataSourceConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
       dataSourceConfig.setUsername("hr");
       dataSourceConfig.setPassword("hr");
       dataSourceConfig.setMaximumPoolSize(10);
       dataSourceConfig.setMinimumIdle(5);
       dataSourceConfig.setMaxLifetime(1200000);
       dataSourceConfig.setConnectionTimeout(20000   );
       dataSourceConfig.setIdleTimeout(300000);
       
       return new HikariDataSource(dataSourceConfig);
   }
   
   //SessionFactory를 생성
   @Bean(name = "entityManagerFactory")
   @Primary
   public LocalContainerEntityManagerFactoryBean entityManagerFactory(
       EntityManagerFactoryBuilder builder) {
   
     Map<String, String> propertiesHashMap = new HashMap<>();
     propertiesHashMap.put("hibernate.physical_naming_strategy",DEFAULT_NAMING_STRATEGY);

     LocalContainerEntityManagerFactoryBean rep =
     builder.dataSource(defaultDataSource())
       .packages("com.smhrd.myapp.domain")
      //domain을 관리할 패키지 경로 명시 (domain = DO 파일)
       .properties(propertiesHashMap)
       .build();
    
     return rep;
   }
   
   
   //트랜잭션 관리
   @Primary
   @Bean(name = "transactionManager")
   PlatformTransactionManager transactionManager(
       EntityManagerFactoryBuilder builder) {
     return new JpaTransactionManager(entityManagerFactory(builder).getObject());
   }

}

Member 클래스 수정(com.smhrd.myapp.domain)
=> import시 persistence!!


MemberRepo 인터페이스 생성(com.smhrd.myapp.repo)
=> JpaRepository 상속받기!

멤버 리스트 가져오기(JPA) 버튼 클릭 시 콘솔 창에 출력


id가 admin인 회원 불러오기


RController findAdmin( ) 메서드 작성


MemberService에 findAdmin( ) 메서드 작성


MemberRepo에 findAdmin 작성
=> @Param import ibatis, @Query import jpa
=> 테이블명이 아니라 Member 클래스 명과 일치!!(대소문자 구분)


Pyton lib

# 새로운 컬럼 생성
# 변수[컬럼이름] = 값

# 데이터 프레임 슬라이싱 1
=> 0 포함 2 미포함 
=> 서울, 부산 = index, 2015,2010,2005 컬럼

# 데이터 프레임 슬라이싱 2

# 행과 열을 한 번에 인덱싱/슬라이싱 하는 함수가 필요
# loc : index의 값(문자)을 사용
# iloc : index의 번호(정수)를 사용
# 변수. 인덱서[ 행, 열 ]
# 인덱서[행] : 해당 행 데이터 출력


# loc 활용

loc 인덱서
loc 인덱서2

# iloc 활용
iloc 인덱서 1
iloc 인덱서 2

iloc 인덱서 3

 

실습 1

- population_number.csv

파일 불러오기!
=> pd.read_csv('파일명', '인코딩', 인덱스컬럼='' )
population_number= pd.read_csv('population_number.csv',encoding='euc-kr', index_col='도시')

# 각각의 값이 나온 횟수 세어주기!
=> 중복 값이나 빈도수 확인할 때 사용
#2010 컬럼 값의 빈도수
=> 결측치는 카운팅 X

정렬(sort)
# sort_index : 인덱스 값을 기준으로 정렬
# sort_values : 데이터 값을 기준으로 정렬

=> ascending 오름차순 (True), 내림차순 (False)

데이터 값 정렬
=> by = 컬럼값

boolean 인덱싱
# 2015년도 인구가 250만 이상인 데이터 가져오기
# 1. 조건에 쓰일 데이터 (인덱싱)

# 2. 판별 (boolean)

# 3. 조건에 따라 데이터 가져오기 (불리언 인덱싱)

 

실습 2

- score.csv

파일 불러오기

# 학급별 총계
# 과목별 총계
=> axis는 축 / axis=0 기본값!

# 합계 컬럼 추가하기
1. 과목별 합계 연산하기
2. 연산한 데이터로 컬럼 추가하기 (인덱싱)
3. score 변수 확인하기
# 학급별 순위
# 1. 학급별 총합
# 2. 정렬
# 3. 내림차순

# 평균 컬럼 추가하기

# 반 평균 컬럼 추가하기
# 최댓값, 최솟값 구하기

# 과목별 최댓값과 최솟값의 차이 1

# 과목별 최대값과 최소값의 차이 2

 

DataFrame 병합

  • concat
  • merge
# 데이터 생성



# concat 함수 사용해서 데이터 병합

axis = 0
axis = 1

# 데이터 생성


# axis=1, axis=0

# join 속성
- outer : 합집합, 기본값
- inner : 교집합, 합치는 데이터들이 동일하게 가지고 있는 기준만 출력
728x90
Comments