ホームページ > Java > &#&チュートリアル > Java は mysql を操作するために crud とページング プラグインを統合します

Java は mysql を操作するために crud とページング プラグインを統合します

Y2J
リリース: 2017-05-10 09:37:20
オリジナル
1991 人が閲覧しました

この記事では、mybatis (crud + ページング プラグイン) を統合して mysql を操作する Spring mvc の詳細な手順を主に紹介します。必要な友人は参照してください

1. Web.xml の設定

Java eeのプロジェクト起動 まずはweb.xmlを読みます。 Spring mvcのweb.xmlについては前回の記事でも詳しく説明しましたので、分からない方はソースも載せておきます。プロジェクトのコードを解説 githubでも確認できますが、ここでは紹介しません。

web.xml設定

<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:/context.xml</param-value>
</context-param>
<!-- 监听器:启动服务器时,启动 spring -->
<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring 核心控制器 -->
<servlet>
 <servlet-name>dispatcherServlet</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <load-on-startup>1</load-on-startup>
<init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:external-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
 <servlet-name>dispatcherServlet</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
 <filter-name>encodingFilter</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
</init-param>
<init-param>
 <param-name>forceEncoding</param-name>
 <param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
ログイン後にコピー

2番目、Spring(context.xml)コンテキスト設定

この設定ファイルは、サーバーコンテナによって読み取られる2番目のものと言えます。 Spring が始まるとき スキャンされた基本パッケージのパス、外部で設定された attributes ファイルのインポート、接続する必要があるデータベースの設定、mybatis と spring の統合、mybatis 日付プラグインと前述のページング プラグイン最初の設定もここで構成され、mybatis はエンティティ パッケージとそのマッパー ファイルの場所をスキャンします。

context.xml 設定

<!-- spring 扫描的基础包路径 -->
<context:component-scan base-package="com.qbian" />
<!-- jdbc properties -->
<bean id="propertyConfigurer"
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
 p:location="classpath:jdbc.properties" />
<!-- define the datasource (这里用的是c3p0的数据看连接池,性能不是很好,可以唤其它更好的连接池[jdbc pool等])-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
 destroy-method="close">
 <property name="driverClass" value="${jdbc.driverClassName}" />
 <property name="jdbcUrl" value="${jdbc.url}" />
 <property name="user" value="${jdbc.username}" />
 <property name="password" value="${jdbc.password}" />
</bean>
<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />
 <property name="typeAliasesPackage" value="com.qbian.**.dto" />
 <property name="plugins">
 <list>
  <!-- 配置自己实现的日期插件 -->
  <bean class="com.qbian.common.plugin.DatePlugin" />
  <!-- 分页插件 -->
  <bean class="com.qbian.common.plugin.PagePlugin" />
 </list>
 </property>
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 <property name="basePackage" value="com.qbian.**.dao" />
 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 将多个配置文件读取到容器中,交给Spring管理 -->
<bean id="configProperties" class="com.qbian.common.plugin.PropertiesConfigurer">
 <property name="locations">
 <list>
  <!--<value>classpath:redis.properties</value>-->
 </list>
 </property>
</bean>
ログイン後にコピー

3. Spring コントローラー設定

ここで設定されるのは、コントローラーの場所、リクエスト タイプ 、およびサポートされるエンコーディングです。

external-servlet.xmlの設定

<!-- 控制器扫描 -->
<context:component-scan base-package="com.qbian.common.controller" />
<mvc:annotation-driven>
 <mvc:message-converters>
 <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  <property name="supportedMediaTypes">
  <list>
   <value>text/html;charset=UTF-8</value>
  </list>
  </property>
  <property name="writeAcceptCharset" value="false" />
 </bean>
 </mvc:message-converters>
</mvc:annotation-driven>
ログイン後にコピー

設定情報は上記の3つです

4. コードの説明

1.以下では行われません。並べ替えるには、エディタに表示されている順序に説明を並べるだけです。 (以下の内容は全てjava.com.qbianパッケージ配下にあります)

 common |
 annotation |
 @interface Now : 插入|更新数据的日期注解。
 @interface UUID :插入数据的uuid注解。
 controller |
 ExternalController.class :核心控制器,拦截所有请求,异常处理,跨域设置等功能。
 dao |
 interface StudentDao :使用例子,crud 共通方法。
 dto |
 PageInfoDto.class :分页使用的基础dto对象。
 ResponseDto.class :响应数据的基本模型。
 entity |
 Student.class :使用例子,自定义注解的使用。
 enums |
 enum MessageEnum :统一的返回状态码及描述信息。
 exception |
 ExternalServiceException.class :自定义异常,业务相关都抛出该异常对象。
 factory |
 BeanFactoryUtil.class :根据bean name获取spring管理的bean实例。
 hadle |
 ExceptionHandle.class :spring自带的统一异常捕获处理。
 plugin |
 DatePlugin.class :自定义mybatis日期插件。
 PagePlugin.class :自定义mybatis分页插件。
 PropertiesConfigurer.class :将外部配置的属性文件读取到 spring 容器中统一管理。
 service |
 interface IbaseServie :基础的service接口。
 BaseService.class :基础的service抽象类。
 TokenService.class :鉴权token服务类。
 util |
 CheckUtil.class :请求信息校验相关工具类。
 DateUtil.class :日期相关工具类。
 ResponseUtil.class :响应信息工具类。
 SecondsFormatSerializer.class :java.util.Date类型转时间戳工具类。
 TimestampSecondsFormatSerializer.class :java.sql.Timestamp类型转时间戳工具类。
 StringUtil.class :字符串相关工具类。
other |
 dao |
 interface StudentExtDao :使用例子,业务相关crud操作。
 dto |
 QueryStudentSexPageDto.class :根据学生性别分页查询返回对象dto。
 StudentPageDto.class :根据学生性别分页查询封装的对象。
 service |
 AddStudentService.class :插入学生数据接口。
 DeleteStudentService.class :删除学生数据接口。
 FindStudentService.class :查询学生数据接口。
 UpdateStudentService.class :更新学生数据接口。
 QueryStudentBySexService.class :根据学生性别分页查询接口。
ログイン後にコピー

2. Mybatis Mapper.xmlの説明(以下の内容は全てresources/com/qbianフォルダー配下にあります)

common |
 dao |
 StudentDao.xml :对应common.dao.StudentDao接口。
other |
 dao |
 StudentExtDao.xml :对应other.dao.StudentExtDao接口。
ログイン後にコピー

5. 機能デモ

1. トークンの検証

ここのコードにトークンを記述しました。123456 は検証が成功したことを意味します。以下に示すように、まずデータ挿入インターフェイスでテストして、間違ったトークンを渡しましょう:

認可トークン検証

2、リクエストパラメータ検証

挿入データに他に何が必要かを見てみましょう。インターフェイス どの値をチェックするか。

// 校验请求参数
CheckUtil.checkEmpty(params, "token", "sex", "age");
// 校验 token
tokenService.checkUserLogin(params.getString("token"));
Student student = JSONObject.parseObject(params.toJSONString(), Student.class);
studentDao.insert(student);
return ResponseUtil.success();
ログイン後にコピー

それでは、年齢フィールドを少なく渡してみましょう:

リクエストフィールドの検証

3. データを挿入します

データを挿入する前に、データベースにどのようなデータがあるかを見てみましょう:

データベース内の値を初期化します

上の図からわかるように、データベースにはデータがありません。挿入インターフェースを実行してみましょう。

挿入インターフェイスをテストします

データベースを見てみましょう:

挿入インターフェイスを呼び出した後、

データベースにはすでにデータがあります。

4. データのクエリ

前のデータの ID に基づいてクエリを実行します

クエリ インターフェイスを呼び出します

挿入したばかりのデータもクエリしました。

5. データを更新します

クエリされたデータを更新します:

更新インターフェイスを呼び出します

その後、データを再度クエリします

更新後に再度クエリします

性別と年齢が表示されますが更新されており、更新日も最新です。

6. ページング クエリ

まずコードを見てみましょう:

// 校验请求参数
CheckUtil.checkEmpty(params, "token", "sex", "pageNo", "pageSize");
// 校验 token
 tokenService.checkUserLogin(params.getString("token"));
// 根据性别分页查询 Student,查询总数会自动封装到pageDto对象上
QueryStudentSexPageDto pageDto = JSONObject.parseObject(params.toJSONString(), QueryStudentSexPageDto.class);
List<Student> students = studentExtDao.queryBySexWithPage(pageDto);
StudentPageDto studentPageDto = new StudentPageDto();
// 查询总数会自动封装到pageDto对象上
studentPageDto.setTotalSize(pageDto.getTotalSize());
studentPageDto.setStudents(students);
 return ResponseUtil.success(studentPageDto);
ログイン後にコピー

ページング クエリの前に、さらにテスト データをインポートします。

ページネーション前のテスト データ

現在、データベースには 19 歳から 24 歳までの少年向けの 6 つを含む 10 個のテスト データがあることがわかります。さて、ページング クエリ インターフェイスの呼び出しを開始しましょう:

ページング クエリ インターフェイスを呼び出して結果を返します

返されたデータをフォーマットします:

ページ クエリが返す結果の並べ替え

これは、私たちが行ったことと同じです。データベースに直接クエリを実行する場合も同様です。

7. データを削除します

最後のステップは、データインターフェイスを削除することです。最初のテストデータを削除します。

削除インターフェースを呼び出して結果を返します

そして、本当に削除されたかどうかを確認します。

削除後のクエリ

データは削除されました。

最後にプロジェクトのソース コードを添付します: github.com/Qbian61/spring-mvc-mybatis

[関連する推奨事項]

1. Java の無料ビデオ チュートリアル

2. Java アノテーションの包括的な分析

3. Alibaba Java 開発マニュアル

以上がJava は mysql を操作するために crud とページング プラグインを統合しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート