mybatisはsqlコマンドを管理してくれる便利なライブラリです。
私たちはsqlコマンドを毎回文字列として指定して、
一つ一つメモしてくれる方式を取ったと思います。
これらのコマンドはメンテナンスでの多くの努力が必要になる可能性が高く、効率も落ちます。
これらのコマンドはメンテナンスでの多くの努力が必要になる可能性が高く、効率も落ちます。
このためmybatisを使って管理してくれる方が便利です。
メイブンスプリングの開発環境では、設定も簡単です。
まず、pom.xmlにライブラリを追加しましょう
<!-- MyBatis, MyBatis-Spring, Spring-JDBC -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</dependencies>
mybatisとmybatisを連動してくれるスプリングと、スプリングとjdbcを接続するライブラリです。
mybatisは必然的に、データベースを利用するsql文を設定するライブラリのためデータベース開発環境が必ず必要です。
そしてスプリングjdbcとそのMybatisを接続mybatis-springライブラリが必要です
下のに設定してくれて、ライブラリを追加し、
Context.xmlでの設定をしてください。
(intellijの場合aplicationContextは、Eclipseの場合、root-contextファイルです)
<bean id="dataSource"
name="dataSource"
class="oracle.jdbc.pool.OracleDataSource">
<property name="URL"
value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="user" value="" />
<property name="password" value="" />
</bean>
<bean id="sqlSessionFactory"
name="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation"
value="classpath:/mybatis-config.xml" />
<property name="mapperLocations"
value="classpath:/mappers/*.xml" />
</bean>
<bean id="sqlSession" name="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate"
destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory"
ref="sqlSessionFactory" />
</bean>
スプリングで管理しているビーンを作る設定です。
Eclipseの場合、コンソールウィンドウの上にbean graphというタブがあり、ビーンの構造を確認できます。
インテリジェイの場合shift + ctrl + alt + uを押すと確認できます。
コードを上から説明すると
最初に、データソースは、Oracleデータベースのデータプール設定です。
userは、Oracleデータベースのidとpasswordは、パスワードをいう。
各自の開発環境に合わせて設定してください。
2回目のコードは、作成されたデータプールを介してsql文を管理する工場を一つ作るコードです。
最後ビーンは、そのような工場で管理している一つ一つのコンストラクタを定義するコードです。
しかし、このようにだけ作ってくれれば
<property name="configLocation"
value="classpath:/mybatis-config.xml" />
<property name="mapperLocations"
value="classpath:/mappers/*.xml" />
この部分でエラーが生じると思います。
mybatisはsqlを管理する為にsqlの管理設定や、sql文を定義した文書が必要です。
その文書(xml)ファイルがクラスパスにないがら生じるエラーです。
リソースの下mybatis-config.xmlを一つ作ってください。
この記事では、テーブル名や、カラムの名前を設定する必要があります。
サンプルコードを見ながら説明します。
<?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>
<property name="tblBoard" value="test_board" />
<property name="colBno" value="bno" />
<property name="colTitle" value="title" />
<property name="colContent" value="content" />
<property name="colUserid" value="userid" />
<property name="colRegdate" value="regdate" />
<property name="tblMember" value="tbl_member"/>
<property name="colUserid" value="userid"/>
<property name="colPassword" value="password"/>
<property name="colEmail" value="email"/>
</properties>
<typeAliases>
<package name="edu.spring.ex02.domain" />
</typeAliases>
</configuration>
上記の最初の4行はmybatis-config.xmlであれば必要不可欠なコードです。
この部分は、mybatisホームページで確認が可能できます。
(http://www.mybatis.org/mybatis-3/configuration.html#settings)
その以外は設定が必要です。
私は掲示板を作成したいの掲示板に必要なテーブル、会員管理に必要なテーブルを設定ぶ入れました。
テーブルの構造を見て、上記のコードを再見れば
valueの部分は、テーブルの構造の実際のcolumnの名前であり、
nameはこれからmybatis内で使用columnの名前である
つまりtest_boardと呼ばれるテーブルは、これからmybatis設定内ではtolBoardで使われます。
下のtypeAliasesは、これらのモデルオブジェクトを取ってくれるパスを意味します。
すなわち、モデルクラス(私の場合には、掲示板、会員クラス)パスを指定してくれましょう。
ここでもう一つ重要な点は、
private int bno;
private String title;
private String content;
private String userid;
private Date regdate;
モデルオブジェクトも、このように、Oracleデータベースのカラム名と合わせてください。
このようにmybatis-config.xmlは、すべてのテーブル、カラムを定義するところです。
これまでの設定が全部完了したら、sql文作成すの番です。
掲示板のsql文が入ったxml、メンバーの場合、メンバーのsql文が入ったxmlを作成します。
ため、このようにmappersというカテゴリーを一つ作って保管しましょう。
<?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="edu.spring.ex02.mappers.MemberMapper">
<select id="selectAll" resultType="Member">
SELECT * FROM ${tblMember}
</select>
</mapper>
このファイルも同様にconfig.xmlファイルのように
最初の4行はmybatisページからの4行を打つ必要があります。
次のnamespaceはsql文を直接使用する時に使われる文字列です。
session.selectList(NAMESPACE + ".selectAll");
こなん感じで、文字列を指定してsql文を使用します。
ここで、namespaceは、上記の設定と同じです
つまりsql文実行文は
edu.spring.ex02.mappers.MemberMapper.selectAll
と同じです。
さっき設定したテーブルやカラム名の通り使用するためには
${tblMember}の形式で使用できます。
javaコードのpreparedStatementよう入力が必要な場合
#{name}の形式で作成してください。
設定の過程がすべて終わったら
コードを作成してsql文の接続をしてみましょう。
xmlの設定が間違っていなければ、問題なく駆動される様子を確認づきるはずです。
ここまでが最初の方法です
第二の方法では、インターフェースを利用した方法がある。
私はコメントsqlを管理するマッパーの一つでreply-mapper.xmlを持っています
ここでのnamespaceはedu.spring.ex03.mappers.ReplyMapperです。
このパス通り
パッケージとインタフェースを一つ作ってください。
このインタフェースの内容はこうです。
文字列にsql文を定義した後のメソッドを作成し、アノテーションでsql文入れました。
xmlの設定とのインタフェースが重なってしまったら
xml設定を従うようになりますのでご注意してください。
このように設定した場合には、
使用する方法もxml設定方法と少し違います。
まず、このインタフェースを、私たちが使用できるように
Springフレームワークが管理するよう設定が必要です。
Context.xmlファイルを開けて
設定してください。
これでビーンが形成され、Springフレームワークがインターフェイスを参照できます。
その後
このようにReplyMapper形式で変数を宣言し、そのメソッドを呼び出ししてください。
こうして全ての過程が終わりました。
edu.spring.ex02.mappers.MemberMapper.selectAll
と同じです。
さっき設定したテーブルやカラム名の通り使用するためには
${tblMember}の形式で使用できます。
javaコードのpreparedStatementよう入力が必要な場合
#{name}の形式で作成してください。
設定の過程がすべて終わったら
private static final String NAMESPACE = "edu.spring.ex02.BoardMapper"; @Autowired private ReplyMapper mapper; @Overridepublic List<Board> read() { return session.selectList(NAMESPACE + ".selectAll");}
コードを作成してsql文の接続をしてみましょう。
xmlの設定が間違っていなければ、問題なく駆動される様子を確認づきるはずです。
ここまでが最初の方法です
第二の方法では、インターフェースを利用した方法がある。
私はコメントsqlを管理するマッパーの一つでreply-mapper.xmlを持っています
ここでのnamespaceはedu.spring.ex03.mappers.ReplyMapperです。
このパス通り
package edu.spring.ex03.mappers;
import java.util.List;
import org.apache.ibatis.annotations.Insert;
import edu.spring.ex03.domain.Reply;
public interface ReplyMapper {
String SQL_INSERT =
"INSERT INTO test_reply (bno, rtext, replier, regdate)"
+ " VALUES (#{bno}, #{rtext}, #{replier}, sysdate)";
@Insert(SQL_INSERT)
int insert(Reply r);
} // end interface ReplyMapper
このインタフェースの内容はこうです。
文字列にsql文を定義した後のメソッドを作成し、アノテーションでsql文入れました。
xmlの設定とのインタフェースが重なってしまったら
xml設定を従うようになりますのでご注意してください。
このように設定した場合には、
使用する方法もxml設定方法と少し違います。
まず、このインタフェースを、私たちが使用できるように
Springフレームワークが管理するよう設定が必要です。
Context.xmlファイルを開けて
<mybatis-spring:scan base-package="edu.spring.ex03.mappers"/>
設定してください。
これでビーンが形成され、Springフレームワークがインターフェイスを参照できます。
@Autowired private ReplyMapper mapper; @Overridepublic List<Reply> read(int bno) { return mapper.read(bno);}
その後
このようにReplyMapper形式で変数を宣言し、そのメソッドを呼び出ししてください。
こうして全ての過程が終わりました。
댓글 없음:
댓글 쓰기