以前の記事「Javaweb Practical Mall Project Development(i)」は、エンティティクラスとページネーションツールを作成しました。この記事では、MyBatisを使用してDAOレイヤーを作成します。
さらに、MyBatis APIドキュメントはリファレンスとして使用できます
1。MyBatisの使用
1.シェルフパッケージを紹介します
ここでは、mybatisとmysqlパッケージをlibに紹介します
2。データベース環境を構成するには、config.xmlを書き込みます
最初にコードを投稿してから、1つずつ説明します
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" name = "com.model"/> </typealiase> <環境デフォルト= "development"> <環境id = "development"> <transactionmanager type = "jdbc"/> <datasource type = "pooled"> <driver "value =" $ {driver} "/>> <property name =" $ {urname} "/> <USERNAME" value = "$ {username}"/> <プロパティ名= "password" value = "$ {password}"/> </dataSource> </環境> <! - > <環境id = "publish manager type =" jdbc "/> <datasource type =" pooled "/> </環境> </環境> </環境> </環境>最初のステップは、XMLファイル形式、つまりMyBatisが提供するテンプレートから直接コピーする必要があるDTDを導入することです。
<!doctype configuration public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
質問1
プロパティ関数は、対応するプロパティファイルを構成し、リソースを対応するルートを指定し、プロパティファイルでデータベースドライバー、URL、ユーザー名、パスワードなどを構成できます。以下を参照してください。このようにして、MyBatisは次のパラメーターを自動的に読み取り、$ {}を使用してXMLで参照できます。
driver = com.mysql.jdbc.driver url = jdbc:mysql:// localhost:3306/shop username = root password = 123456
質問2
Typealiaseは、指定されたパスの下にエイリアスを構成します。単一のエイリアスを構成できます<typealias type = "com.model.user" alias = "user"/>この方法で、com.model.userはエイリアスユーザーに変更されます。後ですべての名前を書く必要はありません。 Batch Modification <Package name = "com.model"/>を交換するには、ユーザーのみが必要です。このようにして、パッケージのすべてのクラスを変更でき、デフォルトのエイリアスはエンティティクラス名です。
質問3
環境はデータベース環境の構成に使用され、開発環境やリリース環境などの複数の環境を構成できます。デフォルトはデフォルト環境を指します
環境にはSがないことに注意してください。これは環境の下での環境を表しています。 IDによって区別されるため、IDは一意でなければなりません。
TransactionManagerは接続データベースタイプを表し、JDBCはJavaに接続します
DataSourceはデータソースモードを構成し、プールされたのは接続プールモードです。他のモードについては、公式ドキュメントにアクセスしてチェックアウトして、ニーズに応じて選択できます。
プロパティは、データベース接続を構成することです。名前を移動しないで、値= "ドライバー"を変更します。 {}の使用を使用して、上部プロパティファイルの構成を読み取ります。名前を一致させて読むことに注意してください。
3.マッパーマッピングSQLステートメントを書き込みます
ここでは、userdaoロードメソッド、つまりIDに基づいてユーザーを読み取ります。次のコードは、パブリックユーザーロード(int id)関数に相当します。 MyBatisの場合、「名前」に置き換えられた文字列タイプ#{name}など、タイプに応じて、交換#{}の交換が2つのタイプが自動的に引用されます。もう1つは$ {}の交換で、元の形式で直接置き換えられ、他のものは追加されません。
<?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" resultType = "user"> select * from user where id =#{id} </select> </mapper>最初のステップは、DTDヘッダーファイルを導入し、XMLファイルのルールを策定することです
タグを選択し、現在選択されたステートメントであることを示します
ID属性は、IDで参照される関数名と同等です
着信パラメータータイプを表すパラメータ型属性は、基本タイプまたはカスタムタイプを指定できます。カスタムタイプの場合、属性を取得するためにGETメソッドが自動的に呼び出されます。
resultTypeプロパティである戻り値タイプは、タイプを直接カスタマイズでき、セットメソッドを自動的に呼び出してクエリパラメーターを設定し、以降の記事でより多くのプロパティを使用します。
4。マッパーマップを呼び出します
呼び出す前に、最初にconfig.xmlでマッピングを構成する必要があります。ここで構成されているXMLはファイルパスであることに注意してください。
<mappers> <mapper resource = "com/model/user.xml"/> </mappers>
次に、テストクラスを書きます
public static void main(string [] args){try {inputstream is = resources.getResourceasStream( "config.xml"); //構成ファイルsqlsessionfactory factory = new sqlsessionfactorybuilder()。 session.selectone(user.class.getname()+"。load"、1); // load function system.out.println(user.getnickname()); // output nickname session.close.close(); // close session} catch(ioexception e){e.printstacktrace(); }}結果:
5.SQLSessionツールクラス
上記のようなテストクラスを書くことは面倒すぎるので、SQLSessionをカプセル化してDAO層の使用を容易にします
パッケージcom.util; import org.apache.ibatis.io.resources; Import org.apache.ibatis.session.sqlsession; Import org.apache.ibatis.session.ssessessfactory; import org.apache.ibatis.session.ssessionFactory; Import org.apach.ibatis.sissions.sclsession.sclsessed.sclsessextion. java.io.ioexception; Import java.io.inputStream;/*** 2016/2/23にNL101によって作成されました。 */public class sessionutil {private static sqlsessionfactory Factory = null; static {try {inputstream is = resources.getResourceasStream( "config.xml"); // configuration file factory = new sqlsessionfactorybuilder()。build(is); // configuration file} catch(ioexception e){e.printstacktrace(e.printstacktrace(); }} / ** get Session * @return * / public static sqlsession getsession(){return factory.opensession(); } / ** * close session * @param session * / public static void closessession(sqlsession session){if(session!= null)session.close(); session = null; }}上記はMyBatisの基本的な使用ですが、今ではDAOレイヤーのカプセルをカプセル化し始めます
2。ダオをカプセル化します
1.USERDAO.JAVA
パブリックユーザーロード(int id)IDに基づいてユーザーを取得します
上に書かれています
Public Boolean Add(ユーザーユーザー)ユーザーを追加します
XMLコード
<! - ユーザーの追加 - > <ID = "add" parametertype = "user"> inserting into user values(null、#{username}、#{password}、#{nickname}、#{type})</insert>Javaコード
/** /***ユーザーを追加* @paramユーザーユーザーを追加する* @return True Success* /public Boolean add(user user){int isadd = 0; sqlsession session = sessionutil.getSession(); try {isAdd = session.insert(user.class.getname()+"。add"、user); session.commit(); // submit} catch(例外e){session.rollback(); // rolleback提出が失敗した場合}最後に{sessionutil.closessess(session); } system.out.println(isadd); ISADD> 0を返します。 } public boolean delete(int id)ユーザーを削除しますXMLコード
<! - ユーザーの削除 - > <delete id = "delete" parametertype = "int">ユーザーから削除=#{id} </delete>Javaコード
/ ** * IDに基づいてユーザーを削除 * @Param IDにユーザーのIDを削除する * @return True Success */ public Boolean Delete(int id){int isdelete = 0; sqlsession session = sessionutil.getSession(); try {isdelete = session.delete(user.class.getName()+"。delete"、id); session.commit(); } catch(Exception e){session.rollback(); // retrent return system.out.println( "delete user faild"); e.printstacktrace(); }最後に{sessionutil.closessess(session); } isdelete> 0を返します。 } public Boolean Update(ユーザーユーザー)ユーザーを更新しますXMLコード
<! - ユーザーの変更 - > <update id = "upprod" parametertype = "user"> uspetwed users set username =#{username}、password =#{password}、nickname =#{nickname}、type =#{type} where id = {id} </update>Javaコード
/ ***ユーザーの更新* @paramユーザーユーザーは更新されます* @return true success*/ public boolean update(user user){int isupdate = 0; sqlsession session = sessionutil.getSession(); try {isupdate = session.delete(user.class.getName()+"。更新"、user); session.commit(); } catch(Exception e){session.rollback(); // retrent return system.out.println( "update faild"); e.printstacktrace(); }最後に{sessionutil.closessess(session); } isUpdate> 0を返します。 } publicユーザーログイン(String username、string password)ユーザーが存在するかどうかを判断しますXMLコード
<! - ユーザーログイン判断 - > <id = "login" parametertype = "string" resulttype = "user"> select * username =#{username} </select>Javaコード
/ ***ユーザーが存在するかどうかを判断します* @param username username* @param passwordパスワード* @return infection returnユーザーは存在しませんnull*/ public user login(string username、string password){user user = null; sqlsession session = sessionutil.getSession(); try {user = session.selectone(soapbinding.use.class.getName()+"。login"、username); //パスワードが正しくない場合、ユーザーをnullに設定しますif(!user.getPassWord()。equals(password)){user = null; }}最後に{sessionutil.closessess(session); } return user; } public Pager find(文字列名、文字列並べ替え、文字列順)ページネーション処理XMLコード:
ここでは動的なSQLが使用されています。動的なSQLに関しては、場所、if、選択などのタグの使用です。公式ドキュメントを参照できます。さらに、MyBatisでは、ヌルの概念は存在しません。たとえば、ユーザー= nullを渡しますが、交換すると「null」文字列に置き換えられます。この値が利用できない場合、それはnullです。
<! - ページネーションコード - > <id = "" ParameterType = "Map" resultType = "user"> select * fromユーザー<if same = "name!= null"> where(username like#{name}またはnickname like#{name})</if> orderページレコードの数 - > <id = "FindCount" parameterType = "map" resultType = "int"> select count(*)from user <if test = "name!= null"> where(username like#{name}またはnickname 'like#{name})</if> </select>Javaコード:全体として、それはまだ前の記事によって設計されたページネーションに基づいています
/****指定された条件に基づくページクエリ* @param名クエリ条件、nullは無条件* @paramソートソート条件を表します。ヌルはid* @param orderソート条件でソートを表します。 SystemContext.getPagesize(); //ページサイズpager <user> pagers = new Pager <>(); map <string、object> maps = new Hashmap <>(); if(name!= null &&!name.equals( "")){name = "%"+name+"%"; maps.put( "name"、name); } if(sort == null || sort.equals( "")){sort = "id"; //デフォルトでsorted} if(order == null || order.equals( "")){order = "asc"; // default sort} maps.put( "sort"、sort); maps.put( "Order"、Order); maps.put( "pagestart"、pagestart); maps.put( "pagesize"、pagesize); sqlsession session = sessionutil.getSession();リスト<ユーザー> datas = null; try {datas = session.selectlist(user.class.getName()+"。find"、maps); // record pagers.setdatas(datas); pagers.setPagesize(Pagesize); pagers.setpagestart(pagestart); int totalRecord = session.selectone(user.class.getName()+"。findCount"、Maps); //レコードの合計数を取得pagers.settotalRecord(totalRecord); pagers.setPageIndex(pagestart/pagesize+1); }最後に{sessionutil.closessess(session); }ページを返します。 }現在のプロジェクト構造
次の記事では、コードの執筆を容易にするために一般的なベースのaoを書きます。 Mybatisの他の特性の使用を学び続けます。読んでくれてありがとう。