ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ MyBatis๋?
๊ธฐ์กด JSP์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํต์ ์ ํ๋ ค๋ฉด JDBC๋ฅผ ์ด์ฉํ์ฌ ์๋ฐ๋ฅผ ๋ฌด์กฐ๊ฑด ๊ฑฐ์ณ์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์๋ฐ์์ ๋ถ๊ฐํผํ๊ฒ SQL ์ฝ๋๊ฐ ์์ฑ๋์๊ณ , ์๋ฐ์ SQL์ด ์์ด๋ค ๋ณด๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์์ฌ ์ ์ง๋ณด์์ ๋ถ์ ์ด ์ฝ์ง ์์์ต๋๋ค. ์ด๋ฌํ ๋ถํธํจ์ ํด์ํ๊ธฐ ์ํด myBatis๋ฅผ ์ด์ฉํฉ๋๋ค.
MyBatis ๊ตฌ์กฐ
myBatis๋ ๊ธฐ์กด์ JDBC ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ SQL๋ฌธ์ XML ํ์ผ์ ์์ฑํจ์ผ๋ก์จ ์ฝ๋๊ฐ ์ค์ด๋ค๊ณ , SQL๋ฌธ ์์ ์ด ํธํด์ง๋๋ค. ๋ํ DBCP(Databse Connection Pool)๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฅ์ ์ ์ฌ๋ฌ ๊ฐ ์์ฑํ๊ธฐ ๋๋ฌธ์ JDBC๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์์ ํจ์จ๊ณผ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋๋ค.
DBCP(Database Connection Pool)๋ก DB์ฐ๊ฒฐ
์ฌ์ฉ์ ์์ฒญ์ด ์์ ๋๋ง๋ค DB์ฐ๊ฒฐ์ ํ๋ค๋ฉด, ๋ง์ ์์ฒญ์ด ์์ ๋ ์ฐ๊ฒฐ ์๋๊ฐ ์ ํ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฏธ๋ฆฌ Connection์ ๋ง๋ค์ด ๋๊ณ , ํ์์ ์ ์ฅ๋ ๊ณต๊ฐ์์ ๊ฐ์ ธ๋ค ์ด ํ ๋ฐํํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
MyBatis ์๋์์
์์
1. ์์ฉ ํ๋ก๊ทธ๋จ์ด SqlSessionFactoryBuilder๋ฅผ ํตํด SqlSessionFactory๋ฅผ ๋น๋ํ๋๋ก ์์ฒญํ๋ค
2. SqlSessionFactoryBuilder๋ SqlSessionFactory๋ฅผ ์์ฑํ๊ธฐ ์ํ MyBatis ๊ตฌ์ฑํ์ผ์ ์ฝ๋๋ค
3. SqlSessionFactoryBuilder๋ MyBatis ๊ตฌ์ฑ ํ์ผ์ ์ ์์ ๋ฐ๋ผ SqlSessionFactory๋ฅผ ์์ฑํ๋ค
์์ฒญ
4. ํด๋ผ์ด์ธํธ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ํ๋ก์ธ์ค(์คํ๋ ํ๋ก๊ทธ๋จ, ์ฐ๋ ๋ํ์ ์์ฒญ)์ ์์ฒญํ๋ค.
5. ์์ฉ ํ๋ก๊ทธ๋จ์ SqlSessionFactoryBuilder๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๋ SqlSessionFactory์์ SqlSession์ ๊ฐ์ ธ์จ๋ค(๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ๋ค)
6. SqlSessionFactory๋ SqlSession์ ์์ฑํ๊ณ ์ด๋ฅผ Application์ ๋ฐํํ๋ค
7. ์์ฉ ํ๋ก๊ทธ๋จ์ด SqlSession์์ ๋งคํผ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค
8. ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋งคํผ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค
9. ๋งคํผ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๊ฐ SqlSession์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ SQL์คํ์ ์์ฒญํ๋ค
10. SqlSession์ ๋งคํ ํ์ผ์์ ์คํํ SQL์ ๊ฐ์ ธ์ SQL์ ์คํํ๋ค
MyBatis ์์ ์์ ์ ๋ฆฌ
1. ํ ์ด๋ธ ์์ฑ
2. VO ๊ฐ์ฒด ์์ฑ
3. mapper.xml์์ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ
4. config.xml์ datasource ์ค์
5. config.xml์ mapper.xml ๊ฒฝ๋ก ๋ฑ๋ก
6. SqlSessionFactory์ config.xml ์ ๋ฌ
7. DAO์์ mapper.xml์ ์์ฑํ ์ฟผ๋ฆฌ ์คํ
์์ ๊ฐ์ ์์๋ก ํ๋ฒ ์์ ์ ํด๋ด ์๋ค!
1. ํ ์ด๋ธ ์์ฑ
์ ๋ DBeaver๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ํตํด MySQL์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋จํ ํ ์ด๋ธ์ ํ๋ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
create database mybatis;
use mybatis;
create table tbl_member(
member_id int unsigned auto_increment primary key,
member_name varchar(500),
member_age tinyint unsigned
);
2. VO๊ฐ์ฒด ๋ง๋ค๊ธฐ
1์์ ๋ง๋ ํ ์ด๋ธ์ ์ปฌ๋ผ๊ณผ ๋์ผํ๊ฒ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ์ด๋ VO(Value Object)๋ ์ด๋ ํ ๋ก์ง๋ ๊ฐ์ง์ง ์์ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด์ ๋๋ค. ์์์ ํ์์ ๊ด๋ฆฌํ ํ ์ด๋ธ์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ง๊ธ ์์ฑํ๋ VO์ด๋ฆ๋ MemberVO๋ก ํฉ๋๋ค.
๐ src/com.mybatis.vo (package) / MemberVO.java ํ์ผ
package com.mybatis.vo;
public class MemberVO {
private Long memberId;
private String memberName;
private int memberAge;
public MemberVO() {;}
public Long getMemberId() {
return memberId;
}
public void setMemberId(Long memberId) {
this.memberId = memberId;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
public int getMemberAge() {
return memberAge;
}
public void setMemberAge(int memberAge) {
this.memberAge = memberAge;
}
@Override
public String toString() {
return "MemberVO [memberId=" + memberId + ", memberName=" + memberName + ", memberAge=" + memberAge + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((memberId == null) ? 0 : memberId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MemberVO other = (MemberVO) obj;
if (memberId == null) {
if (other.memberId != null)
return false;
} else if (!memberId.equals(other.memberId))
return false;
return true;
}
}
3. mapper.xml์์ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ
mapper.xml์์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ๊ฑด๋ฐ, ๋ณดํต ์๋น์ค ์นดํ ๊ณ ๋ฆฌ ๋ณ๋ก mapper ํ์ผ์ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ ์ด๋ฒ์ ํ์๊ด๋ฆฌ ์๋น์ค์ ๊ด๋ จ๋ ๋ก์ง ๋ฐ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ๊ฒ์ด๋ฏ๋ก memberMapper.xml ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก mapper ํ์ผ์ ์์ฑํด์ ์์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ src/com.mybatis.mapper (package) / memberMapper.xml ํ์ผ
<?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="member">
<insert id="insert" parameterType="memberVO">
insert into tbl_member(member_name, member_age)
values(#{memberName}, #{memberAge})
</insert>
<select id="select" resultType="long">
select member_id from tbl_member where member_name=#{memberName} and member_age=#{memberAge}
</select>
<select id="selectAll" resultType="memberVO">
select member_id, member_name, member_age from tbl_member
</select>
</mapper>
4, 5. config.xml์ datasource ์ค์ & mapper.xml ๊ฒฝ๋ก ๋ฑ๋ก
๐ src/com.mybatis.config (package) / config.xml ํ์ผ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<typeAlias type="com.mybatis.vo.MemberVO" alias="memberVO"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/mapper/memberMapper.xml"/>
</mappers>
</configuration>
6. SqlSessionFactory์ config.xml ์ ๋ฌ
๐ src/com.mybatis.config (package) / MyBatisConfig.java ํ์ผ
package com.mybatis.config;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisConfig {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "com/mybatis/config/config.xml";
try {
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
7. DAO์์ mapper์ ์์ฑํ ์ฟผ๋ฆฌ ์คํํ๋ ๋ก์ง ํจ์ ์์ฑ
๐ src/com.mybatis.dao (package) / MemberDAO.java ํ์ผ
package com.mybatis.dao;
public class MemberDAO {
public SqlSession sqlSession;
public MemberDAO() {
sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
}
// ํ์ ๊ฐ์
public void insert(MemberVO memberVO) {
sqlSession.insert("member.insert", memberVO);
}
// ์ ์ฒด ์กฐํ
public List<MemberVO> selectAll() {
return sqlSession.selectAll("member.selectAll");
}
}
8. ์คํํด๋ณด์
๐ src/ com.mybatis.dao (package) / Test.java ํ์ผ
package com.mybatis.dao;
public class Test {
public static void main(String[] args) {
MemberDAO memberDAO = new MemberDAO();
MemberVO memberVO = new MemberVO();
memberVO.setMemberName("์ด์์ ");
memberVO.setMemberAge(20);
memberDAO.insert(memberVO);
}
}
์คํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ธํ๋ฉด insert ๋์ด ์์์ ํ์ธํ ์ ์์์ต๋๋ค :)
'๋ฐฑ์๋ > JSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JSP] ๋ก๊ทธ์ธ, ํ์๊ฐ์ , ์์ด๋ ์ค๋ณต๊ฒ์ฌ ๊ธฐ๋ฅ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.04.20 |
---|---|
[JSP] MVC ํจํด์ด๋? (0) | 2023.04.20 |
[JSP] ์๋ธ๋ฆฟ(Servlet)์ด๋ ? (0) | 2023.04.19 |
[JSP] JSP๋ก ์ฌ์น์ฐ์ฐ ๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2023.04.19 |
[JSP] JSP(Java Server Page)๋? (0) | 2023.04.19 |
- Total
- Today
- Yesterday
- styled-components
- ํ์ ์คํฌ๋ฆฝํธ
- ๋จธ์ ๋ฌ๋
- jest
- Python
- JSP
- CSS
- ํ๋ก ํธ์๋
- ๋ฐ์ดํฐ๋ถ์
- ๋ฆฌ์กํธ ํ
- ํ์ด์ฌ
- TypeScript
- ์คํ์ผ ์ปดํฌ๋ํธ styled-components
- react-query
- frontend
- HTML
- ๋ฆฌ์กํธ
- ๋ฅ๋ฌ๋
- ๋ํ๋ง
- ์๋ฐ
- react
- ํ๋ก ํธ์๋ ๊ธฐ์ด
- rtl
- testing
- ์ธํ๋ฐ
- ํ๋ก ํธ์๋ ๊ณต๋ถ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ด
- next.js
- ํ๋ก์ ํธ ํ๊ณ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |