1。mybatis+spring+mysqlの紹介と構成
1.1 MyBatisの紹介
MyBatisは、SQL、ストアドプロシージャ、および高度なマッピングをカスタマイズできる永続性レイヤーフレームワークです。 MyBatisは、JDBCコード、手動パラメーター設定、および結果セット検索のほとんどを排除します。 MyBatisは、単純なXMLとアノテーションのみを使用して、基本的なデータ型、インターフェイス、およびPOJOをデータベースレコードに構成およびマッピングします。 HibernateやApache OJBなどの「ワンストップ」ORMソリューションと比較して、MyBatisは「半自動化された」ORM実装です。
使用する必要があるJARパッケージ:MyBatis-3.0.2.Jar(MyBatisコアパッケージ)。 mybatis-spring-1.0.0.jar(春と組み合わせて)。
住所をダウンロード:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2MyBatis+Spring+MySQLシンプルな構成
1.2.1スプリング環境を構築します
(1)Maven Webプロジェクトを確立する。
(2)スプリングフレームワークと構成ファイルを追加します。
(3)必要なJARパッケージ(Spring Framework、MyBatis、MyBatis-Spring、Junitなど)をpom.xmlに追加します。
(4)web.xmlおよびspringの構成ファイルを変更します。
(5)JSPページと対応するコントローラーを追加します。
(6)テスト。
参照:http://limingnihao.iteye.com/blog/830409。 EclipseのMavenを使用してSpringMVCプロジェクトを構築します
1.2.2 MySQLデータベースの確立
学生コース選択管理データベースを確立します。
表:学生テーブル、クラステーブル、教師テーブル、コーステーブル、生徒コーステーブル。
論理関係:各生徒にはクラスがあります。各クラスはクラスの教師に対応しています。各教師は、1つのクラスのクラス教師になることができます。
次のSQLを使用してデータベースを構築し、最初に学生テーブルを作成し、データ(2つ以上のアイテム)を挿入します。
詳細については、Resource/SQLのプロジェクトソースファイルをダウンロードしてください。
/*データベースを作成*/データベースStudent_Managerを作成します。 Student_managerを使用してください。 / *****学生テーブルを作成*****/テーブルを作成しますdustent_tbl(255)プライマリキー、学生_name varchar(10)not null、suduent_sex varchar(10)、student_birthday date、class_id varchar(255)); /*学生データを挿入*/ inserting intouts_tbl(desutent_id、student_name、student_sex、desutent_birthday、class_id)values(123456、 'xxx'、 'femaly'、 '1980-08-01'、121546)
mysqlに接続するために使用される構成ファイルmysql.propertiesを作成します。
jdbc.driverclassname = com.mysql.jdbc.driver jdbc.url = jdbc:mysql:// localhost:3306/sustent_manager?user = root&password = limingnihao&useunicode = true&charaturecoding = utf-8
1.2.3 MyBatis環境を構築します
注文はカジュアルであり、現在の注文は、書かれたファイルをできるだけ変更できないためです。
1.2.3.1 Entity Class:StudentEntityの作成
Public Class StudentEntityはSerializable {private static final long serialversionuid = 3096154202413606831L;プライベートクラセントの世紀; Private Date StudentBirthday; Private String StudentID; Private String StudentName; Private String StudentSex; public cressentity getClassEntity(){return classentity; } public date getStudentBirthday(){return StudentBirthday; } public string getStudentId(){retuntent dustentID; } public string getStudentName(){return StudentName; } public string getStudentSex(){return sustentsex; } public void setClassEntity(Classentity Clessentity){this.classentity = classentity; } public void setStudentBirthday(date StudentBirthday){this.studentbirthday = studentbirthday; } public void setstudentid(string sustentid){this.studentid = dustentid; } public void setStudentName(String StudentName){this.studentname = sustentName; } public void setStudentSex(String StudentSex){this.studentsex = dustentsex; }} 1.2.3.2データアクセスインターフェイスを作成します
学生クラスの対応するDAOインターフェース:StudentMapper。
Public Interface StudentMapper {Public StudentEntity GetStudent(String StudentID); Public StudentEntity getStudentandClass(String StudentID); public List <StudentEntity> getStudentall(); public void insertStudent(StudentEntity Entity); public void deleteStudent(desutentity Entity); public void updateStudent(StudentEntity Entity); }1.2.3.3 SQLマッピングステートメントファイルを作成します
Student Class SQLステートメントファイルStudentMapper.xml
結果マップタグ:テーブルフィールドと属性のマッピング。
[タグ]を選択します:クエリSQL。
<?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" <resultmap type = "desustomentity" id = "sustentresultmap"> <id property = "desutentid" column = "desutent_id"/> <result property = "desuteNname" column = "desudent_name"/> <result property = "desutentsex" colummen = "desudent_sex"/> <result property = "desudentbirthday" <select id = "getstudent" parametertype = "string" resulttype = "dustentType" resudentmap = "sustentResultmap"> <! resultType = "com.manager.data.model.studentity" resultmap = "sustentresultmap"> <![cdata [select * from sudent_tbl]]> </select> </mapper>
1.2.3.4 MyBatis Mapper構成ファイルを作成します
src/main/resource:mybatis-config.xmlでmybatis構成ファイルを作成します。
Typealiaseタグ:エイリアスにクラスのエイリアスを与えます。 com.manager.data.model.studententityクラスは、学生の代わりに使用できます。
Mappersタグ:MyBatisのエンティティクラスのSQLマッピングステートメントファイルをロードします。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" type = "com.manager.data.model.studententity"/> </typealiase> <mappers> <mapper resource = "com/manager/data/maps/sustentmapper.xml"/> </mappers> </configuration>
1.2.3.5 Springの構成ファイルを変更します
主に、生産工場クラスのsqlsession:sqlsessionfactorybean(mybatis.springパッケージ)の豆を追加します。構成ファイルの場所とDataSourceを指定する必要があります。
データアクセスインターフェイスに対応する実装Bean。 MapperFactoryBeanを介して作成されました。インターフェイスクラスのフルネームとSQLSession Factory Beanへの参照を実行する必要があります。
<! - プロパティ構成ファイルのインポート - > <コンテキスト:プロパティプレイスホルダーlocation = "classql.properties" /> <bean id = "dataSource"> <プロパティ名= "driverclassname" value = "$ {jdbc.driverclassname}" />> <プロパティ名= " id = "transactionManager"> <プロパティ名= "dataSource" ref = "dataSource" /> < /bean> <bean id = "sqlsessionfactory"> <プロパティ名= "configlocation" value = "classpath:mybatis-config.xml" /> <プロパティname = "datasource" ref = " /< /<<> <> <> <<bean id = "sustentmapper"> <プロパティ名= "mapperinterface" value = "com.manager.data.studentmapper" /> <プロパティname = "sqlsessionfactory" ref = "sqlsessionfactory" /> < /bean> < /bean>また、マッパービーンを定義することも、注釈を使用することもできます。
生徒のマッパーを注釈に追加します
@Repository @Transactional Public Interface StudentMapper {}対応するニーズは、Dispatcher-servlet.xmlにスキャンを追加することです。
<bean> <プロパティ名= "AnnotationClass" value = "org.springframework.stereotype.repository"/> <Property name = "basepackage" value = "com.liming.manager"/> <プロパティ名= "
1.2.4 StudentMapperをテストします
SpringMVCテストを使用して、TestControllerを作成し、Tomcatを構成し、テスト用のindex.doページにアクセスします。
@Controller Public Class TestController {@Autowired Private StudentMapper StudentMapper; @RequestMapping(value = "index.do")public void indexpage(){desustonEntity entity = dustentmapper.getSudent( "10000013"); System.out.println( "name:" + entity.getStudentName()); }}Junitでのテスト:
@runwith(value = springjunit4classrunner.class)@contextconfiguration(value = "test-servlet.xml")public class sudentmappertest {@autowired private classmapper classmapper; @Autowired Private StudentMapper StudentMapper; @transactional public void getStudEntTest(){desustentity entity = dustentMapper.getStudent( "10000013"); system.out.println( "" + entity.getStudentid() + entity.getStudentName()); List <StudentSty> sustentlist = sustentMapper.getStudentall(); for(StudentEntity EntityTemp:StudentList){system.out.println(entityTemp.getStudentName()); }}} 2.mybatisのメイン構成ファイル
SQLSessionFactoryを定義する場合、MyBatisメイン構成ファイルを指定する必要があります。
<bean id = "sqlsessionfactory"> <プロパティ名= "configlocation" value = "classpath:mybatis-config.xml" /> <プロパティ名= "datasource" ref = "dataSource" /> < /bean> <
MyBatis構成の構成下のサブタグには次のものがあります。
構成| - プロパティ| - 設定| --- Typealiase | --- TypeHandlers | --- ObjectFactory | ---プラグイン| ---環境| ---環境| --- | --- | --- | --- | ------ | --- | __ DataSource | __ Mappers
2.1プロパティプロパティ
プロパティ構成ファイルは、java.propertiesに関連しています。プロパティのリソースを構成して.propertiesのパスを指定し、プロパティタグの下でプロパティの名前と値を構成します。 .propertiesファイルの対応するプロパティ値を置き換えることができます。
<! - プロパティ交換 - > <プロパティリソース= "mysql.properties"> <プロパティ名= "jdbc.driverclassname" value = "com.mysql.jdbc.driver"/> <プロパティ名= " value = "root"/> <プロパティname = "password" value = "limingnihao"/> </properties>
2.2設定
これは、MyBatisが操作プロセスの詳細を変更する重要なステップです。次の表には、これらの設定、意味、およびデフォルト値について説明します。
設定 | 説明する | 許可された値 | デフォルト値 |
cacheenabled | この構成ファイルの下のすべてのキャッシュは、グローバルにオン/オフ設定です。 | true |間違い | 真実 |
lazyloadingEnabled | グローバル設定怠zyなロード。 「false」に設定すると、関連するすべてのものが初期化され、ロードされます。 | true |間違い | 真実 |
AggressivelazyLoading | 「真」に設定すると、怠zyなロードオブジェクトはすべての怠zyなプロパティによってロードされる場合があります。それ以外の場合、各プロパティは必要に応じてロードされます。 | true |間違い | 真実 |
MultiPleresUltSetsEnabled | 許可し、単一のステートメントが複数のデータセットを返すことを許可しません(ドライバーの要件に応じて) | true |間違い | 真実 |
usecolumnlabel | 列名の代わりに列ラベルを使用します。ドライブごとに異なるアプローチがあります。ドライブドキュメントを参照するか、これら2つの異なるオプションを使用してテストしてください。 | true |間違い | 真実 |
UseGeneratedKeys | JDBCがプライマリキーを生成できるようにします。ドライブサポートが必要です。 Trueに設定されている場合、この設定は生成されたプライマリキーを強制します。一部のドライブは互換性がありませんが、実行できます。 | true |間違い | 間違い |
AutomappingBehavior | MyBatisがデータテーブルフィールドをオブジェクトのプロパティに自動的にマップするかどうか、および方法を指定します。部分的な結果は、ネストされた結果なしで、自動的に単純にマッピングされます。 Fullは、すべての複雑な結果を自動的にマッピングします。 | なし、 部分的、 満杯 | 部分的 |
DefaultExeCutortype | 執行者を構成して設定すると、Simple Exectorは他のステートメントを実行します。再利用執行者は、準備されたステートメントステートメントステートメントを再利用する場合があり、バッチエグゼキューターはステートメントとバッチの更新を繰り返し実行することができます。 | 単純 再利用 バッチ | 単純 |
defaultStatementTimeout | 時間制限を設定して、ドライブがデータベースがタイムアウトに応答するのを待つ時間を判断する | ポジティブ整数 | 設定されていません (null) |
<settings> <setting name = "cacheenabled" value = "true" /> <setting name = "lazyloadingEnabled" value = "true" /> <setting name = "balue =" true " /> <setting name =" usecolumnlabel "value =" true " />> <setting =" " /fals" " /field =" fals "" fals = "" /> "fals =" fals = "fals" /> < /settings>
2.3 Typealiaseタイプエイリアス
タイプエイリアスは、Javaタイプの略語です。
これは、長いJavaクラス名として短縮されたXML構成に単に関連付けられています。例えば:
<TypeAlias> <TypeAlias Alias = "userEntity" type = "com.manager.data.model.userentity" /> <typealias alias = "desustentity" type = "com.manager.data.model.studententity" /> <typealias alias = "com.manager.data.data.data.data </typealias>
この構成では、「com.manager.data.model.studententity」の代わりに「dustentertity」をどこでも使用できます。
通常のJavaタイプには、多くの組み込みタイプエイリアスがあります。どちらもケースに依存しないものであり、過負荷の名前が原因で、ネイティブタイプの特別な取り扱いに注意を払う必要があります。
エイリアス | マップのタイプ |
_バイト | バイト |
_長さ | 長さ |
_短い | 短い |
_int | int |
_整数 | int |
_ダブル | ダブル |
_フロート | フロート |
_boolean | ブール |
弦 | 弦 |
バイト | バイト |
長さ | 長さ |
短い | 短い |
int | 整数 |
整数 | 整数 |
ダブル | ダブル |
フロート | フロート |
ブール | ブール |
日付 | 日付 |
小数 | BigDecimal |
BigDecimal | BigDecimal |
物体 | 物体 |
地図 | 地図 |
ハッシュマップ | ハッシュマップ |
リスト | リスト |
arrayList | arrayList |
コレクション | コレクション |
イテレーター | イテレーター |
2.4 TypeHandlersタイプのハンドル
MyBatisがプリプロセシングステートメントでパラメーターを設定する場合でも、結果セットから値を取得する場合でも、タイププロセッサを使用して、得られた値を適切な方法でJavaタイプに変換します。次の表には、デフォルトのタイププロセッサについて説明します。
タイププロセッサ | Javaタイプ | JDBCタイプ |
booleantypehandler | ブール、ブール | 互換性のあるブール値 |
ByteTypeHandler | バイト、バイト | 互換性のある番号またはバイトタイプ |
ショートタイプハンドラー | 短い、短い | 互換性のあるデジタルまたは短いフォーム |
integertypehandler | 整数、int | 互換性のあるデジタルおよび整数 |
longtypehandler | 長く、長い | 互換性のあるデジタルまたは長いモデル |
floattypehandler | フロート、フロート | 互換性のあるデジタルまたは単一の精度のフローティングポイントタイプ |
DoubleTypeHandler | ダブル、ダブル | 互換性のあるデジタルまたは二重精度の浮動ポイントタイプ |
bigdecimaltypehandler | BigDecimal | 互換性のある数字または小数点以下の10進数 |
StringTypeHandler | 弦 | charおよびvarcharタイプ |
clobtypehandler | 弦 | CLOBおよびLONGVARCHARタイプ |
nstringtypehandler | 弦 | NvarcharおよびNCHARタイプ |
nclobtypehandler | 弦 | nclobタイプ |
bytearraytypehandler | バイト[] | 互換性のあるバイトストリームタイプ |
blobtypehandler | バイト[] | BlobおよびLongVarbinaryタイプ |
DateTypeHandler | 日付(java.util) | タイムスタンプタイプ |
DateOnlyTypeHandler | 日付(java.util) | 日付タイプ |
TimeNlyTypeHandler | 日付(java.util) | 時間の種類 |
sqltimestamptypehandler | タイムスタンプ(java.sql) | タイムスタンプタイプ |
sqldateTypehandler | 日付(java.sql) | 日付タイプ |
SQLTIMETYPEHANDLER | 時間(java.sql) | 時間の種類 |
ObjectTypeHandler | どれでも | その他または不特定のタイプ |
enumtypehandler | 列挙タイプ | VARCHAR-コードとして保存されている互換性のある文字列タイプ(インデックスなし)。 |
public class limingstringtypehandlerは、typehandler {@override public void setparameter(preated -statements ps、int i、object parameter、jdbctype jdbctype)sqlexception {system.out.println( "setParameter -parameter:" +((string)parameter) ps.setString(i、((string)parameter)); } @Override public Object getResult(resultset rs、string columnname)slows sqlexception {system.out.println( "getResult -columnName:" + columnName); R.GetString(columnName)を返します。 } @Override public Object getResult(callablestatement cs、int columnindex)sqlexception {system.out.println( "getResult -columnIndex:" + columnindex); cs.getString(columnindex)を返します。 }}構成ファイルのTypeHandlersにTypeHandlerタグを追加します。
<TypeHandlers> <TypeHandler javatype = "string" jdbctype = "varchar" handler = "liming.student.manager.type.limingstringtypehandler"/> </typehandlers>
2.5 ObjectFactory Object Factory
MyBatisが結果オブジェクトの新しいインスタンスを作成するたびに、ObjectFactoryが使用されます。デフォルトのObjectFactoryは、ターゲットクラスのコンストラクターを使用してインスタンスを作成することと違いはありません。マッピングされたパラメーターが既にある場合、パラメーターを備えたコンストラクターを使用することもできます。
ObjectFactoryのデフォルト操作を書き直すと、org.apache.ibatis.Reflection.Factory.DefaultObjectFactoryを継承することにより、独自の操作を作成できます。
ObjectFactoryインターフェイスは簡単です。作成のための2つの方法が含まれています。1つはデフォルトのコンストラクターを扱うことであり、もう1つはパラメーターコンストラクターを扱うことです。最終的に、SetPropertiesメソッドを使用してObjectFactoryを構成できます。 ObjectFactoryインスタンスを初期化した後、ObjectFactory Elementボディで定義されているプロパティは、SetPropertiesメソッドに渡されます。
Public Class LimingObjectFactoryは、defaultObjectFactoryを拡張します{private static final long serialversionuid = -399284318168302833l; @OverrideパブリックオブジェクトCreate(クラスタイプ){return super.create(type); } @Override public Object create(class type、list <class> constructorargtypes、list <object> constructorargs){system.out.println( "create -type:" + type.toString()); return super.create(type、constructorargtypes、constructorargs); } @Override public void setProperties(プロパティプロパティ){System.out.println( "setProperties -properties:" + properties.toString() + "、someproperty:" + properties.getProperty( "someproperty")); super.setProperties(プロパティ); }}ObjectFactoryタグを構成ファイルに追加します
<ObjectFactory Type = "liming.student.manager.configuration.limingObjectFactory"> <プロパティname = "someproperty" value = "100"/> </objectFactory>
2.6プラグインプラグイン
MyBatisを使用すると、特定の時点でマップされたステートメントによって実行されたコールを傍受できます。デフォルトでは、MyBatisでは、プラグインがメソッド呼び出しを傍受できるようにします。
これらのクラスのメソッドの詳細は、各メソッドの署名を調べることで見つけることができ、そのソースコードはMyBatis Distributionパッケージで入手できます。あなたは、あなたが監視の呼び出し以上のことをしていると仮定して、あなたの最優先の方法の動作を理解する必要があります。特定の方法を変更またはオーバーライドしようとすると、MyBatisのコアを破ることができます。これは低レベルのクラスと方法であり、慎重にプラグインを使用する必要があります。
プラグインを使用することは、彼らが提供する非常にシンプルなパワーです。インターセプターインターフェイスの簡単な実装、および傍受する指定された署名を決定します。
2.7環境
MyBatisは、複数の環境で構成できます。これにより、複数のデータベースなどに対応するようにSQLをマップするのに役立ちます。
2.8マッパーマッパー
MyBatisにSQLマッピングを探す場所を伝える声明を以下に示します。 ClassPathでリソース参照を使用するか、文字を使用して正確なURLリファレンスを入力できます。
例えば:
<マッパーリソース= "com/manager/data/maps/usermapper.xml"/> <mapper resource = "com/manager/data/maps/sustentmapper.xml"/> <mapper resource = "com/manager/data/maps/classmapper.xml"/> </mappers>