カテゴリ管理
特徴:
ノードを取得します。
ノードを追加します。
名前を変更します
分類IDを取得
再帰サブノードID
インタフェース:
注意:
機能の動作前に1、のような安全性試験、実施する:(セッションを使用して)に記録するかどうかを、管理者権限(役割の値をチェックしてください);パラメータは空であり、利用者は、MD5暗号化されたパスワードを記録します。
2 セット<カテゴリ>:使用すると、ハッシュコードをオーバーライドするために収集、分類と同等に設定
学習目標
再帰クエリの子ノード
商品管理:
特徴:
フロント機能:製品の検索、製品の詳細情報の動的な順序付きリスト、ページング機能
バックオフィス機能:製品リスト、製品の検索、写真をアップロードし、リッチテキスト、製品情報、一番下の棚上からの商品、商品を増やし、商品の更新をアップロード
インタフェース:
フロントインターフェイス:1つのダイナミック製品の検索とソートリスト; 2製品の詳細;
背景インターフェース:1製品のリスト; 2製品検索; 3枚のアップロード写真; 4つの製品の詳細; 5フレームアップと製品ダウン; 6つの新製品や製品を改造し、7枚のリッチテキストのアップロード写真
注意:
1時、書き込み、ビジネスロジック、または他のパラメータのチェックが直接リターン経由でない場合、ビジネスロジックを記述するためにチェックし、チェックします
学習目標:
0 FTPサービスをドッキング
1. MultipartFileアップロードしたファイルは、リリース後にプロジェクトのアップロードウェブアプリのディレクトリに到着し、その後、サーバーをftpにファイルをアップロードし、Web-appディレクトリには内部のファイルをアップロード削除
1つのSpringMVCファイルのアップロード:
SpringMVCファイルのアップロード:1まず、ファイルをアップロードするために使用FileServiceImplを、作成FTPUtil 2は、FTPサーバーにアップロードを作成するために使用されて作成し、ウェブアプリのファイル削除の内側に3にアップロードします
パッケージcom.eshop.service.impl。 輸入com.eshop.service.IFileService。 輸入com.eshop.util.FTPUtil。 輸入com.google.common.collect.Lists。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; 輸入org.springframework.stereotype.Service。 輸入org.springframework.web.multipart.MultipartFile。 インポートのjava.io.File; インポートにjava.io.IOException; 輸入java.util.UUID。 @Service( "iFileService") パブリッククラスFileServiceImplはIFileService {実装 プライベート静的ロガーロガー= LoggerFactory.getLogger(FileServiceImpl.class)を、 @Override パブリック文字列アップロード(MultipartFileファイル、文字列のパス){ //文件名 File.getOriginalFilename fileNameに=文字列(); //拡張子---- abc.jpg> JPG 文字列fileExtensionName = fileName.substring(fileName.lastIndexOf()+ 1 ""); //ファイル名をアップロードする 文字列uploadFileName UUID.randomUUID =()のtoString()+ + fileExtensionName ;. "" logger.info( "アップロードファイルアップロードフォルダ名を開始する:{}、パスをアップロード:{}、新しいフォルダ名:{}"、ファイル名、パス、uploadFileName); //何の裁判官このフォルダが作成されていないが存在しない ファイルFILEDIR =新しい新しいファイル(パス); !IF(fileDir.exists()){ //書き込み可能開くには、前のフォルダを作成しますが、権限は、Tomcatにオープンする権限防ぐない (trueに)fileDir.setWritableを、 fileDir.mkdirs(); } //完全なファイル作成 ファイルこのtargetFile =新しいファイル(パス、 uploadFileNameを)。 {試し ファイルを。transferTo(このtargetFile)。 //ファイルアップロードが完了した 上でFTPサーバTARGETFILEに//アップロードを FTPUtil.uploadFile(Lists.newArrayList(TARGETFILE)); //アップロードした後、TARGETFILE削除 targetFile.deleteを(); }キャッチ(IOExceptionをE) { logger.error(E "の異常ファイルをアップロード"); 戻りNULL; } targetFile.getNameを(返します); } }
パッケージcom.eshop.util。 輸入org.apache.commons.net.ftp.FTPClient。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; インポートのjava.io.File; 輸入java.io.FileInputStream; インポートにjava.io.IOException; 輸入はjava.util.List; パブリッククラスFTPUtil { プライベート静的ロガーロガー= LoggerFactory.getLogger(FTPUtil.class)。 プライベート静的な文字列ftpIp = PropertiesUtil.getProperty( "ftp.server.ip"); プライベート静的な文字列FTPUSER = PropertiesUtil.getProperty( "ftp.user"); プライベート静的な文字列ftpPass = PropertiesUtil.getProperty( "ftp.pass"); プライベート文字列IP; プライベートint型ポート。 プライベート文字列ユーザー; プライベート文字列のPWD; FTPClient ftpClientプライベート; / ** * * @paramのIP * @paramポートポート * @paramユーザー * @paramのPWD * / 公共FTPUtil(文字列IP、ポート、INT、ユーザーの文字列、文字列のPWD){ this.ip = IP; このポート= .port; =ユーザーthis.user; this.pwd = PWD; } / ** *静的メソッドアップロードされたファイルを開発 * @paramのfileList * @return * / パブリック静的ブールuploadFile(一覧<ファイル>のfileList) IOExceptionがスロー{ )fTPUtil ftpUtil =新しい新しいfTPUtil(ftpIp、21は、ftpPass FTPUSERあります。 logger.info( "FTPサーバー接続の開始を"); ブールftpUtil.uploadFile結果=( "IMG"、のfileList); logger.info( "接続エンドサーバー、アップロード結果は:{}"、結果); 戻り値の結果; } / ** *詳細な論理アップロードファイル * @param remotePathは、リモートパス:LinuxのFTPサーバーは、フォルダ内にある、あなたはその後、remotePathはを使用して、フォルダの下にこのフォルダにファイルをアップロードしたい場合は * @paramのfileList * @return * / プライベートブールuploadFile(文字列remotePathは、リスト<ファイル>ファイルリスト)にIOException {スロー ;ブール= trueにアップロードされた のFileInputStream FIS =ヌル; // ftpサーバ接続 IF(ConnectServer(this.ip、this.port、this.user、this.pwd)){ 試み{ //作業ディレクトリ切り替える ftpClient .changeWorkingDirectory(remotePathは)。 //バッファ設定 ftpClient.setBufferSize(1024)。 //エンコード設定 ftpClient.setControlEncoding( "UTP- 8。"); タイプバイナリファイルに//ファイルタイプ ftpClient.setFileTypeを(FTPClient.BINARY_FILE_TYPEする); //スイッチ操作モード ftpClient.enterLocalPassiveMode() ; / * FTPへのファイルのアップロードを開始!!!* / (ファイルFileItem:のfileList)については{ FIS新しい新=のFileInputStream(FileItem); ftpClient.storeFile(fileItem.getName()、FIS); } }キャッチ(IOExceptionをE){ logger.error( "異常なファイルをアップロード"、電子); falseに=アップロードし; } {最後に //关闭资源 公共ボイドSETIP(文字列IP){ fis.closeを(); ftpClient.disconnect(); } } アップロードを返します。 } プライベートブールconnectServer(文字列IP、INTポート、文字列のユーザは、文字列PWD){ ブールisSuccess = FALSE; ftpClient =新しいFTPClient(); してみてください{ ftpClient.connect(IP、ポート)。 isSuccess = ftpClient.login(ユーザ、PWD)。 }キャッチ(IOExceptionを電子){ logger.error( "连接FTP服务器异常"、E)。 } 戻りisSuccess。 } パブリック文字列getIp(){ 戻りIP。 } 公共INTのgetPort(){ this.ip = IP; } 戻りポートと } 公共ボイドsetPort(INTポート){ this.port =ポート。 } パブリック文字列のgetUser(){ 戻りユーザ。 } 公共ボイドSETUSER(文字列ユーザ){ this.user =ユーザー。 } パブリック文字列getPwd(){ PWDを返します。 } 公共ボイドSETPWD(文字列のPWD){ this.pwd = PWD。 } 公共FTPClient getFtpClient(){ ftpClientを返します。 } 公共ボイドsetFtpClient(FTPClient ftpClient){ this.ftpClient = ftpClient。 } }
アプリケーション:
( "upload.doを")@RequestMapping @ResponseBody {(RequestParam(名前= "upload_name"、必要= false)をMultipartFileファイル、HttpServletRequestのリクエスト@ HttpSessionのセッション、)公共ServerResponceのアップロード ユーザーのユーザー=(ユーザー)session.getAttribute(constとして。現在の使用者); (ユーザ== NULL)が{場合 //强制用户登录 ServerResponce.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode()、 "用户未登录、请登录")を返します。 } IF(iUserService.checkAdminRole(ユーザ).isSuccess()){ //填充业务 列パス=でrequest.getSession()のgetServletContext()getRealPath( "アップロード")。 ストリングtargetFileName = iFileService.upload(ファイルパス)。 文字列のURL = PropertiesUtil.getProperty( "ftp.server.http.prefix")+ targetFileName。 地図FILEMAP = Maps.newHashMap(); fileMap.put( "URI"、targetFileName)。 fileMap.put( "URL"、URL); ServerResponce.createBySuccess(FILEMAP)を返します。 }他{ ServerResponce.createByErrorMessage( "无权限操作")を返します。 } }
フローのプロパティ2は、設定ファイルを読み取ります。
com.eshop.utilパッケージ; インポートorg.apache.commons.lang3.StringUtils; インポートorg.slf4j.Logger; インポートorg.slf4j.LoggerFactory; インポートにjava.io.IOException; インポートjava.io.InputStreamReader; java.utilのインポートクラス.properties; publicクラスPropertiesUtil { プライベート静的ロガーロガー= LoggerFactory.getLogger(PropertiesUtil.class); プライベート静的プロパティプロパティ; / *静的コードブロックが(一度のみ)通常のブロック構造よりも優れているコードのブロック* /より優れている 静的{ fileNameに=文字列"eshop.properties"; プロパティ新しい新しい=プロパティ(); 試み{ は、Properties.load(InputStreamReaderの新しい新しい(PropertiesUtil.class.getClassLoader()getResourceAsStream(filename)で、)。 "UTF-8"); キャッチ}(IOExceptionをE){ logger.error( "異常プロファイルリード"、E); } } / ** 内部得*プロファイル値 * @paramキー * @return * / パブリック静的な文字列のgetProperty(文字列キー){ //トリム、キーを左スペースを避ける()スペースストリップ 文字列値= Properties.getProperty(key.trim()); IF(StringUtils.isBlank(値)){ 戻りNULL; } )(value.trim返します。 } 公共の静的な文字列のgetProperty(文字列キー、文字列defaultVaule){ //スペースが(トリム、キーを左避ける)スペースストリップ 文字列値= properties.getProperty(key.trim() )。 (StringUtils.isBlank(値))であれば{ defaultVauleを返します。 } )(value.trim返します。 } }
3抽象的なPOJO、BO、変換関係のVOオブジェクトとソリューション
4ジョダ時のクイックスタート
com.eshop.utilパッケージ; インポートorg.apache.commons.lang3.StringUtils; インポートorg.joda.time.DateTime; インポートorg.joda.time.format.DateTimeFormat; インポートorg.joda.time.format.DateTimeFormatter; インポートjava.util.Date; パブリッククラスDateTimeUtil { //時間のJodaの時間の使用は、処理する //1.string - > 2.日付- >文字列 プライベートSTANDARD_FORMAT静的な文字列=「MM-DD-YYYYのHH:MMを:SS「; / ** *受信イベント、時間列フォーマット手段フォーマット * @param dateTimeStr * @param formatStrイベント形式 * @return * / パブリック静的StrToDate日(dateTimeStrストリング、ストリングformatStr){ DateTimeFormatterてDateTimeFormatter = DateTimeFormat.forPattern(formatStr)。 日時のdateTime = dateTimeFormatter.parseDateTime(dateTimeStr)。 dateTime.toDateを返します(); } 公共の静的な文字列dateToStr(日付、文字列formatStr){ IF(日付== NULL){ StringUtils.EMPTYを返します。 } のDateTimeのdateTime =新しい日時(日付); dateTime.toString(formatStr)を返します。 } / ** *字符串装换时间格式、默认事件格式 * @param dateTimeStr * @return * / パブリック静的日付strToDate(文字列dateTimeStr){ DateTimeFormatterてDateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT)。 日時のdateTime = dateTimeFormatter.parseDateTime(dateTimeStr)。 dateTime.toDateを返します(); } 公共の静的な文字列dateToStr(日付){ IF(日付== NULL)が{ StringUtils.EMPTYを返します。 } のDateTimeのdateTime =新しい日時(日付); dateTime.toString(STANDARD_FORMAT)を返します。 } }
5静的ブロック
静的コードブロック(一度だけ)は、通常のブロック構造よりも優れているコードブロックよりも優れています
6 MyBatisの-PageHelperページング及び動的順序づけ
7 MyBatisのリストメソッドのセットを横切ります
ここで、文の8 MyBatisの動的アセンブリ