일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 마이바티스
- STS
- Linux
- spring
- JdbcTemplate
- Dependency Injection
- Spring Boot
- JDBC TEMPLATE
- myBatis
- java
- java spring
- pointcut
- @Spring-Test
- @AspectJ
- 프로퍼티
- 리눅스
- @test
- Framework
- POJO
- XML
- unix
- Ubunt
- @JUnit
- Di
- spring aop
- Spring JDBC
- SpringJDBC
- 컨테이너
- spring framework
- AOP
- Today
- Total
개키우는개발자 : )
MyBatis(마이바티스) 애플리케이션 작성(1) 본문
Spring Framework MyBatis(마이바티스)
애플리케이션 작성(1)
학습 목표
** sqlSession 을 이용한 sql 쿼리 처리 **
- MyBatis 및 MyBatis-Spring 설치
- MyBatis 및 MyBatis-Spring 설정
- DAO 클래스 작성 및 테스트
1.MyBatis 및 MyBatis-Spring 설치
1-1 MyBatis 라이브러리 검색 및 설치
maven repository 경로 https://mvnrepository.com/artifact/org.mybatis/mybatis/3.4.6
가장 많이 사용하는 버전으로 pick
1 2 3 4 5 6 7 | <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> | cs |
1-1 MyBatis 라이브러리 검색 및 설치
maven repository 경로 https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.2
역시 가장 많이 사용하는 버전
1 2 3 4 5 6 7 | <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency> | cs |
2-1 MyBatis-Spring의 주요 컴포넌트
2-3 mybatisBeans.xml 설정파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?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:aop="http://www.springframework.org/schema/aop" 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-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <context:property-placeholder location="classpath:config/datasource.properties"/> <!-- DataSource 설정 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="${db.driverClass}" /> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> </bean> <!-- Mapper 설정 --> <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="myspring.user.dao.UserMapper" /> <property name="sqlSessionTemplate" ref="sqlSession" /> </bean> <!-- MyBatis 설정 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:config/SqlMapConfig.xml" /> <property name="mapperLocations"> <list> <value>classpath:mapper/User.xml</value> </list> </property> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" > <constructor-arg ref="sqlSessionFactory" /> </bean> <!-- 트랜잭션 관리를 위한 bean --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <context:component-scan base-package="myspring.user,myspring.aop.annot" /> </beans> | cs |
2-4 설정파일과 VO 객체와 테이블간의 관계
- SqlMapConfig.xml
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias alias="User" type="myspring.user.vo.UserVO"/> </typeAliases> </configuration> | cs |
- User.xml
SQL 문 Mapping 파일 일반적인 sql 문법으로 처리요청을 한다 하지만 mybatis 차이는 select , insert , delete
등 태그를 감싸주어서 id , parameter, result 값을 지정한다.
select 문으로 예를 모든 유저의 정보를 담은 USERS 테이블 컬럼의 정보를 List 타입으로 리턴한다.
조회한 USERS 의 결과정보를 담아줄 VO객체 이름을 resultType 에 User이라는 이름으로 정한다.
resultType의 User == SqlMapConfig.xml 의 typeAlias 의 alias= User 과 같다. 이렇게 연결을 하면 MyBatis에서 자동으로 연결을 해준다.
mapping 파일이 여러게 존재할때 select id = a , 다른 파일에 select id = a 가 같을경우 충돌이 일어날 수 있기때문에 mapper 태그에 namespace명을 설정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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="userNs"> <select id="selectUserById" parameterType="String" resultType="User"> select * from users where userid=#{userid} </select> <select id="selectUserList" resultType="User"> select * from users order by userid </select> <insert id="insertUser" parameterType="User" > insert into users values (#{userid},#{name},#{gender},#{city}) </insert> <update id="updateUser" parameterType="User"> update users set name=#{name},gender=#{gender},city=#{city} where userid=#{userid} </update> <delete id="deleteUser" parameterType="String" > delete from users where userid =#{userid} </delete> </mapper> | cs |
- UserVO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package myspring.user.vo; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; public class UserVO { private String userid; private String name; private String gender; private String city; public UserVO() { super(); } public UserVO(String userid, String name, String gender, String city) { super(); this.userid = userid; this.name = name; this.gender = gender; this.city = city; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); } } | cs |
- MySQL(database)
1 2 3 4 5 6 | create table users( userid varchar(30) not null primary key, name varchar(50) not null, gender varchar(10), city varchar(100) )default charset=utf8; | cs |
2-3 MyBatis-Spring 테스트
MyBatis SqlSession 을 사용해서 user1 의 정보를 가져오는 테스트
1 2 3 4 5 6 7 8 9 | @Autowired SqlSession session; @Test public void configTest() { SqlSession session = context.getBean("sqlSession",SqlSession.class); UserVO user = session.selectOne("userNs.selectUserById","user1"); System.out.println(user); } | cs |
1 | {"userid":"user1","name":"name1","gender":"여","city":"city1"} | cs |
UserDao 객체를 사용해 모든 유저 정보를 불러는 테스트
UserDao.java 클래스의 모든 유저 정보를 가져오는 메소드
1 2 3 4 5 6 7 | @Autowired private SqlSession session; public List<UserVO> readAll() { List<UserVO> userList = session.selectList("userNs.selectUserList"); return userList; } | cs |
테스트 java 클래스에서 UserDao 를 객체화 하여 실행.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Test public void daoTest(){ UserDao dao = context.getBean("userDao",UserDao.class); try { List<UserVO> list = dao.readAll(); for (UserVO userVO : list) { System.out.println(userVO); } } catch (Exception e) { e.printStackTrace(); } } | cs |
실행결과
1 2 3 4 5 6 7 8 9 | {"userid":"user1","name":"name1","gender":"여","city":"city1"} {"userid":"user12","name":"name12","gender":"여12","city":"city12"} {"userid":"user2","name":"name2","gender":"여","city":"서울"} {"userid":"user3","name":"name3","gender":"여","city":"city3"} {"userid":"user33","name":"name33","gender":"3남","city":"city35"} {"userid":"user5","name":"name5","gender":"여","city":"city5"} {"userid":"user7","name":"name7","gender":"여7","city":"city7"} {"userid":"user8","name":"name8","gender":"여8","city":"city8"} {"userid":"ㄴㄴㄴ","name":"ㄴㄴㄴ","gender":"남","city":"서울"} | cs |
완성된 프로젝트 코드를 다운받으실수 있습니다.
'JAVA > Spring Framework' 카테고리의 다른 글
애플리케이션 프로젝트 완료 (0) | 2019.02.09 |
---|---|
MyBatis(마이바티스) 애플리케이션 작성(2) (0) | 2019.02.09 |
MyBatis(마이바티스) 개요 (2) | 2019.02.08 |
AOP애플리케이션 작성(2) (0) | 2019.02.08 |
AOP애플리케이션 작성(1) (0) | 2019.02.08 |