zoukankan      html  css  js  c++  java
  • Spring + Spring MVC + MyBatis 整合

    1. 所需要Jar包.

    //Spring3.0.1包

    org.springframework.web-3.0.1 系列

    //公共包

    slf4j-api-1.5.6.jar slf4j-log4j12-1.5.6.jar log4j-1.2.13.jar

    commons-logging-1.1.1.jar asm-3.1.jar cglib-2.2.jar

    //mybatis与Spring的整合所需的包

    mybatis-3.0.5.jar

    aopalliance-1.0.jar

    mybatis-spring-1.0.1.jar

    mybatis-generator-core-1.3.1.jar(mybatis代码生成器包)

    //jdbc driven

    mysql-connector-java-3.1.6-bin.jar

    //JSR验证-Hibernate validate 4.1

    hibernate-validator-4.1.0.Final.jar

    validation-api-1.0.0.GA.jar

    //Spring Json 支持包

    jackson-all-1.8.1.jar



    2. web.xml配置

    Servlet配置

    org.springframework.web.servlet.DispatcherServlet

    init-param配置servlet初始化文件.

    以及servlet-mapping配置.

    应用路径配置

    webAppRootKey

    Log4j配置

    Log4jConfigLocation

    Log4jRefreshInterval

    Spring上下文配置

    contextConfigLocation

    Spring字符集过滤器配置

    org.springframework.web.filter.CharacterEncodingFilter

    Spring监听器配置

    org.springframework.web.context.ContextLoaderListener

    log4j监听器配置

    org.springframework.web.util.Log4jConfigListener



    3. spring mvc - servlet.xml配置

    启动mvc注解驱动

    <mvc:annotation-driven/>

    组件scanner主要是自动去注入指定包里的对象

    <context:component-scan

    base-package="com.los.mvc.controller"/>

    ViewResolver & View 映射关系

    InternalResourceViewResolver 基于resource对jsp/jstl的支持

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <property name="prefix" value="/WEB-INF/views/"/>

    <property name="suffix" value=".jsp"/>

    <!-- InternalResourceViewResolver viewClass默认值就是JstlView -->

    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>

    </bean>

    自定义拦截器配置

    <mvc:interceptors>

    <mvc:interceptor>

    <mvc:mapping path="/json*"/>

    <bean class="com.los.mvc.interceptor.MyInterceptor"></bean>

    </mvc:interceptor>

    </mvc:interceptors>

    国际化配置

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

    <property name="basename" value="message"></property>

    </bean>



    4. Spring上下文 -- applicationContext.xml 配置

    支持注解

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>

    <import resource="service.xml"/>

    <import resource="dao.xml"/>

    <import resource="orm.xml"/>



    service.xml dao.xml 配置@service 和 @Repository



    5. Mybatis3.0.5-Spring 整合 -- orm.xml

    DataSource配置

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

    <property name="url" value="jdbc:mysql://localhost:3306/mvc"/>

    <property name="username" value="root" />

    <property name="password" value="root" />

    </bean>



    注册事务管理器(Mybatis将事务转交给Spring来管理)

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <property name="dataSource" ref="dataSource" />

    </bean>

    SqlSessionFactory配置(Mybatis核心是sqlSessionFactory来获取orm处理对象, dataSource, mapperLocations配置mybaits自动生成的xml文件.就是注入映射关系.)

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

    <property name="dataSource" ref="dataSource" />

    <property name="mapperLocations" value="classpath:/com/los/mvc/mapper/*.xml" />

    </bean>

    MapperScanner配置.自动去搜索mapper里的对象,并注入.

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <property name="basePackage" value="com.los.mvc.dao" />

    </bean>

    启动Spring注解事务

    <tx:annotation-driven/>



    6. mybatis自动生成器配置 -- generatorConfig.xml

    sqlMapGenerator sqlMpper.xml生成器

    javaClientGenerator ModelDao生成器

    javaModelGenerator Model生成器

    com.los.util.MBG.java 运行会自动生成mybatis代码.然后再配置orm.xml



    7. Controller层配置

    类注解

    @Controller

    @RequestMapping("/json")为访问该层的路径.



    方法注解

    @RequestMapping(method = RequestMethod.GET) 只有get方法才能访问.

    @ResponseBody 自动将返回的封装成json,方法返回值必须是map<String,?>类型.

    @RequestMapping(value="/doLogin") value=”doLogin”为访问该方法的handler mapping

    return "login/login";会通过ViewResolver找到对应的view

    return "redirect:/user/toRegister.html";为spring-mvc的重定向.

    @InitBinder()为绑定器,可以为request传来的数据进行数据类型转换.



    数据自动验证

    方法中参数需要有后面的两个(@Valid User user,BindingResult result).@Valid的支持标准是JSR,Hibernate Validate 4是对该标准比较好的实现.需要在Model类中配置验证的注解.判断验证是否正确通过result.hasErrors()或者result.hasFieldErrors()来判断,通过result.getAllErrors()或者result.getFieldErrors()来获取Errors然后遍历Errors获取相关想要的信息,例如Error.getDeafaultMessage(),这个是获取错误信息.具体的错误验证机制还地在Model类中配置.



    属性注解

    @Autowired 会为该属性自动注入bean,默认方式是byType.也可以用@Resource这个注解默认是byName.



    8. Service层配置.(业务层)

    类注解

    @Service 为@Component的子注解,分工更明细.

    @Transactional 可以为该业务类声明一个全类的事务.也可以将事务写在方法上.根据不同的需要.



    方法注解

    @Transactional(readOnly = true)

    @Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 类的事务声明,可以设置隔离级别和传播属性,以及要回滚的异常名或者异常类,不需要回滚的异常名或者异常类.异常通常抛出给controller层来处理



    属性注解

    @Autowired @Resource

    9. Repository层配置.(持久层DaoImpl)

    类注解

    @Repository 为@Component的子注解,意为持久层,分工更明细.一般不在这层处理事务.



    10.Entry层配置(Model层)

    类注解

    @Entry

    验证注解,常用的有:

    @NotEmpty

    @NotNull

    @Size(min=2,max=10,message=”xx必须在{min}和{max}之间”)

    @Email

    @DecimalMax

    @AssertFalse @AssertTrue

    @Null

    @Valid

    @URL(protocol=,host=, port=,regexp=, flags=)

    一般情况下属性或者方法可以放多个约束注解,hibernate validate会以随机的顺序去验证这些约束.所以多个注解约束会有可能同一个属性返回多个message.所以有时候需要只返回一条message,则需要使用验证组Groups来达成.组别序列可以把一系列的组别按照一定的顺序排列在一起,然后逐个验证,只要有一个组别验证失败,就不继续验证剩余的组别。

    @GroupSequence({User.class,GroupB.class,GroupC.class})验证组的顺序,约束里不指定group的为默认的User.class组.

    约束组放在类前,User.class为默认的约束组,GroupB,GroupC为空的接口.写在User外同个java文件下.

    @NotEmpty(message="密码不能为空")

    @Size(min=4,max=20,message="密码长度必须在{min}-{max}范围内",groups = GroupB.class)

    如果@NotEmpty验证失败了,就不会继续验证@Size
  • 相关阅读:
    ODBC数据源选项卡中的系统DNS,用户DNS和文件DNS
    Oracle学习的零散问题
    【今日CV 计算机视觉论文速览】Thu, 7 Mar 2019
    【图像风格转换】项目参考资料总结
    【今日CV 计算机视觉论文速览】Thu, 28 Feb 2019
    【今日CV 计算机视觉论文速览】Tue, 26 Feb 2019
    【今日CV 计算机视觉论文速览】Wed, 27 Feb 2019
    【python】set集合基础与使用
    hdu 4259 Double Dealing
    hdu 1538 A Puzzle for Pirates 博弈论
  • 原文地址:https://www.cnblogs.com/chenying99/p/2379351.html
Copyright © 2011-2022 走看看