春、SpringMVC、Mybaits相関

コードを書く前に、我々は3つのフレームワークを初めて目にしているの?
私はあなたがこの大部分は、コードで直接見ていたスキップする前に知っておくべきであるならば、私は、方言が懸念している使用します、これらの概念の大きな以前に見た多くのことを信じて!

SpringMVC:これは、ウェブ層に使用されるユーザ要求を処理するために、コントローラ(従来のストラットサーブレットアクションに相当)に相当します。たとえば、アドレスバーにユーザーのhttp://ドメイン/ログインは、その後、springmvc(中央ビジネスロジック検証のユーザー名とパスワードが含まれているだけでなく、クエリがあり、この要求とそれに対応するメソッド呼制御層を傍受しますデータベース操作、これらはspringmvc義務ではないが))のみ返されるデータフォーマットJSON / XMLなど、最終的な結果がユーザに返さ、もちろん(対応するページを返します。springmvcは、ユーザーを扱うの生活過程の前後に行うことです!

春:強すぎるが、私はそれを要約する単語やフレーズを使用することはできません。しかし、我々は通常、このメカニズムで、我々はすべてのクラスでこれを使用していない、ロードされた豆することができ、ほとんどのIOCコンテナであり、(私たちはクラスでJavaで、もちろん、サービスのDAO内を含む)の接触の開発を見積もりますそれが初期化されたとき、稀にキーワードnewを見ません。追加のスプリングAOP、トランザクション管理、そして私たちは頻繁に使用されています。

MyBatisの:あなたは私に言わせれば有名なHibernateでの違いは何ですか?言えば十分、彼は私のニーズに沿ったもの以上でした。まず、それは自由に行うことができます書かれたコードデータベースアクセスの効率を高めるために、(彼の後ろに私の友人がいると言って当然ではないの)経験のある人々のデータベースを持つことになりますSQLを、制御することができます。多くの場合、SQLエラーの一般的な手続き上のエラーは、他の人がすぐに間違った場所、あるいは元を最適化することができ、書き込みSQLを見つけることができるコードの後を引き継いだため、2番目のは、それは、我々の組織のSQLを管理するためのXMLの方法を使用することができます。

このシステムの主な枠組みは、スプリング+スプリングMVC + MyBaitsからなるSSMフレームワークで使用されています。ばねが、フレームの底部に配置され、フレームはスプリングMVC Springフレームワークをベースとし、このフレームワークのデータベース層は主に永続化層、ビジネス層を管理しているため、主な役割は、連結スプリングスプリングMVCとMyBaitsによって再生されますダイレクトコールは、カップリング永続化層とビジネス層の実現上のはず永続化層です。また、スプリング制御の反転とは、その利点にも手の届くところにビジネスとシステムレベルのサービスを分離することにより、AOP(セクションプログラミング)で具現されるようにオブジェクトは、コントロールにスプリングに登録するクラスの必要性に依存する役割を有しています凝集開発。
まあ、そんなにBBの前に、のは本当に〜コードをノックし始めましょう
私の使用は、動的Webプロジェクト、対応良いの確立を作成するには、(あなたも右、これを使用する必要がありますか?)日食で、まず私たちはIEDを開きますディレクトリ構造(強調!)

バイナリログ(バイナリログ)の間でマスターとマスターに記録動作①の後、各データを更新する前に、これらのマスターは、MySQLがシリアルバイナリトランザクションを書き変える、書き込みトランザクションレコードがバイナリログに作成しました、マスターは、ストレージエンジンに通知し、トランザクションがコミットされます。
②バイナリログは、バックエンドマシンログワーカースレッドをオープンする最初のスレーブの間でマスター、I / Oスレッド、I / Oのコピースレッド[ログイン治療バイナリ、I / Oスレッドを行い、マスターに接続されている交換を開くためにログがリレーログに書き込まれます。
③スレーブREDOログ・イベント最後のマシンは、独自のデータを反映するために変更されます。

③レイアウト:秒に一つのデータ形式からログ変換の内容。
このシステムの目的Logbackロギング・コンポーネントは、実行中の故障箇所および表示プログラムすることです
状況を。

その後Laijiangjiangは本の5点の配置の変更の内容に応じて、Redisの:

1は、なぜはRedisの選択:シナリオとRedisのRedisの使用を使用するための導入理由を、

図2に示すように、Redisの共通コマンドがまとめられている:Redisの内で使用されるデータの特定のタイプの時間複雑さのデータ構造の概要を。

3、Redisのは、機能が含ま高度:、永続的なコピー、センチネル、クラスタの説明を。

図4は、Redisのを理解する:非常に重要な部分である理解メモリ、障害物を、手術することができ、チャネル部にあっ属している必要があり、前述の。

5、スキルを開発:キャッシュ設計と共通のピットを含むいくつかの開発者の主な本当の概要を、。

再見にRedisのの最初の部分を開くことが最初。

Redisのは、すべてのワンサイズフィットではありません

インタビューでは、比較は、多くの場合、RedisのとMemcacheのの長所と短所に頼まれ、両方の個人的な感触は、非リレーショナルデータベースキャッシュとの比較のために適切ではない、他のことを行うことができないだけでも可能であり、唯一のキャッシュとして使用されています。多くの場合、私たちはこれら両者を比較してみましょう、それは主にRedisのシナリオによるもので最も広く使用されているキャッシュされ、その後、Redisのは最後に行うことができますか?あなたはそれを行うことはできませんか?

Redisのは、スケーラビリティを向上させ、動的なWebアプリケーションの速度を上げるためにデータをキャッシュする結果、クエリのデータベースアクセス技術を削減する高性能メモリ、分散キャッシュサーバです。
キーの値が文字列、チェーン、セットを、比較的大きな値型のメモリをサポートしているなど、ストレージシステムであるRedisの設定などを命じました。この操作はアトミックであることから、分割しない、Redisのは、マルチスレッド操作を考慮せずに同時実行の問題を使用します。これに基づき、さまざまな方法をソートRedisのサポートは、効率性を確保するために、データがキャッシュメモリには、データはRedisの差は、定期的にディスクに書き込まれますされ、またはログファイルの追記を書き込む動作を変更するために、前者はRedisのの効率的なパフォーマンスを確保するために、デフォルトのRDDの保管、です、欠点は、このアプローチは、データの要件に適しているので、それは、永続的な場合は、Redisの故障、データの損失につながることができたときに、いくつかの時間のために持続していることですこのシステムでは、我々はRDDの要件を満たすために使用するときに厳密ではありません、。

com.soecode.lyf.webパッケージ;

輸入はjava.util.List;

輸入org.apache.ibatis.annotations.Param;
輸入org.slf4j.Logger;
輸入org.slf4j.LoggerFactory。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.stereotype.Controller;
輸入org.springframework.ui.Model;
輸入org.springframework.web.bind.annotation.PathVariable;
輸入org.springframework.web.bind.annotation.RequestMapping。
輸入org.springframework.web.bind.annotation.RequestMethod;
輸入org.springframework.web.bind.annotation.ResponseBody。

輸入com.soecode.lyf.dto.AppointExecution。
輸入com.soecode.lyf.dto.Result;
輸入com.soecode.lyf.entity.Book;
輸入com.soecode.lyf.enums.AppointStateEnum;
輸入com.soecode.lyf.exception.NoNumberException。
輸入com.soecode.lyf.exception.RepeatAppointException。
輸入com.soecode.lyf.service.BookService。

@Controller
@RequestMapping( "/予約")// URL:/モジュール/リソース/ {ID} /セグメント/ seckill /リスト
パブリッククラス{BookController

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private BookService bookService;

@RequestMapping(value = "/list", method = RequestMethod.GET)
private String list(Model model) {
    List<Book> list = bookService.getList();
    model.addAttribute("list", list);
    // list.jsp + model = ModelAndView
    return "list";// WEB-INF/jsp/"list".jsp
}

@RequestMapping(value = "/{bookId}/detail", method = RequestMethod.GET)
private String detail(@PathVariable("bookId") Long bookId, Model model) {
    if (bookId == null) {
        return "redirect:/book/list";
    }
    Book book = bookService.getById(bookId);
    if (book == null) {
        return "forward:/book/list";
    }
    model.addAttribute("book", book);
    return "detail";
}

//ajax json
@RequestMapping(value = "/{bookId}/appoint", method = RequestMethod.POST, produces = {
        "application/json; charset=utf-8" })
@ResponseBody
private Result<AppointExecution> appoint(@PathVariable("bookId") Long bookId, @RequestParam("studentId") Long studentId) {
    if (studentId == null || studentId.equals("")) {
        return new Result<>(false, "学号不能为空");
    }
    //AppointExecution execution = bookService.appoint(bookId, studentId);//错误写法,不能统一返回,要处理异常(失败)情况
    AppointExecution execution = null;
    try {
        execution = bookService.appoint(bookId, studentId);
    } catch (NoNumberException e1) {
        execution = new AppointExecution(bookId, AppointStateEnum.NO_NUMBER);
    } catch (RepeatAppointException e2) {
        execution = new AppointExecution(bookId, AppointStateEnum.REPEAT_APPOINT);
    } catch (Exception e) {
        execution = new AppointExecution(bookId, AppointStateEnum.INNER_ERROR);
    }
    return new Result<AppointExecution>(true, execution);
}

}

我々はテストコントローラ、およびライト・フロントエンドに良い憎しみ、OOO、OOO〜することはできませんので、私は、怠け者だから

    到此,我们的SSM框架整合配置,与应用实例部分已经结束了,我把所有源码和jar包一起打包放在了我的GitHub上,需要的可以去下载,喜欢就给个star吧,这篇东西写了两个晚上也不容易啊。
    修改预约业务代码,失败时抛异常,成功时才返回结果,控制层根据捕获的异常返回相应信息给客户端,而不是业务层直接返回错误结果。上面的代码已经作了修改,而且错误示范也注释保留着,之前误人子弟了,还好有位网友前几天提出质疑,我也及时做了修改。
    SET FOREIGN_KEY_CHECKS=0;

- 表の構造 adminuser


DROP TABLE IF EXISTSはadminuser
CREATE TABLEをadminuser
idINT(11)NOT NULL AUTO_INCREMENT、
usernameVARCHAR(255)は、デフォルトのNULL、
passwordVARCHAR(255)は、デフォルトのNULL、
PRIMARY KEY( id
)ENGINE = MyISAMのAUTO_INCREMENT = 6 DEFAULT CHARSET = UTF8。

<%@ページ言語= "javaの"インポート= "java.utilの*。" pageEncodingは= "UTF-8" %>
<DOCTYPE HTML PUBLIC! " - // W3C // DTD HTML 4.01移行// EN">
<htmlの>
<HEAD>
<タイトル>用户登录</タイトル>
</ head>
<body>
<フォームアクション= "<%= request.getContextPath()%> / login.do" METHOD = "POST">
用户名:<入力タイプ= "テキスト"名前= "ユーザ名">
密码:<入力タイプ= "パスワード"名前= "パスワード">
の<input type =値= "を提出する" "登录">
</ FORM>
</ BODY>
</ HTML>

<%@ページ言語= "javaの"インポート= "java.utilの*。" pageEncodingは= "UTF-8" %>
<DOCTYPE HTML PUBLIC! " - // W3C // DTD HTML 4.01移行// EN">
<htmlの>
<HEAD>
<タイトル>修改数据</タイトル>
</ head>
<body>
<フォームアクション= "<%= request.getContextPath()%> / update.do" METHOD = "POST">
用户名:<入力タイプ= "テキスト"名前= "ユーザ名"値= "$ {add.username}">
密码:<入力タイプ= "パスワード"名前= "パスワード"値= "$ {add.password}">
<入力タイプ= "隠し"名= "ID"値= "$ {add.id}">
の<input type = "提出"値= "提交数据">
</フォーム>
</ body>
</ HTML>

おすすめ

転載: blog.51cto.com/14752132/2477540