ホームページ Java &#&チュートリアル SpringMVC+MyBatis ページング (最新)

SpringMVC+MyBatis ページング (最新)

Jan 07, 2017 am 10:31 AM

現在の主流の Web MVC フレームワークには、Struts に加えて Spring MVC もあります。主な理由は、Spring MVC は設定が比較的簡単で、使い方が非常にわかりやすく、柔軟性が高く、Spring との統合が優れており、RESTful API のサポートが優れているためです。ストラットの方が良いです。

MyBatis は ibatis のアップグレード版であり、Hibernate の古いライバルであり、SQL、ストアド プロシージャ、および高度なマッピングをカスタマイズできる永続化レイヤー フレームワークです。

Hibernate との主な違いは、mybatis が半自動であるのに対し、Hibernate は完全に自動であるため、アプリケーションの要件がますます複雑になると、自動化された SQL がより不器用になることです。

少し前にプロジェクトを引き受けて springmvc を使いたいと思って以来、実践的な姿勢でフレームワークを統合するゲームを始めました。フレームワークを頻繁に構築する人は、フレームワーク構築の中核が構成ファイルであることを知っているはずです。そのため、主にいくつかの設定ファイルのコードを投稿します。ここでも、構成ファイルを作成した後、実行時にエラーを報告し、jar を追加します。以下は私が使用する jar パッケージのリストです (最小限である必要があります):

SpringMVC+MyBatis ページング (最新)

注: 上の図にはいくつかの追加の jar があります。たとえば、私が使用しているデータベース接続プールは Alibaba の druid とログ フレームワークの logback です。 , ということで、それに関連するjarを紹介しました。これら 2 つのフレームワークの使用と構成は非常に簡単なので、ここでは詳しく説明しません。

1. SpringMVC を統合する

springMybatis-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
    
    <!-- 启用spring mvc 注解-->
  <mvc:annotation-driven>  
  </mvc:annotation-driven> 
    
  <!-- 自动扫描的包名 ,使Spring支持自动检测组件,如注解的Controller-->
  <context:component-scan base-package="com.alibaba.controller" /> 
  <context:component-scan base-package="com.alibaba.service"/> 
    
    
  <!-- 视图解析器:定义跳转的文件的前后缀 --> 
  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="prefix" value="/WEB-INF/jsp/" />  
    <property name="suffix" value=".jsp" /> <!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
  </bean>  
  
  <!--配置拦截器, 多个拦截器,顺序执行 --> 
  <mvc:interceptors>  
    <mvc:interceptor>  
      <!-- 匹配的是url路径 -->
      <mvc:mapping path="/" /> 
      <mvc:mapping path="/user/**" /> 
      <mvc:mapping path="/test/**" /> 
        
      <bean class="com.alibaba.interceptor.CommonInterceptor"></bean>  
    </mvc:interceptor> 
    <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
  </mvc:interceptors> 
     
</beans>
ログイン後にコピー

2. Mybatis を統合する

spring-dao.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
    
  <!-- 该包下的类支持注解,表示会被当作{@code mybatis mapper}处理 配置了之后表示可以自动引入mapper类-->
  <mybatis:scan base-package="com.alibaba.dao"/> 
  <!--引入属性文件 -->
  <context:property-placeholder location="classpath:configuration.properties"/> 
    
  <!--数据库连接-->
  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">  
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize"><value>1</value></property> 
    <property name="maxActive"><value>5</value></property> 
    <property name="minIdle"><value>1</value></property> 
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait"><value>60000</value></property> 
    <!-- 配置监控统计拦截的filters -->
    <property name="filters"><value>stat</value></property> 
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis"><value>60000</value></property> 
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis"><value>300000</value></property> 
    <!-- 
    <property name="validationQuery"><value>SELECT &#39;x&#39;</value></property> 
    <property name="testWhileIdle"><value>true</value></property> 
    <property name="testOnBorrow"><value>false</value></property> 
    <property name="testOnReturn"><value>false</value></property> 
    <property name="poolPreparedStatements"><value>true</value></property> 
    <property name="maxOpenPreparedStatements"><value>20</value></property> 
     -->
  </bean> 
    
  <!-- mybatis配置 -->
  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
  </bean>  
</beans>
ログイン後にコピー

3.web.xml は SpringMVC と Mybatis を統合する

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
  <!-- 该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static/目录,如原来访问 http://localhost/foo.css ,现在http://localhost/static/foo.css -->
  <!-- 不拦截静态文件 -->
  <servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/js/*</url-pattern> 
    <url-pattern>/css/*</url-pattern> 
    <url-pattern>/images/*</url-pattern> 
    <url-pattern>/fonts/*</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> 
    
  <!-- 初始化 DispatcherServlet时,该框架在 web应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件, 
      并在那里定义相关的Beans,重写在全局中定义的任何Beans -->
  <servlet> 
    <servlet-name>springMybatis</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
  </servlet> 
  <servlet-mapping> 
    <servlet-name>springMybatis</servlet-name> 
    <!-- 所有的的请求,都会被DispatcherServlet处理 -->
    <url-pattern>/</url-pattern> 
  </servlet-mapping> 
     
  <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/config/spring-*.xml</param-value> 
  </context-param> 
  <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  </listener> 
  <!-- druid web 监控 -->
  <servlet> 
    <servlet-name>DruidStatView</servlet-name> 
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> 
  </servlet> 
  <servlet-mapping> 
    <servlet-name>DruidStatView</servlet-name> 
    <url-pattern>/druid/*</url-pattern> 
  </servlet-mapping> 
    
  <error-page> 
    <error-code>404</error-code> 
    <location>/error/404.jsp</location> 
  </error-page> 
  <error-page> 
    <error-code>500</error-code> 
    <location>/error/500.jsp</location> 
  </error-page> 
</web-app>
ログイン後にコピー

4 .logback .xml ログ設定

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
  
 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
  <encoder>  
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
  </encoder> 
 </appender> 
   
 <logger name="test.LogbackTest" level="TRACE"/> 
   
 <logger name="com.alibaba.controller.TestController" level="TRACE"/> 
   
 <logger name="org.springframework.web.servlet.DispatcherServlet" level="DEBUG" /> 
 <logger name="druid.sql" level="INFO" /><!-- 如果spring-config里面没有配置slf4j,就不会显示sql日志,logback只是slf4j的一个实现 -->
 <root level="debug"> 
  <appender-ref ref="STDOUT" /> 
 </root> 
</configuration>
ログイン後にコピー

5.configuration.properties 設定

jdbc.url=jdbc\:mysql\://localhost\:3306/druid?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull 
jdbc.username=root 
jdbc.password=123456
ログイン後にコピー

6. セットアップが成功したかどうか、バックグラウンドコードをテストします

最初にログインし、暗号化が使用されますが、これは削除可能です

package com.alibaba.controller;  
import javax.annotation.Resource; 
import javax.servlet.http.HttpServletRequest; 
  
import org.apache.commons.codec.digest.DigestUtils; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
  
import com.alibaba.model.User; 
import com.alibaba.service.UserService; 
import com.alibaba.util.RequestUtil; 
  
/** 
 * @author tfj 
 * 2014-7-26 
 */
@Controller
public class SystemController { 
  private final Logger log = LoggerFactory.getLogger(SystemController.class); 
  @Resource
  private UserService userService; 
    
  @RequestMapping(value = "/",method = RequestMethod.GET) 
  public String home() { 
    log.info("返回首页!"); 
    return "index"; 
  } 
    
  @RequestMapping(value = "/test/hello",method = RequestMethod.GET) 
  public String testHello() { 
    log.info("执行了testHello方法!"); 
    return "testHello"; 
  } 
    
  @RequestMapping(value = "/login",method = RequestMethod.POST) 
  public String testLogin(HttpServletRequest request,@RequestParam String username, @RequestParam String password) { 
    log.info("执行了testLogin方法!"); 
    User user = userService.findUserByName(username); 
    if(user!=null){ 
      if(user.getPassword().equals(DigestUtils.md5Hex(password))){ 
        request.getSession().setAttribute("userId", user.getId());  
        request.getSession().setAttribute("user", username);  
        return "redirect:" + RequestUtil.retrieveSavedRequest();//跳转至访问页面 
      }else{ 
        log.info("密码错误");  
        request.getSession().setAttribute("message", "用户名密码错误,请重新登录"); 
        return "login";  
      } 
    }else{ 
      log.info("用户名不存在");  
      request.getSession().setAttribute("message", "用户名不存在,请重新登录"); 
      return "login";  
    } 
  } 
}
ログイン後にコピー

サービスとモデルについては書きません。mybatis

<?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="com.alibaba.dao.UserMapper">   
  <select id="findUserByName" resultType="com.alibaba.model.User"> 
    select id, username , password from sysuser where username = #{username}  
  </select> 
</mapper>
ログイン後にコピー

7のマッパークラスのマッピングについては、主にログインとログイン成功ページなので書きません

。 、 springmvc + mybatis の統合は成功しました。後ほど複雑な機能が追加されます

注意事項

1. フレームワーク内の druid と logback の設定はすべて公式 Web サイトからコピーしたものなので、読者は無視するか、使い慣れたものに変更してください。データベース コンポーネントとロギング フレームワーク (c3p0 や log4j など)。

2. コードに権限管理が追加されました。つまり、アクセスする前にログインする必要があり、ログイン後にアクセスするページにジャンプします

3. この記事は最もシンプルで基本的なものです。テストコードからコードを剥がしました。きれいに剥がせていないのはご容赦ください。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

さらに SpringMVC+MyBatis ページング (最新) 関連記事については、PHP 中国語 Web サイトに注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? 適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか? Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

See all articles