MyBatisは、プレーンSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする優れた永続レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードとパラメーターの手動設定と、結果セットの検索カプセル化を排除します。 MyBatisは、構成とオリジナルマッピング、マッピングインターフェイス、JavaのPOJO(プレーンオールドJavaオブジェクト)に、データベース内のレコードに簡単なXMLまたはアノテーションを使用できます。
1対1のマッピング
人生では、学生やIDカードなどの1対1の例がまだあります。または、私たちの国では、一夫一婦制システムが実装されています。その後、学生とIDカード用のIDカードは1つだけです。もちろん、各IDカードにIDカードは1つだけです。
データベーススクリプト:
-deleteデータベースデータベースが存在する場合はデータベースを削除します。-データベースの作成マイバティスデフォルトの文字セットUTF8が存在しない場合はデータベースを作成します。テーブル学生(SID INT(255)、Sname Varchar(32)、SCID INT(255)、制約PK_SIDプライマリキー(SID)、Constraint FK_Scid外部キー(SID)参照カード(CID));値(1、 'haha'、1);
新しいone2one.card.javaクラスを作成します
パッケージone2one; Import java.io.serializable;/*** id card*@author Administrator **/ @suppresswarnings( "serial")Public class Card Card exprences serializable {private integer cid; private string num; public getcid(){return cid;} public setcid(integer cid;} {return num;} public void setnum(string num){this.num = num;}}}新しいone2one.student.javaクラスを作成します
パッケージone2one; import java.io.serializable;/*** sudine*@author Administrator **/ @suppresswarnings( "serial")パブリッククラスの学生はシリアル化可能{プライベートstring suname; private card card; public integer getsid(){return sid;} public void setsid(integer sid;} getSname(){return sname;} public void setsname(string sname){this.sname = sname;} public card getcard(){return card;} public void setcard(card card){this.card = card;}}}}One2oneパッケージの下に新しいcardmapper.xmlファイルを作成します
<?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" type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultmap> </mapper>
同様に、one2oneパッケージの下に新しいstudentmapper.xmlファイルを作成します
<?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" type = "one2one.student" id = "sudentmap"> <id column = "sid" property = "sid"/> <result column = "sname" property = "sname"/> <! - 関連するフィールドを書き込まない - > </resultmap> S、カードChere where s.scid = c.cidおよびs.sid =#{sid} </select> </mapper>srcの下に新しいmybatis.cfg.xmlファイルを作成し、sustentmapper.xmlとcardmapper.xmlファイルを含めます
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" default = "mysql_developer"> <! - mysql環境情報を接続 - > <環境ID = "mysql_developer"> <! - mybatisはJDBCトランザクションマネージャーを使用します - > <トランザクションマネージャータイプ= "JDBC"/> <! - mybatisは接続を使用します。データベースとの対話 - > <プロパティname = "driver" value = "com.mysql.jdbc.driver"/> <プロパティname = "url" value = "jdbc:mysql://127.0.0.0.1:3306/mybatis"/>> <プロパティname "値=" root "/>>> <プロパティname" value = "mysqladmin"/> <dataSource> </entument> <! - connect oracle環境情報 - > <環境id = "oracle_developer"> <! - mybatisはjdbcトランザクションマネージャーを使用します - > <transactionmanager type = "jdbc"/> <! - mybatis connections obsed "> 4データベースと対話するための必要なプロパティ - > <プロパティ名= "ドライバー"値= "oracle.jdbc.driver.oracledriver"/> <プロパティ名= "url" value = "jdbc:oracle:shin:@127.0.1:1521:orcl"/>> <プロパティname "value =" scott "/> <property name" value = "Tiger"/> </dataSource> </Environment> </Environments> <! - マップファイルの読み込み - > <マッパー> <マッパーリソース= "one2one/cardmapper.xml"/> <mapper resource = "one2one/sudentmapper.xml"/>> </mappers> </confyuration>
UTILパッケージの下に新しいツールクラスmybatisutil.javaクラスを作成する
パッケージutil; Import java.io.ioexception; Import java.io.reader; Import java.sql.connection; Import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.clsessionfactory; org.apache.ibatis.session.sqlsessionfactorybuilder; public class mybatisutil {private stathic threadlocal <sqlsession> swerllocal = new swerchlocal <sqlsession>(); public static sqlsessionfactory sqlsessionfactory; src /mybatis.cfg.xmlstatic {try {reader reader = resources.getResourceasReader( "mybatis.cfg.xml"); sqlsessionfactorybuilder()。 sqlSession* @return*/public static sqlsession getsqlsession(){//現在のswreetsqlsession sqlsession = threadlocal.get(); if(sqlsession == null){if(sqlsessionfactory!= null){sqlsession = sqlsession = sqlsession = sqlsession = sqlsession = sqlsessionfactory();現在のthreadthreadlocal.set(sqlsession);}} return sqlsession;}/*** close sqlsessionとcourrent static void closesqlsession(){// null){// sclsession object sqlsession.close(); //現在のスレッドとsqlsession threadlocal.remove();}} // public static void main(string [] args){sqlsession sqlsession = mybatisutil.getsqlsession(); connection conn(); sqlsession.getConnection(); system.out.println(conn!= null? "接続成功": "接続失敗");}}新しいPersistence LayerクラスStuentCarddao.javaクラスを作成します
パッケージone2one; import org.apache.ibatis.session.sqlsession; Import org.junit.test; import util.mybatisutil;/*** persistence layer*@Author Administrator **/Public Class StudentCarddao {/***クエリ学生番号例外{sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession(); return sqlsession.selectone( "studentnamespace.findbyid"、id);} catch(exception e){e.printstacktrace();};}最後に{mybatisutil.closesqlsession();}} //クエリ学生番号1の情報とIDカード情報@testpublic void testfindbyid()throws excepution {sudintscarddao = new StudentCarddao();学生学生=; dao.findbyid(1); system.out.println(desutent.getSid()+":"+sustent.getsname()}}}現時点では、学生No. 1の名前のみをクエリすることができますが、現時点でのカード属性の値はnullであるため、その身元番号を照会することはできません。
<select id = "findbyid" parametertype = "integer" resultmap = "sustentmap">
MyBatisがこの文を解析する場合、クエリデータをSIDとSNAMEにカプセル化することのみができます。
StudentMapper.xmlで
<resultmap inpy = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <result column = "num"/> </resultmap>
増加
<! - cardmapper.xmlファイルにマッピング情報を紹介するプロパティは、学生の関連するプロパティを表します - > <Associationプロパティ= "card" resultmap = "cardnamespace.cardmap"/>
次に、この時点でのStudentMapper.xmlの完全なコンテンツは次のとおりです。
<?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" type = "one2one.student" id = "sudentmap"> <id column = "sid" property = "sid"/> <result column = "sname" property = "sname"/> <! - cardmapper.xmlファイルプロパティのマッピング情報を紹介します。 ID = "FindByID" parameterType = "integer" resultmap = "sustentmap"> Select S.Sid、S.Sname、C.cid、c.num、c.num from Student s、card c Where s.scid = c.cidおよびs.sid = {sid} </select> </mapper>これで、学生ID番号をテストできます
Persistence Layerクラスのテスト方法StuentCarddao.javaクラスを変更する
// testpublic void testfindbyid()throws exception {desutedcarddao dao = new StudentCarddao(); Student Student = dao.findbyid(1); system.out.println()+":"+sudine.getsname()+":"+susted.getCard();同様に
「haha」の学生情報とIDカード情報をsuduentdao.javaクラスに照会する方法を追加する
/***「haha」学生の情報とIDカードの情報を照会* @param name* @return* @throws例外*/パブリック学生findbyname(string name)throws exception {sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession() (例外e){e.printstacktrace(); eを投げる;}最後に{mybatisutil.closesqlsession();}}テスト方法を追加します
// testpublic void testfindbyname()throws exception {desudentcarddao dao = new StudentCarddao(); Student Student = dao.findbyname( "haha"); system.out.println(desudent.getSid()+":"+sudints.getSname()+"もちろん、今すぐテストすると、sustentmapper.xmlファイルで<select>を構成しなかったために惨めに死にます。
<select id = "findbyname" parametertype = "string" resultmap = "sustentmap"> Select S.Sid、S.Sname、C.Cid、C.Num、C.Num、Card Chere S.Scid = C.CidおよびS.Sname =#{sname} </select>このようにして、テストは成功します。ミッションは行われます。
完全なコードは次のとおりです。
MySQLデータベーススクリプト
-deleteデータベースデータベースが存在する場合はデータベースを削除します。-データベースの作成マイバティスデフォルトの文字セットUTF8が存在しない場合はデータベースを作成します。テーブル学生(SID INT(255)、Sname Varchar(32)、SCID INT(255)、制約PK_SIDプライマリキー(SID)、Constraint FK_Scid外部キー(SID)参照カード(CID));値(1、 'haha'、1);
ツールクラスmybatis.javaクラス
パッケージutil; Import java.io.ioexception; Import java.io.reader; Import java.sql.connection; Import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.clsessionfactory; org.apache.ibatis.session.sqlsessionfactorybuilder; public class mybatisutil {private stathic threadlocal <sqlsession> swerllocal = new swerchlocal <sqlsession>(); public static sqlsessionfactory sqlsessionfactory; src /mybatis.cfg.xmlstatic {try {reader reader = resources.getResourceasReader( "mybatis.cfg.xml"); sqlsessionfactorybuilder()。 sqlSession* @return*/public static sqlsession getsqlsession(){//現在のswreetsqlsession sqlsession = threadlocal.get(); if(sqlsession == null){if(sqlsessionfactory!= null){sqlsession = sqlsession = sqlsession = sqlsession = sqlsession = sqlsessionfactory();現在のthreadthreadlocal.set(sqlsession);}} return sqlsession;}/*** close sqlsessionとcourrent static void closesqlsession(){// null){// sclsession object sqlsession.close(); //現在のスレッドとsqlsession threadlocal.remove();}} // public static void main(string [] args){sqlsession sqlsession = mybatisutil.getsqlsession(); connection conn(); sqlsession.getConnection(); system.out.println(conn!= null? "接続成功": "接続失敗");}}mybatis.cfg.xmlファイル
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" default = "mysql_developer"> <! - mysql環境情報を接続 - > <環境ID = "mysql_developer"> <! - mybatisはJDBCトランザクションマネージャーを使用します - > <トランザクションマネージャータイプ= "JDBC"/> <! - mybatisは接続を使用します。データベースとの対話 - > <プロパティname = "driver" value = "com.mysql.jdbc.driver"/> <プロパティname = "url" value = "jdbc:mysql://127.0.0.0.1:3306/mybatis"/>> <プロパティname "値=" root "/>>> <プロパティname" value = "mysqladmin"/> <dataSource> </entument> <! - connect oracle環境情報 - > <環境id = "oracle_developer"> <! - mybatisはjdbcトランザクションマネージャーを使用します - > <transactionmanager type = "jdbc"/> <! - mybatis connections obsed "> 4データベースと対話するための必要なプロパティ - > <プロパティ名= "ドライバー"値= "oracle.jdbc.driver.oracledriver"/> <プロパティ名= "url" value = "jdbc:oracle:shin:@127.0.1:1521:orcl"/>> <プロパティname "value =" scott "/> <property name" value = "Tiger"/> </dataSource> </Environment> </Environments> <! - マップファイルの読み込み - > <マッパー> <マッパーリソース= "one2one/cardmapper.xml"/> <mapper resource = "one2one/sudentmapper.xml"/>> </mappers> </confyuration>
card.java and student.java
パッケージone2one; Import java.io.serializable;/*** id card*@author Administrator **/ @suppresswarnings( "serial")Public class Card Card exprences serializable {private integer cid; private string num; public getcid(){return cid;} public setcid(integer cid;} {return num;} public void setnum(string num){this.num = num;}} package one2one; import java.io.serializable;/*** sustent **/ @suppresswarnings( "serial")Public Class Student Student Emptement sid;} public void setsid(integer sid){this.sid = sid;} public string getsname(){return sname;} public void setsname(this.sname){this.sname){this.sname;} public card getcard(card.javaのマッピングファイルcardmapper.xmlファイル
<?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" type = "one2one.card" id = "cardmap"> <id column = "cid" property = "cid"/> <result column = "num" property = "num"/> <resultmap> </mapper>
dustent.java class studentmapper.xmlファイルに対応するマッピングファイル
<?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" type = "one2one.student" id = "sudentmap"> <id column = "sid" property = "sid"/> <result column = "sname" property = "sname"/> <! - cardmapper.xmlファイルプロパティのマッピング情報を紹介します。 ID = "FindByID" parameterType = "integer" resultMap = "sustentmap"> Select S.Sid、S.Sname、C.Cid、C.Num、C.Num from Student S、Chere chere chere s.sid = c.sid =#{sid} S.SID、S.SNAME、C.CID、C.NUM STUDENT S、CARD C WHERE S.SCID = C.CIDおよびS.SNAME =#{sname} </select> </mapper>Persistence Layer Class StudentCarddao.javaクラス
パッケージone2one; import org.apache.ibatis.session.sqlsession; Import org.junit.test; import util.mybatisutil;/*** persistence layer*@Author Administrator **/Public Class StudentCarddao {/***クエリ学生番号例外{sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession(); return sqlsession.selectone( "studentnamespace.findbyid"、id);} catch(exception e){e.printstacktrace();};}最後に{mybatisutil.closeSqlSession();}}/*** query "haha" desute information and idカード情報* @param name* @return* @throws例外*/パブリック学生findbyname(string name)throws {sqlsession sqlsession = null; try {sqlsession = mybatisutil.getsqlsession(); sqlSession.selectOne("studentNameSpace.findByName", name);} catch (Exception e) {e.printStackTrace();throw e;} finally{MyBatisUtil.closeSqlSession();}}//Test query student No. 1's information and ID card information @Testpublic void testFindById() throws Exception{StudentCardDAO dao = new StudentCarddao();学生学生= DAO.FINDBYID(1); system.out.println(Student.getSid()+":"+sustent.getSname()+"+"+sustent.getCard()。 dao = new StudentCarddao(); sudent sustent = dao.findbyname( "haha"); system.out.println(susteant.getSid()+":"+sustent.getsname()+":"+sustent.getCard()。getnum();}}}}上記は、編集者が紹介したMyBatisの1対1マッピングに関する最初のチュートリアルです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!