環境整備
このシステムが使用する環境は、
- エクリプス
- jdk1.8
- .mysql データベース
- トムキャット 8.5
- データベース ツール: navicat
環境が構成されない場合は、別の記事に移動してください.
Eclipse はオフラインで Maven プロジェクトをビルドし、ローカル ウェアハウスを構成し、mybatis プロジェクトを作成します
問題分析
この場合、製品システムのデータベースdb_goodsにある製品テーブルtb_goodsの詳細が表示されます。テーブルの設計は次のとおりです。
分野 | タイプ | 長さ | 空でない | 例証する |
---|---|---|---|---|
ID | 整数 | 11 | はい | 主キー、自動インクリメント |
名前 | varchar | 32 | はい | 商品名 |
価格 | 小数 | (6,2) | はい | 商品の価格 |
店舗番号 | 整数 | 5 | はい | 商品株 |
商品の種類 | varchar | 6 | はい | 商品タイプ(現物、仮想取引商品) |
in_time | 日付時刻 | はい | 製品保管時間 |
この場合、データテーブルに対して追加、削除、変更、およびクエリが実装されます。
達成
データベース、データ テーブルの作成、テスト データの追加
mysql サービスを開く
方法 1. コマンドを使用して mysql サービスを開きます
net start mysql
方法 2. タスク マネージャー (Xiaobai に適しています) から開き、
タスク管理を開き、サービス オプションを見つけ、下にスワイプして mysql サービスを見つけます。状態が停止していることを示している場合は、サービスを右クリックして実行を選択します。 .
mysql に接続してデータベースを作成する
サービスを開いた後、navicat ソフトウェアを使用して接続します。
問題分析から、データベース名が db_goods で、テーブル名が tb_goods であることが分析されました。
navicat ソフトウェアを使用してデータベースを作成する
データベース名を入力し、エンコーディングと照合を選択します。
作成が完了すると、データベース リストの列に追加のデータベースが表示されます。
デザインからデータ テーブルを作成する
ダブルクリックして、先ほど作成したデータ db_goods を開きます。開封後は色が変わり、グレーではなくなります。次に、右クリックして [新しいテーブル] を選択します。
テーブルの設計ルールに従って、テーブルの設計情報を入力します。その中で、id フィールドは主キーと自動インクリメントの 2 つの設定を追加する必要があります。
テーブルの設計が完了したら、[保存] をクリックし、ポップアップ入力ボックスに (質問から抽出した) テーブル名 tb_goods を入力します。
[OK] をクリックすると、追加のテーブルがデータベースに表示されます。
テストデータを追加
tb_goods データ テーブルをダブルクリックして、テーブルのプレビュー ページに入ります。パネルの下部にある追加記号をクリックして、データを追加します。
備考: データを入力する場合、id フィールドは自己インクリメントであるため、この列に値を入力する必要はありません。
データベース スクリプトのエクスポート
データを追加すると、ビジュアル操作でデータベース スクリプトをエクスポートできます。エクスポートするデータベースを右クリックし、[SQL ファイルのダンプ] を選択します。タイプは構造体とデータです。
デスクトップを保存場所として選択します。
データベースをエクスポートする目的は、現在設計されているテーブルと格納されているデータ コンテンツを保存することです。次回必要になったときに、スクリプトをデータベースにインポートして使用することができます。
プロジェクト実現
動的 Web プロジェクトを作成する
Eclipse を開き、左上隅にあるツールバーをクリックして、[ファイル] オプションを見つけます。動的 Web プロジェクト オプションを見つけて作成します。
そのようなオプションがない場合は、最後のその他のオプションを見つけます。
ポップアップ ボックスで、まず Web ディレクトリを見つけて展開すると、[動的 Web プロジェクト] オプションが表示されます。
次に、[次へ] オプションをクリックします。
ポップアップ ボックスにプロジェクト名を入力します。もちろん、必要に応じて他のデフォルト設定を変更してください。
プロジェクトが正常に作成されると、ディレクトリ構造は次の図のようになります。
プロジェクトが作成されたら、この場合に必要な jar パッケージをインポートします。各jarパッケージの対応紹介は以下の通り
瓶パッケージ | 例証する |
---|---|
mysql-connector-java-5.1.14.jar | mysql接続用のjarパッケージ |
mybatis-3.4.6.jar | mybatis データベース フレームワークが依存する jar パッケージ |
jstl-1.2.jar | jsp ページで使用される jstl タグ ライブラリ |
標準-1.1.2.jar | jstl タグ ライブラリで使用される標準ライブラリ |
上記の 4 つのタグ ライブラリをプロジェクトの依存ディレクトリ、つまり WebContent ディレクトリの下の Web-Info の lib フォルダーに追加します。
初めてコピーするときは、右クリックしてこれらのタグを選択し、[ビルド パス] を選択して [ビルド パスに追加] を選択する必要があります。これらの jar パッケージをプロジェクトのビルド パスに追加します。そうしないと、プロジェクトで有効になりません。
mybatis の構成
プロジェクトの src ディレクトリに mybaits-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>
<!-- 配置实体类所在的包 -->
<typeAliases>
<package name="com.lvan.pojo"/>
</typeAliases>
<environments default="devlopment">
<environment id="devlopment">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db_goods"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件所在的包 -->
<mappers>
<package name="com.lvan.mapper"/>
</mappers>
</configuration>
主なことは、2 つのパッケージと mysql 接続プールの構成情報を覚えておくことです。
構成ファイルに従って、対応するパッケージを作成します。
上の構造と同じです。
データ テーブルに基づいてエンティティ クラスを作成する
pojo パッケージの下に作成された、対応するエンティティ クラス。
クラス名の命名規則は、一般的に、データ テーブルのプレフィックスを削除し、後続の単語の最初の文字を大文字にし、下線があれば削除し、下線の後の最初の文字を大文字にすることです。キャメル ケースの命名規則に従います。
たとえば、
この単純なケースのように tb_goods のエンティティ クラス名が Goods である場合、属性名はフィールド名と一致している必要があります。ただし、データ型の互換性に注意してください。
通常、decimal は double int に対応し、int に対応し、その他の文字列は基本的に互換性を確保できますが、String を完全に使用することはお勧めしません。
エンティティ クラスでカプセル化メソッドを生成する
Mr.セッターとゲッターメソッドを生成します。
下の [生成] ボタンを選択して生成します。
効果図は以下の通りです。
toString メソッドを生成する
エフェクト ダイアグラムは次のとおりです
。 この時点で、エンティティ クラスが作成されます。
インターフェイスの書き込み
mybatis-config.xml 設定ファイルによると、マッピング ファイルは com.lvan.mapper パッケージに記述されている必要があります.package タグを使用して、スキャン スコープをパッケージとして宣言することに注意してください。mapper タグを使用する場合は、対応する mapper.xml ファイルを指定する必要があります。
マッパー パッケージの下に、インターフェイス ファイルを作成します。
インターフェイス ファイルの名前は、次のようにエンティティ クラス名の後に Mapper が続きます。
つまり、インターフェイス ファイルで実装するメソッドを宣言するだけです。
要件に従って、この場合、製品テーブルを追加、削除、変更、および照会する必要があります。したがって、製品宣言を照会するためのインターフェースは次のとおりです。
以下は、インターフェースの例です。
- クエリの商品をキーワードで検索し、クエリの内容が空文字の場合はすべてのクエリです
List<Goods> query(@Param("key")String key);
- 製品を更新するには、製品を更新する場合は、エンティティ クラス オブジェクトを使用して更新します。つまり、エンティティ クラス オブジェクトが持つ属性に応じて、テーブルのどのフィールドが変更されますか?
int updateGoods(Goods goods);
- 製品の追加 製品を追加するには、エンティティ クラス オブジェクトを追加する必要もあり、オブジェクトの属性を使用して SQL ステートメントで値を取得します。
int addGoods(Goods goods);
- 製品の削除 製品の削除は ID に基づいています。つまり、指定された番号のデータ レコードを削除します。
int deleteGoods(@Param("id")String id);
- IDに従って対応するエンティティオブジェクトを取得し、製品を編集するときに製品情報をページにエコーできます
Goods getGoodsById(@Param("id")String id);
コード構造は次のとおりです。
つまり、上記のインターフェイス宣言が完了すると、基本的に製品テーブルの管理が実現されます。
マッピングファイルの書き込み
上記のチュートリアルでは、ケースのニーズに応じて、対応するインターフェースが作成されています。このセクションの内容は、上記のインターフェースを 1 つずつ実装することです。
- インターフェイスに対応するマッピング ファイルを作成します。サフィックス名は .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">
<mapper namespace="xxx.xxx.XXXMapper">
</mapper>
注: ファイル名は、インターフェイス ファイル名と一致する必要があります。そうしないと、非互換性などの問題が発生します。
2. 名前空間をバインドする
インターフェイス ファイルとマッピング ファイルのファイル名は、カップルの服を着ていると理解できるように一致させる必要があります。
3.
インターフェイス クエリ インターフェイスの実装を
実現する実装コードは次のとおりです。
<?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文件就是对应的男朋友,女朋友负责吩咐,男朋友负责做事-->
<mapper namespace="com.lvan.mapper.GoodsMapper">
<!-- 查询 -->
<select id="query" resultType="Goods">
select * from tb_goods where name like concat('%',#{key},'%')
</select>
</mapper>
更新インターフェースの実装:
更新インターフェースのコードは次のとおりです。
<!-- 更新商品的实现-->
<update id="updateGoods">
update tb_goods set
<if test="name!=null">
name=#{name},
</if>
<if test="price!=0.0">
price=#{price},
</if>
<if test="store_number!=0">
store_number=#{store_number},
</if>
<if test="goods_type!=null">
goods_type=#{goods_type},
</if>
<if test="in_time!=null">
in_time=#{in_time},
</if>
id=#{id}
where id=#{id}
</update>
インターフェイスの実装を追加します。
具体的な実装コードは次のとおりです。
<!-- 添加商品 -->
<insert id="addGoods">
insert int tb_goods(name,price,store_number,goods_type,in_time)
values (#{name},#{price},#{store_number},#{goods_type},now())
</insert>
- インターフェイス実装の削除
実装コードは次のとおりです。
<delete id="deleteGoods">
delete from tb_goods where id=#{id}
</delete>
- ID に基づいて、指定された製品インターフェイスの実装を取得します。
コードは次のように実装されます。
<!-- 获取指定id的商品 -->
<select id="getGoodsById" resultType="Goods">
select * from tb_goods where id=#{id}
</select>
テストによって実装されたインターフェース
- SqlUtil ツールキットを作成する
com.lvan.util パッケージを作成し、テスト クラスを作成する
- テストに必要なツール クラスを記述します。
実装コードは次のとおりです。
package com.lvan.util;
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 SqlUtil {
//1.声明静态的SqlSession对象 用于获取mysql连接
public static SqlSession sqlSession;
static {
try {
//2.读取mybatis配置文件
Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
//3.根据配置对象生成对应的工厂对象
SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(reader);
//4.打开连接
sqlSession=sf.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(sqlSession);
}
}
- テスト ケースの作成
テスト パッケージの作成、テスト クラスの作成、
すべてのコモディティ オブジェクトのテストとクエリ
package com.lvan.test;
import java.util.List;
import com.lvan.mapper.GoodsMapper;
import com.lvan.pojo.Goods;
import com.lvan.util.SqlUtil;
public class Test {
public static void main(String[] args) {
//获取接口对象 代理对象
GoodsMapper goodsMapper=SqlUtil.sqlSession.getMapper(GoodsMapper.class);
List<Goods> goods=goodsMapper.query("");//传递空值 查询所有
System.out.println("查询全部:"+goods);
}
}
実行中のスクリーンショットは次のとおりです。
検索機能のテスト ケースは次のとおりです。
GoodsMapper goodsMapper=SqlUtil.sqlSession.getMapper(GoodsMapper.class);
List<Goods> goods=goodsMapper.query("Q");//传递空值 查询所有
System.out.println("关键词查询:"+goods);
実行結果は次のとおりです。
他の機能はテストされなくなり、テスターはインターフェイス要件に従ってテスト ケースを作成します。
ページを実現する
説明: IndexServlet を使用して実装します。異なる関数はパラメーター アクションによって区別されます。
最初に com.lvan.servlet という名前のパッケージを作成し、そのパッケージの下に IndexServlet を作成します
他の不要なメソッドを削除し、doGet メソッドを 1 つだけ残す
ホームページ コンテンツのレンダリング
- ホームページにジャンプする機能を実現する
実装手順:
1.1 グローバル プロキシ オブジェクトを定義し、
コーディング ルールと応答タイプを設定します。
//设置编码规则
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//设置响应的内容类型
response.setContentType("text/html");
1.1 アクション パラメータが存在しない場合は、ホームページに移動することを意味します
1.2 ページを作成します
Web コンテンツ ディレクトリに index.jsp ページを作成します
コーディング規則の変更:
次のように変更.
table タグを記述し、ユーザーはエンティティ クラスの属性に従ってデータをレンダリングし、対応するテーブル ヘッダーと操作列を宣言します. データをレンダリングする前に、タグをインポートする必要があり
ます1.3 検索機能の実現定義:
入力
アクション値は検索であり、検索検索をカスタマイズできることを意味します.追加表の前に検索バーがあり、その内容は次のとおりです。テスト結果は次のとおりです。1.4 削除操作ページに削除ボタンを追加し、リクエスト パスが /プロジェクト名/サービス名 であることに注意してください。テスト:番号 4 の項目をクリックして、ホームページに戻って更新します。