[데이터베이스] mybatis 사용하기 ( JSP,AJAX. Sevlet)
[데이터베이스] MariaDB 설치하기 보러가기
[데이터베이스] 마리아DB(MariaDB) - 이클립스 연동 보러가기
[데이터베이스] 마리아DB(MariaDB) - JSP - ajax 연동 예제 의 다음 이야기로 진행하시는데
어려움 또는 설정 파일을 필요하신 분들은 앞에 부분들부터 천천히 읽고 오시면 좋을거 같습니다.
마리아DB를 편리하게 쓰고, 좀더 DB의 오버헤드를 줄이기 위해서
Mybatis를 사용하는 법을 진행하겠습니다.
Mybatis를 쓰기 위해서는 Jar의 파일이 필요합니다.
아래의 GITHUB의 가시면 mybaits의 zip 파일을 얻을 수 있습니다.
파일 중 mybatis-3.X.X.jar를
WebContent , WEB-INF , lib 아래 두시면 됩니다.
다운 받으러 가기 : https://github.com/mybatis/mybatis-3/releases
마리아DB와 Mybatis를 사용하기 위해서는
아래의 주황색 박스의 부분의 코드들이 필요하다.
controller : JSP에서 버튼 이벤트로 Ajax 요청을 받아서, package test.DataDao에서
데이터를 Object로 돌려줍니다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
DataDao dao = new DataDao();
//test.DataDao의 DataDao.java를 통해서 sqlSessionFa
List<Data> list= dao.getList();
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i).getName());
}
}
test.DataDao: controller 의해 요청된 정보에 대해서
test.mybatis의 SqlSessionFactoryService.java 파일에
생성된 sqlSessionFactory의 인스턴스 통해서
sqlSession를 생성 후 DataMpper.xml에서 Mapper를 통해서
원하는 데이터를 가져옵니다.
여기서 가져올 때, test.DataVO.Data.java를 통해서 Data를 object화 시켜가져옵니다.
package test.DataDao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import test.mybatis.SqlSessionFactoryService;
import test.DataVo.*;
public class DataDao {
private SqlSessionFactory sqlSessionFactory;
//sqlSessionFactory는 sqlSession를 생성하기 위해 사용
/*
한번 만든뒤 SqlSessionFactory는 애플리케이션을 실행하는 동안 존재해야만 한다.
그래서 삭제하거나 재생성할 필요가 없다.
애플리케이션이 실행되는 동안 여러 차례 SqlSessionFactory 를
다시 빌드하지 않는 것이 가장 좋은 형태이다.
가장 간단한 방법은 싱글턴 패턴이나 static 싱글턴 패턴을 사용하는 것이다.
*/
public DataDao(){
sqlSessionFactory = SqlSessionFactoryService.getSqlSessionFactory();
}
public List<Data> getList() { // DataDao의 의해서 MariaDB에서 값을 받아온다. list
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
//세션을 생성하여 매핑구문을 실행하거나
//커밋 또는 롤백을 하기 위해 세션을 사용
return session.selectList("getlist");
//DataMapper.xml 매핑된 Sql 구문을 실행 후 찾은 데이터를
//controller에 데이터를 보내준다.
} finally {
if (session != null)
session.close();
//세션 더이상 필요하지 않은 상태가 되면 세션을 닫는다.
}
}
}
test.DataVo: DB에서 읽어올 데이터를 Object화 시켜주기 위하여 생성된 변수들
getter/setter를 사용하며, 테이블의 구조의 헤더의 선언된 정보와 같다.
package test.DataVo;
public class Data {
/*
MariaDB에서 읽어올 테이블의 헤더와 동일하다.
읽어 올 테이블의 구조는
번호 , 이름 , 학년
=> number , name. grade
이렇게 구성되어있다.
*/
private String name;
private int grade;
private int number;
public Data() {
super();
// TODO Auto-generated constructor stub
}
public Data(String name, int grade , int number) {
super();
this.name = name;
this.grade = grade;
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
test.mybatis.DataMapper.xml: DataDao.java 에서의 수행할 함수 기능에 대한 정보를 가지고 있다.
<?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="test.mybatis.DataMapper">
<!--패키지 경로를 포함한 전체 이름을 가진 구문을 구분하기 위해 필수로 사용한다.-->
<select id="getlist" resultType="data">
<!--함수 호출명 getlist 결과 DataVo의 Data.java 형식-->
select * from test_stu order by number desc
</select>
</mapper>
test.mybatis.mybatis-config.xml: 접속한 DB의 정보 및 수행할 정보도 가지고 있다.
<?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"> -->
<!-- Attribute "resource" must be declared for element type "mapper". -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="test.DataVo.Data" alias="data" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/가져올DB" />
<property name="username" value="아이디" />
<property name="password" value="비밀번호" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="test/mybatis/DataMapper.xml" />
</mappers>
</configuration>
test.mybatis.sqlSessionFactoryService.java
package test.mybatis;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionFactoryService {
private static SqlSessionFactory sqlSessionFactory;
static{
try{
String resource = "test/mybatis/mybatis-config.xml";
//mybatis를 통해서 연결할 DB, id , pass 정보를 가지고 있다.
InputStream is = Resources.getResourceAsStream(resource);
//mybatis-config.xml를 통해서 내가 연결할 mariadb 연결 정보를 읽어 온다.
sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
/*
이 클래스는 인스턴스회되어 사용되고 던져질 수 있다.
SqlSessionFactory 를 생성한 후 유지할 필요는 없다.
그러므로 SqlSessionFactoryBuilder 인스턴스의
가장 좋은 스코프는 메소드 스코프(예를들면 메소드 지역변수)이다.
여러개의 SqlSessionFactory 인스턴스를 빌드하기 위해 SqlSessionFactoryBuilder를
재사용할 수도 있지만 유지하지 않는 것이 가장 좋다.
*/
// 가져온 정보를 통해서
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
public static SqlSessionFactory getSqlSessionFactory() {
//test.DataDao의 DataDao.java 파일의 의해서 요청된
//sqlSessionFactory -> sqlSession를 만들기위해서 sqlSessionFactory를 reutrn한다.
return sqlSessionFactory;
}
}
JSP 화면
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<title>테스트 페이지</title>
</head>
<body>
<p>테스트</p>
<button id="jsonSend" type="button"> maria 값 가져오기 실행</button>
<script>
$('#jsonSend').click(function () {
jsonSend();
});
function jsonSend() {
$.ajax({
type: "POST",
url: "/TistoryExample//MariaDB_mybatis_tset",
data: {}, //json을 보내는 방법
success: function (data) { //서블렛을 통한 결과 값을 받을 수 있습니다.
alert(data);
console.log(data);
},
error: function (e) {
console.log(e);
alert('저장에 실패했습니다.');
}
});
}
</script>
</body>
</html>
결과화면
도움이 되셨다면, 구독과 좋아요.... 아니아니 ...
공감 버튼 꾸욱 눌러주세요 ~~