Mybatisテスト
39757 ワード
persistence framework
:データベースがサービス内で不安定な状態にあることはできません.持続性が重要です.持続性と使用率を向上させるためのフレームワークです.springjdbcTemplateを使用する場合、いくつかの不便な点があります.
1.sql文の作成中に多くのエラーが発生する可能性があります.
2.sql文がソースコードに組み込まれている場合、テーブル構造を変更したり、sql文を追加したりするときは、ソースコードを直接開いて変更する必要があります.
->エラーを減らすために、sql文を拡張および変更するには、sql文を個別のファイルに分割することが望ましい.
jpaは、sql文を記述することなく、挿入、更新、削除時にテーブルおよびjavavoオブジェクトを自動的にマッピングできます.
ライブラリの追加
BoardVO
package com.springbook.biz.board;
import java.util.Date;
public class BoardVO {
private int seq;
private String title;
private String writer;
private String content;
private Date regDate;
private String searchCondition;
private String searchKeyword;
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
public String getSearchKeyword() {
return searchKeyword;
}
public void setSearchKeyword(String searchKeyword) {
this.searchKeyword = searchKeyword;
}
@Override
public String toString() {
return "BoardVO [seq=" + seq + ", title=" + title + ", writer=" + writer + ", content=" + content
+ ", searchCondition=" + searchCondition + ", searchKeyword=" + searchKeyword + "]";
}
}
マイワティスには2つのプロファイルが必要です.mapper.xml
:sql文の作成mybatis-config.xml
:javaオブジェクトに関連付けboard-mapping.xml
#{title}:gettitleを呼び出します.
<?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="BoardDAO">
<insert id="insertBoard">
insert into board(seq, title, writer, content)
values((select nvl(max(seq), 0)+1 from board),
#{title},#{writer},#{content})
</insert>
<update id="updateBoard">
update board set title=#{title}, content=#{content}
where seq=#{seq}
</update>
<delete id="deleteBoard">
delete board where seq=#{seq}
</delete>
<select id="getBoard" resultType="board">
select * from board where seq=#{seq}
</select>
<select id="getBoardList" resultType="board">
select * from board
where title like '%'||#{searchKeyword}||'%'
order by seq desc
</select>
</mapper>
configファイルの作成sql-map-config.xml
https://mybatis.org/mybatis-3/ko/getting-started.htmlを参照
<?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>
<!-- Properties 파일 설정 -->
<properties resource="db.properties"/>
<!-- Alias 설정 -->
<typeAliases>
<typeAlias alias="board" type="com.springbook.biz.board.BoardVO"/>
</typeAliases>
<!-- DataSource 설정 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- Sql Mapper 설정 -->
<mappers>
<mapper resource="mappings/board-mapping.xml"/>
</mappers>
</configuration>
db.propertiesjdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:tcp://localhost/~/test
jdbc.username=sa
jdbc.password=
SqlSessionFactoryBean入力ストリームを作成して設定情報を取得
getSqlSessionInstance()メソッドにより、SqlSessionオブジェクトを必要とするDAOクラスを実現できます.
package com.springbook.biz.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionFactoryBean {
private static SqlSessionFactory sessionFactory = null;
static {
try {
if(sessionFactory==null) {
Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSessionInstance() {
return sessionFactory.openSession();
}
}
BoardDAOpackage com.springbook.biz.board.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.springbook.biz.board.BoardVO;
import com.springbook.biz.util.SqlSessionFactoryBean;
public class BoardDAO {
private SqlSession mybatis;
public BoardDAO() {
mybatis = SqlSessionFactoryBean.getSqlSessionInstance();
}
public void insertBoard(BoardVO vo) {
mybatis.insert("BoardDAO.insertBoard", vo);
mybatis.commit();
}
public void updateBoard(BoardVO vo) {
mybatis.update("BoardDAO.updateBoard", vo);
mybatis.commit();
}
public void deleteBoard(BoardVO vo) {
mybatis.delete("BoardDAO.deleteBoard", vo);
mybatis.commit();
}
public BoardVO getBoard(BoardVO vo) {
return (BoardVO)mybatis.selectOne("BoardDAO.getBoard", vo);
}
public List<BoardVO> getBoardList(BoardVO vo){
return mybatis.selectList("BoardDAO.getBoardList", vo);
}
}
BoardServiceClientpackage com.springbook.biz.board;
import java.util.List;
import com.springbook.biz.board.impl.BoardDAO;
public class BoardServiceClient {
public static void main(String[] args) {
BoardDAO boardDAO = new BoardDAO();
BoardVO vo = new BoardVO();
vo.setTitle("myBatis 제목");
vo.setWriter("홍길동");
vo.setContent("myBatis 내용입니다...");
vo.setSearchCondition("TITLE");
vo.setSearchKeyword("");
List<BoardVO> boardList = boardDAO.getBoardList(vo);
for(BoardVO board : boardList) {
System.out.println("---> " + board);
}
}
}
実行結果Reference
この問題について(Mybatisテスト), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/Mybatisテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol