Heim > Java > javaLernprogramm > Hauptteil

Detailliertes Beispiel für springmvc+mybatis

零下一度
Freigeben: 2017-06-23 09:23:15
Original
1994 Leute haben es durchsucht

Wie bereits erwähnt: Spring+SpringMVC+MyBatis ausführliches Lernen und Erstellen (13) - SpringMVC-Einstiegsprogramm (2)

1. Anforderungen

Verwenden Sie springmvc und mybatis Schließen Sie die Produktlistenabfrage ab.

2. Integrationsideen

Systemarchitektur von springmvc+mybatis:

Schritt 1: Dao-Schicht integrieren

Mybatis ist in Spring integriert und die Mapper-Schnittstelle wird über Spring verwaltet.

Verwenden Sie den Mapper-Scanner, um die Mapper-Schnittstelle automatisch zu scannen und im Frühjahr zu registrieren.

Schritt 2: Integrieren Sie die Serviceschicht

Verwalten Sie die Serviceschnittstelle bis zum Frühjahr.

Verwenden Sie die Konfigurationsmethode, um die Serviceschnittstelle in der Spring-Konfigurationsdatei zu konfigurieren.

Transaktionskontrolle implementieren.

Schritt 3: SpringMvc integrieren

Da springmvc ein Modul von Spring ist, ist keine Integration erforderlich.

3. Umgebungsvorbereitung

Datenbankumgebung: mysql5.6

Java-Umgebung:

jdk1.7

MyEclipse2014

springmvc-Version: spring3.2

Erforderliches JAR-Paket:

Datenbanktreiberpaket

Mybatis-JAR-Paket

Mybatis Spring-Integrationspaket

Log4j-Paket

Dbcp-Datenbankverbindungspool-Paket

Spring3.2 All-JAR-Pakete

JSTL-Paket

Prozessstrukturverzeichnis:

4. Integrieren Sie Dao

Mybatis und Spring.

4.1 db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatisdemo
jdbc.username=root
jdbc.password=
Nach dem Login kopieren

4.2 log4j.properties

# Global logging configuration,建议开发环境要用debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
Nach dem Login kopieren

4.3 sqlMapConfig.xml

Erstellen Sie mybatis/sqlMapConfig.xml unter dem Klassenpfad.

<?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> <!-- 全局setting配置,根据需要添加 --><!-- 配置别名 --><typeAliases><!-- 批量扫描别名 --><package name="joanna.yan.ssm.po"/></typeAliases><!-- 配置mapper
         由于使用spring和mybatis的整合包进行mapper扫描,这里不需要配置了。
         但是必须遵循:mapper.xml和mapper.java文件同名且在一个目录     --><!-- <mappers></mappers> -->
 </configuration>
Nach dem Login kopieren

4.4 applicationContext-dao.xml

Erstellen Sie spring/applicationContext-dao.xml unter dem Klassenpfad. Konfiguration: Datenquelle, Transaktionsverwaltung, SqlSessionFactory, Mapper-Scanner.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans 
         
         
         
         
         
         
         
         
         "><!-- 加载db.properties文件中的内容,db.properties文件中的key命名要有一定的特殊规则 --><context:property-placeholder location="classpath:db.properties"/><!-- 配置数据源,dbcp --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><property name="maxActive" value="30"/><property name="maxIdle" value="5"/></bean><!-- sqlSessinFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" /><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /></bean><!-- mapper扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开  --><property name="basePackage" value="joanna.yan.ssm.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean></beans>
Nach dem Login kopieren

4.5 Reverse Engineering zum Generieren von Po-Klassen und Mappern (d. h. Hinzufügen, Löschen, Ändern und Abfragen einzelner Tabellen)

Einzelheiten finden Sie unter: Spring+ SpringMVC + MyBatis ausführliches Lernen und Konstruieren (10) – MyBatis Reverse Engineering

Kopieren Sie die generierten Dateien in das Projekt.

4.6 Definieren Sie den Produktabfrage-Mapper manuell.

Für den umfassenden Abfrage-Mapper gibt es im Allgemeinen verwandte Abfragen, und es wird empfohlen, den Mapper anzupassen.

4.6.1 ItemsMapperCustom.xml

SQL-Anweisung:

SELECT * FROM items WHERE items.name LIKE '%Notebook%'

<?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="joanna.yan.ssm.mapper.ItemsMapperCustom" ><!-- 定义商品查询的sql片段,就是商品查询条件 --><sql id="query_items_where"><!-- 使用动态sql,通过if判断,满足条件进行sql拼接 --><!-- 商品查询条件通过ItemsQueryVo包装对象中itemsCustom属性传递 --><if test="itemsCustom!=null"><if test="itemsCustom.name!=null and itemsCustom.name!=&#39;&#39;">items.name LIKE '%${itemsCustom.name}%'</if></if></sql><!-- 商品列表查询 --><!-- parameterType传入包装对象(包装了查询条件)
         resultType建议使用扩展对象     --><select id="findItemsList" parameterType="joanna.yan.ssm.po.ItemsQueryVo" 
    resultType="joanna.yan.ssm.po.ItemsCustom">SELECT items.* FROM items<where><include refid="query_items_where"></include></where></select></mapper>
Nach dem Login kopieren

4.6.2 ItemsMapperCustom.java

public interface ItemsMapperCustom {//商品查询列表public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception;
}
Nach dem Login kopieren

5. Service integrieren

Lassen Sie Spring die Serviceschnittstelle verwalten.

5.1 Serviceschnittstelle definieren

package joanna.yan.ssm.service;import java.util.List;import joanna.yan.ssm.po.ItemsCustom;import joanna.yan.ssm.po.ItemsQueryVo;public interface ItemsService {//商品查询列表public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception;
}
Nach dem Login kopieren
package joanna.yan.ssm.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import joanna.yan.ssm.mapper.ItemsMapperCustom;import joanna.yan.ssm.po.ItemsCustom;import joanna.yan.ssm.po.ItemsQueryVo;import joanna.yan.ssm.service.ItemsService;public class ItemsServiceImpl implements ItemsService{
    
    @Autowiredprivate ItemsMapperCustom itemsMapperCustom;

    @Overridepublic List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo)throws Exception {//通过ItemsMapperCustom查询数据库return itemsMapperCustom.findItemsList(itemsQueryVo);
    }
}
Nach dem Login kopieren

5.2 Service im Spring Container konfigurieren (applicationContext-service.xml)

Erstellen Sie spring/applicationContext-service.xml unter dem Klassenpfad und konfigurieren Sie den Dienst in der Datei.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans 
         
         
         
         
         
         
         
         
         "><!-- 商品管理的service --><bean id="itemsService" class="joanna.yan.ssm.service.impl.ItemsServiceImpl"/></beans>
Nach dem Login kopieren

5.3 Transaktionssteuerung (applicationContext-transaction.xml)

Erstellen Sie spring/applicationContext-service.xml unter dem Klassenpfad und verwenden Sie deklarative Spring-Transaktionen im Dateikontrollmethoden.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans 
         
         
         
         
         
         
         
         
         "><!-- 事务管理器
         对mybatis操作数据库事务控制,spring使用jdbc的事务控制类      --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 数据源
             dataSource在applicationContext-dao.xml中配置了         --><property name="dataSource" ref="dataSource"/>    </bean><!-- 通知  --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><!-- 可以变相的规范程序员的命名,例如以save开头,update开头等,不能想怎么命名就怎么命名 --><tx:method name="save*" propagation="REQUIRED"/><!-- 要求 --><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <!-- 支持,如果没有就算了 --><tx:method name="get*" propagation="SUPPORTS" read-only="true"/><tx:method name="select*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice><!-- aop --><aop:config><!-- 切入点为joanna.yan.ssm.service.impl包下所有类的所有方法,不管里面什么参数 --><aop:advisor advice-ref="txAdvice" pointcut="execution(* joanna.yan.ssm.service.impl.*.*(..))"/></aop:config></beans>
Nach dem Login kopieren

6. Springmvc integrieren

6.1 springmvc.xml

Erstellen Sie die Datei spring/springvc.xml unter dem Klassenpfad und konfigurieren Sie die Prozessorzuordnung Konverter, Adapter, View-Resolver.

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans 
         
         
         
         
         
         
         
         
         "><!-- 可以扫描controller、service、...
         这里让扫描controller,指定controller的包      --><context:component-scan base-package="joanna.yan.ssm.controller"></context:component-scan><!--注解映射器 --><!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> --><!--注解适配器 --><!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> --><!--使用mvc:annotation-driven代替上边注解映射器和注解适配器 配置
        mvc:annotation-driven默认加载很多的参数绑定方法,
        比如json转换解析器就默认加载了,如果使用mvc:annotation-driven就不用配置上面的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
        实际开发时使用mvc:annotation-driven     --><mvc:annotation-driven></mvc:annotation-driven><!-- 配置视图解析器 
         解析jsp视图,默认使用jstl标签,所有classpath下得有jstl的包--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--配置jsp路径的前缀  --><property name="prefix" value="/WEB-INF/jsp/"/><!--配置jsp路径的后缀  --><property name="suffix" value=".jsp"/></bean></beans>
Nach dem Login kopieren

6.2 Konfigurieren des Front-End-Controllers

Referenzeinstiegsprogramm: Spring+SpringMVC+MyBatis ausführliches Lernen und Konstruieren (12) - SpringMVC-Einstiegsprogramm (1)

in web.xml konfiguriert:

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee " id="WebApp_ID" version="3.0">
  <display-name>SpringMVC_MyBatis</display-name>
  <welcome-file-list><welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <!-- springmvc前端控制器  -->
  <servlet>  <servlet-name>springmvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <!-- contextConfigLocation配置springmvc加载的配置文件(该配置文件中配置了处理器映射器、适配器等等) 
           如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(即springmvc-servlet.xml)      -->  <init-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:spring/springmvc.xml</param-value>  </init-param>  <!-- 表示servlet随服务启动 -->  <load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>  <servlet-name>springmvc</servlet-name>  <!--Servlet拦截方式
          方式一:*.action,访问以.action结尾由DispatcherServlet进行解析
          方式二:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析。
          使用此方式可以实现RESTful风格的url
          方式三:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,
          仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到handler,会报错-->  <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  </web-app>
Nach dem Login kopieren

6.3 Schreibcontroller (d. h. Handler)

@Controllerpublic class ItemsController {
    
    @Autowiredprivate ItemsService itemsService;//商品查询http://localhost:8080/SpringMVC_MyBatis/queryItems.action@RequestMapping("/queryItems")public ModelAndView queryItems() throws Exception{//调用service查找数据库,查询商品列表List<ItemsCustom> itemsList=itemsService.findItemsList(null);        //返回ModelAndViewModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("itemsList", itemsList);//指定视图//        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");//下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为modelAndView.setViewName("items/itemsList");return modelAndView;
    }
}
Nach dem Login kopieren

6.4 JSP schreiben

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="" prefix="c" %><%@ taglib uri=""  prefix="fmt"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>查询商品列表</title></head><body> <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">查询条件:<table width="100%" border=1><tr><td><input type="submit" value="查询"/></td></tr></table>商品列表:<table width="100%" border=1><tr><td>商品名称</td><td>商品价格</td><td>生产日期</td><td>商品描述</td><td>操作</td></tr><c:forEach items="${itemsList }" var="item"><tr><td>${item.name }</td><td>${item.price }</td><td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td><td>${item.detail }</td><td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td></tr></c:forEach></table></form></body></html>
Nach dem Login kopieren

7. Mapper, Service und Controller in Spring laden Behälter.

Es wird empfohlen, zum Laden der obigen Konfigurationsdatei Platzhalterzeichen zu verwenden.

Fügen Sie den Spring-Container-Listener in web.xml hinzu und laden Sie den Spring-Container.

  <!-- 加载spring容器 -->
  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
  </context-param>
  <listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
Nach dem Login kopieren
8. Produktabfrage und Debugging

Zugriffsadresse: http://localhost:8080/SpringMVC_MyBatis/queryItems.action

Abfrage Ergebnisse:

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für springmvc+mybatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!