MyBaits Spring MVC JSP零基础搭建Web开发框架(注解模式)
spring4+springmvc+mybatis基本框架(app后台框架搭建一)

spring4+springmvc+mybatis基本框架(app后台框架搭建⼀)前⾔:随着spring 越来越强⼤,⽤spring4来搭建框架也是很快速,问题是你是对spring了解有多深⼊。
如果你是新⼿,那么在搭建的过程中可以遇到各种各样奇葩的问题。
SSM框架的搭建是作为我搭建APP开发框架的基础。
我将会分以下⼏点:1) 配置⽂件如何配置2) 如何java配置启动servlet3) ⼀些搭建过程中的坑=============================================================================配置⽂件如何配置SSM框架的搭建配置⽅式有很多种,可具体分可以分为javaConfig配置,xml配置,或者xml⽂件与javaConf混合配置。
其实⽤那种都⾏了,我个⼈搭建还是偏xml配置,不过现在的javaConfig也很成熟,也可以考虑,就是有⼀些坑,后⾯会讲到的;混合配置,⽤的情况也是蛮多的,分享中会涉及⼀点。
接下来,我主要是以java配置类做的配置:这是项⽬的结构 com.ouyang.teson⽬录下直接放置配置类:1)AppConfig.javapackage com.ouyang.teson;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.context.annotation.*;import org.springframework.transaction.annotation.EnableTransactionManagement;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.mvc.Controller;/*** Created by ThinkPad on 2017/6/15.*/@Configuration@EnableAspectJAutoProxy@EnableTransactionManagement@ComponentScan(basePackages = {"com.ouyang.teson"},excludeFilters={@ComponentScan.Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})@Import(AppDataConfig.class)//@PropertySource({"classpath:jdbc.properties"})//@ImportSource("XXXX.xml")/*@Configuration,⽤于表⽰这个类是⼀个配置类,⽤于配置Spring的相关信息@EnableAspectJAutoProxy,启⽤切⾯⾃动代理,⽤于AOP@EnableTransactionManagement,启⽤注解事务,即可以使⽤@Transactional注解来控制事务@ComponentScan,组件扫描,在basePackages指定的⽬录下扫描被@Controller、@Service、@Component等注解注册的组件@Import,引⼊指定的配置类,我们引⼊了Spring容器配置类和数据源事务配置类@PropertySource,加载指定的配置⽂件,配置⽂件内容会加载⼊Environment中等待调⽤*/public class AppConfig {@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();// 跟@MapperScan(basePackages = { "com.ouyang.teson.dao" }) 等同//如果通过web.xml 加载servlet的话,可能找不到映射对象建议⽤注解mapperScannerConfigurer.setBasePackage("com.ouyang.teson.dao");mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");return mapperScannerConfigurer;}}2) AppDataConfig.java 是导⼊的配置package com.ouyang.teson;import com.alibaba.druid.pool.DruidDataSource;import com.ouyang.teson.bean.TestBean;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.*;import org.springframework.core.env.Environment;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;import java.io.IOException;/*** Created by ThinkPad on 2017/6/15.*/@EnableAspectJAutoProxy@EnableTransactionManagement@PropertySource({"classpath:jdbc.properties"})//@MapperScan(value={"/com/ouyang/teson/dao/*.xml"},basePackages = {"com.ouyang.teson.dao"})public class AppDataConfig {@Autowiredprivate Environment env;//设置阿⾥druid数据源@Bean(name="dataSource")public DataSource getDataSource() {DruidDataSource druidDataSource = new DruidDataSource();System.out.println("=============env============"+env.getProperty("jdbc.driverClassName"));druidDataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));druidDataSource.setUsername(env.getProperty("ername"));druidDataSource.setPassword(env.getProperty("jdbc.password"));druidDataSource.setUrl(env.getProperty("jdbc.url"));//连接超时时间druidDataSource.setMaxWait(10000);//最⼤存活时间//druidDataSource.setMaxActive(10000);// 配置间隔多久才进⾏⼀次检测,检测需要关闭的空闲连接,单位是毫秒druidDataSource.setTimeBetweenEvictionRunsMillis(60000);//连接池中的最⼩⽣存时间druidDataSource.setMinEvictableIdleTimeMillis(300000);//这⾥建议配置为TRUE,防⽌取到的连接不可⽤druidDataSource.setTestOnBorrow(true);druidDataSource.setTestOnReturn(false);//⾃动提交druidDataSource.setDefaultAutoCommit(true);druidDataSource.setPoolPreparedStatements(true);druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(20);return druidDataSource;}// 配置SqlSessionFactory对象public SqlSessionFactoryBean getSqSesionFactorys() throws IOException {SqlSessionFactoryBean sqlSessionFactoryBean =new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(getDataSource());// sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml")); // 这⾥可以通过mybatis-config.xml 来设置 typeAliasPackage和mapper。
SpringBoot+Mybatis框架之@Select注解方式搭建

SpringBoot+Mybatis框架之@Select注解⽅式搭建 1、创建SpringBoot项⽬ 两种⽅式:1、通过idea来New⼀个project项⽬。
pom.xml⽂件的配置(其中mysql的maven配置可能会和你本地的不服,会报数据库连接的错误,如果出现这种问题,改⼀下数据库版本就可以):<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--集成⽇志logback+slf4j --><!-- https:///artifact/org.slf4j/slf4j-api --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.2</version></dependency></dependencies><!--<packaging>jar</packaging>--><build><finalName>demo</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project> application.properties⽂件中的配置项(端⼝、数据库配置、debug、mybatis)#项⽬的启动端⼝server.port=9090#数据库的配置spring.datasource.url=jdbc:mysql://localhost:3306/DBName?useUnicode=true&characterEncoding=utf-8&useSSL=true ername= USERNAMEspring.datasource.password= PASSWORDspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#显⽰标准输出.shyroke.mapper=debug#路径是是实体类的路径,和写在所有Mapper⽂件中⽤来扫描Mapper⽂件的@Mapper注解联⽤mybatis.type-aliases-package=com.web.test.test.domain 2、项⽬内部结构 3、项⽬的最⼩功能代码 这个例⼦是实现⼀个简单的查询功能: Controller层:package com.web.test.test.controller;import com.web.test.test.service.TeacherService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TeacherController {@Autowiredprivate TeacherService teacherService; //Select By Id@RequestMapping("/showTeacher/{id}")public String selectTeacher(@PathVariable int id){return teacherService.selectTeacher(id).toString();}//Select All@RequestMapping("/selectAll")public String selectAll(){return teacherService.selectAll().toString();} * 有的朋友想在return的时候直接跳转界⾯去,看到@RestController了吗,这个是ResponseBody和Controller的集合,意思是return的数据都变成json的格式,返回到前端,不会跳转界⾯。
SpringMVC框架搭建流程(完整详细版)

SpringMVC框架搭建流程(完整详细版)SpringMVC框架搭建流程开发过程1)配置DispatcherServlet前端控制器2)开发处理具体业务逻辑的Handler(@Controller、 @RequestMapping)3) xml配置⽂件配置controller扫描,配置springmvc三⼤件4)将xml⽂件路径告诉springmvc(DispatcherServlet)详细流程:创建⽬录新建maven项⽬,注意选择webapp⾻架。
创建成功之后会发现没有src等⽬录,这些需要我们⼿动创建:在src下⾯新建main,main下⾯新建java⽬录,选择java⽬录,右键,在main下⾯继续新建resource⽬录,选择resource⽬录,右键,pom.xmlpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><groupId></groupId><artifactId>springmvc-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>11</piler.source><piler.target>11</piler.target></properties><dependencies><!--引⼊spring webmvc的依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.12.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build></project>注意Tomcat7插件是⽤来运⾏项⽬的,右侧运⾏:springmvc相关配置main⽂件夹下⾯新建webapp⽂件夹,webapp下⾯新建WEB-INF,下⾯新建web.xml<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--⽅式⼀:带后缀,⽐如*.action *.do *.aaa该种⽅式⽐较精确、⽅便,在以前和现在企业中都有很⼤的使⽤⽐例⽅式⼆:/ 不会拦截 .jsp,但是会拦截.html等静态资源(静态资源:除了servlet和jsp之外的js、css、png等)为什么配置为/ 会拦截静态资源因为tomcat容器中有⼀个web.xml(⽗),你的项⽬中也有⼀个web.xml(⼦),是⼀个继承关系⽗web.xml中有⼀个DefaultServlet, url-pattern 是⼀个 /此时我们⾃⼰的web.xml中也配置了⼀个 / ,覆写了⽗web.xml的配置为什么不拦截.jsp呢?因为⽗web.xml中有⼀个JspServlet,这个servlet拦截.jsp⽂件,⽽我们并没有覆写这个配置,所以springmvc此时不拦截jsp,jsp的处理交给了tomcat如何解决/拦截静态资源这件事?⽅式三:/* 拦截所有,包括.jsp--><!--拦截匹配规则的url请求,进⼊springmvc框架处理--><url-pattern>/</url-pattern></servlet-mapping></web-app>⾥⾯配置了springmvc相关的配置,引⼊了springmvc.xml:在resource⽬录下新建springmvc.xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beanshttps:///schema/beans/spring-beans.xsd/schema/contexthttps:///schema/context/spring-context.xsd/schema/mvchttps:///schema/mvc/spring-mvc.xsd"><!--开启controller扫描--><context:component-scan base-package=".controller"/><!--配置springmvc的视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><!--⾃动注册最合适的处理器映射器,处理器适配器(调⽤handler⽅法)--><mvc:annotation-driven/></beans>在java⽬录下新建包.controller,下⾯新建DemoController:package .controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import java.util.Date;/*** @author lyj* @Title: DemoController* @ProjectName springmvc-demo* @Description: TODO* @date 2020/6/9 21:21*/@Controller@RequestMapping("/demo")public class DemoController {/*** http://localhost:8080/demo/handle01*/@RequestMapping("/handle01")public ModelAndView handle01(){Date date=new Date();ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("date",date);modelAndView.setViewName("success");return modelAndView;}}在WEB-INF下⾯新建jsp⽂件夹,下⾯新建success.jsp:<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>当前时间 ${date}</body></html>完毕后整个项⽬结构如下:测试:浏览器访问:。
SpringMVC+MyBatis(最新)

目前主流的Web MVC框架,除了Struts这个主力外,还有Spring MVC,主要是由于Spring MVC配置比较简单,使用起来也十分明了,非常灵活,与Spring 集成较好,对RESTful API 的支持也比struts要好。
MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL、存储过程和高级映射的持久层框架。
与hibernate的主要区别就是mybatis是半自动化的,而hibernate是全自动的,所以当应用需求越来越复杂的时候,自动化的sql显得比较笨拙。
由于前段时间接了个项目要用springmvc做,所以我抱着练手的态度,又玩起了整合框架的游戏。
经常搭框架的人应该都清楚,框架搭建的核心就是配置文件。
所以我主要贴下几个配置文件的代码。
还是那句话,我都是写好配置文件之后,运行报错再加jar。
这里列一下我用的jar包(应该是最少的):备注:上图有一些额外的jar,比如我用的数据库连接池是阿里巴巴的druid、日志框架式logback,所以引入了相关jar。
关于这两个框架的使用和配置都是非常简单的,所以这里就不细说。
1.整合SpringMVCspringMybatis-servlet.xml:[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/schema/beans"xmlns:xsi="http:///2001/XMLSchema-instance"3.xmlns:context="/schema/context"4.xmlns:mvc="/schema/mvc"5.xsi:schemaLocation="/schema/beans http:///schema/beans/spring-beans.xsd6. /schema/context http://www.springframe/schema/context/spring-context.xsd7. /schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">8.9.<!-- 启用spring mvc 注解-->10.<mvc:annotation-driven>11.</mvc:annotation-driven>12.13.<!-- 自动扫描的包名,使Spring支持自动检测组件,如注解的Controller-->14.<context:component-scan base-package="com.alibaba.controller"/>15.<context:component-scan base-package="com.alibaba.service"/>16.17.18.<!-- 视图解析器:定义跳转的文件的前后缀 -->19.<bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">20.<property name="prefix"value="/WEB-INF/jsp/"/>21.<property name="suffix"value=".jsp"/><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->22.</bean>23.24.<!--配置拦截器, 多个拦截器,顺序执行 -->25.<mvc:interceptors>26.<mvc:interceptor>27.<!-- 匹配的是url路径 -->28.<mvc:mapping path="/"/>29.<mvc:mapping path="/user/**"/>30.<mvc:mapping path="/test/**"/>31.32.<bean class="monInterceptor"></bean>33.</mvc:interceptor>34.<!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->35.</mvc:interceptors>36.37.</beans>2.整合Mybatisspring-dao.xml:[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/schema/beans"xmlns:xsi="http:///2001/XMLSchema-instance"3.xmlns:mybatis="/schema/mybatis-spring"4.xmlns:context="/schema/context"5.xsi:schemaLocation="/schema/beans http:///schema/beans/spring-beans.xsd6. /schema/mybatis-spring /schema/mybatis-spring.xsd7. /schema/context http://www.springframew/schema/context/spring-context.xsd">8.9.<!-- 该包下的类支持注解,表示会被当作{@code mybatis mapper}处理配置了之后表示可以自动引入mapper类-->10.<mybatis:scan base-package="com.alibaba.dao"/>11.<!--引入属性文件 -->12.<context:property-placeholder location="classpath:configuration.properties"/>13.14.<!--数据库连接-->15.<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">16.<property name="url"value="${jdbc.url}"/>17.<property name="username"value="${ername}"/>18.<property name="password"value="${jdbc.password}"/>19.<!-- 配置初始化大小、最小、最大 -->20.<property name="initialSize"><value>1</value></property>21.<property name="maxActive"><value>5</value></property>22.<property name="minIdle"><value>1</value></property>23.<!-- 配置获取连接等待超时的时间 -->24.<property name="maxWait"><value>60000</value></property>25.<!-- 配置监控统计拦截的filters -->26.<property name="filters"><value>stat</value></property>27.<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->28.<property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>29.<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->30.<property name="minEvictableIdleTimeMillis"><value>300000</value></property>31. <!--32.<property name="validationQuery"><value>SELECT 'x'</value></property>33.<property name="testWhileIdle"><value>true</value></property>34.<property name="testOnBorrow"><value>false</value></property>35.<property name="testOnReturn"><value>false</value></property>36.<property name="poolPreparedStatements"><value>true</value></property>37.<property name="maxOpenPreparedStatements"><value>20</value></property>38. -->39.</bean>40.41.<!-- mybatis配置 -->42.<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">43.<property name="dataSource"ref="dataSource"/>44.</bean>45.</beans>3.web.xml整合SpringMVC和Mybatis[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<web-app xmlns:xsi="http://www.w/2001/XMLSchema-instance"xmlns="http:///xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee http:///xml/ns/javaee/web-app_3_0.xsd"version="3.0">3.<!--该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static/目录,如原来访问http://localhost/foo.css,现在http://localhost/static/foo.css-->4.<!-- 不拦截静态文件 -->5.<servlet-mapping>6.<servlet-name>default</servlet-name>7.<url-pattern>/js/*</url-pattern>8.<url-pattern>/css/*</url-pattern>9.<url-pattern>/images/*</url-pattern>10.<url-pattern>/fonts/*</url-pattern>11.</servlet-mapping>12.13.<!-- 配置字符集 -->14.<filter>15.<filter-name>encodingFilter</filter-name>16.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>17.<init-param>18.<param-name>encoding</param-name>19.<param-value>UTF-8</param-value>20.</init-param>21.<init-param>22.<param-name>forceEncoding</param-name>23.<param-value>true</param-value>24.</init-param>25.</filter>26.<filter-mapping>27.<filter-name>encodingFilter</filter-name>28.<url-pattern>/*</url-pattern>29.</filter-mapping>30.31. <!-- 初始化 DispatcherServlet时,该框架在 web应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件,32.并在那里定义相关的Beans,重写在全局中定义的任何Beans -->33.<servlet>34.<servlet-name>springMybatis</servlet-name>35.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>36.<load-on-startup>1</load-on-startup>37.</servlet>38.<servlet-mapping>39.<servlet-name>springMybatis</servlet-name>40.<!-- 所有的的请求,都会被DispatcherServlet处理 -->41.<url-pattern>/</url-pattern>42.</servlet-mapping>43.44.<context-param>45.<param-name>contextConfigLocation</param-name>46.<param-value>/WEB-INF/config/spring-*.xml</param-value>47.</context-param>48.<listener>49.<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>50.</listener>51.<!-- druid web 监控 -->52.<servlet>53.<servlet-name>DruidStatView</servlet-name>54.<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>55.</servlet>56.<servlet-mapping>57.<servlet-name>DruidStatView</servlet-name>58.<url-pattern>/druid/*</url-pattern>59.</servlet-mapping>60.61.<error-page>62.<error-code>404</error-code>63.<location>/error/404.jsp</location>64.</error-page>65.<error-page>66.<error-code>500</error-code>67.<location>/error/500.jsp</location>68.</error-page>69.</web-app>4.logback.xml日志配置[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<configuration>3.4.<appender name="STDOUT"class="ch.qos.logback.core.ConsoleAppender">5.<encoder>6.<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>7.</encoder>8.</appender>9.10.<logger name="test.LogbackTest"level="TRACE"/>11.12.<logger name="com.alibaba.controller.TestController"level="TRACE"/>13.14.<logger name="org.springframework.web.servlet.DispatcherServlet"level="DEBUG"/>15.<logger name="druid.sql"level="INFO"/><!-- 如果spring-config里面没有配置slf4j,就不会显示sql日志,logback只是slf4j的一个实现 -->16.<root level="debug">17.<appender-ref ref="STDOUT"/>18.</root>19.</configuration>5.configuration.properties配置[html]view plaincopyprint?1.jdbc.url=jdbc\:mysql\://localhost\:3306/druid?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNullername=root3.jdbc.password=1234566.测试搭建是否成功,后台代码首先是登录,用了加密,可以去掉[java]view plaincopyprint?1.package com.alibaba.controller;2.3.4.import javax.annotation.Resource;5.import javax.servlet.http.HttpServletRequest;6.7.import mons.codec.digest.DigestUtils;8.import org.slf4j.Logger;9.import org.slf4j.LoggerFactory;10.import org.springframework.stereotype.Controller;11.import org.springframework.web.bind.annotation.RequestMapping;12.import org.springframework.web.bind.annotation.RequestMethod;13.import org.springframework.web.bind.annotation.RequestParam;14.15.import er;16.import erService;17.import com.alibaba.util.RequestUtil;18.19./**20. * @author tfj21. * 2014-7-2622. */23.@Controller24.public class SystemController {25.private final Logger log = LoggerFactory.getLogger(SystemController.class);26.@Resource27.private UserService userService;28.29.@RequestMapping(value = "/",method = RequestMethod.GET)30.public String home() {31. ("返回首页!");32.return"index";33. }34.35.@RequestMapping(value = "/test/hello",method = RequestMethod.GET)36.public String testHello() {37. ("执行了testHello方法!");38.return"testHello";39. }40.41.@RequestMapping(value = "/login",method = RequestMethod.POST)42.public String testLogin(HttpServletRequest request,@RequestParam Stringusername, @RequestParam String password) {43. ("执行了testLogin方法!");44. User user = userService.findUserByName(username);45.if(user!=null){46.if(user.getPassword().equals(DigestUtils.md5Hex(password))){47. request.getSession().setAttribute("userId", user.getId());48. request.getSession().setAttribute("user", username);49.return"redirect:" + RequestUtil.retrieveSavedRequest();//跳转至访问页面50. }else{51. ("密码错误");52. request.getSession().setAttribute("message", "用户名密码错误,请重新登录");53.return"login";54. }55. }else{56. ("用户名不存在");57. request.getSession().setAttribute("message", "用户名不存在,请重新登录");58.return"login";59. }60. }61.}关于service和model就不写了,写一下mybatis的mapper类映射[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<!DOCTYPE mapper PUBLIC "-////DTD Mapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">3.<mapper namespace="erMapper">4.<select id="findUserByName"resultType="er">5. select id, username , password from sysuser where username = #{username}6.</select>7.</mapper>。
MyBaits_SpringMVC_JSP 开发框架

MyBaits SpringMVC JSP开发框架SpringMVC JSP开发框架1、基本概念1.1 、SpringSpring 是一个开源框架,Spring 是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。
Spring 使用基本的JavaBean 来完成以前只可能由EJB 完成的事情。
然而,Spring 的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java 应用都可以从Spring 中受益。
简单来说,Spring 是一个轻量级的控制反转(IoC )和面向切面(AOP )的容器框架。
1.2 、SpringMVCSpring MVC 属于SpringFrameWork 的后续产品,已经融合在Spring Web Flow 里面。
Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
1.3 、MyBatisMyBatis 本是apache 的一个开源项目iBatis, 2010 年这个项目由apache software foundation 迁移到了google code ,并且改名为MyBatis 。
MyBatis 是一个基于Java 的持久层框架。
iBATIS 提供的持久层框架包括SQL Maps 和Data Access Objects (DAO)MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的XML 或注解用于配置和原始映射,将接口和Java 的POJOs (Plain Old Java Objects ,普通的Java 对象)映射成数据库中的记录。
SpringMVC+Spring+Mybatis框架配置详细步骤(eclipse普通版)

SSI框架搭建SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6编号:SSI-SMVC3-S3-I3版本:V1.0级别:公开编写时间:2016-02-17目录1 导言 (1)1.1 目的 (1)1.2 范围 (1)1.3 说明 (1)2 搭建SpringMVC (2)2.1 搭建所需jar包 (2)2.2 其他依赖包 (3)2.3 搭建步骤 (4)2.3.1 创建项目 (4)2.3.2 导入jar包 (6)2.3.3 配置web.xml (7)2.3.4 配置spring-servlet.xml (9)2.3.5 配置applicationContext.xml (10)2.3.6 配置log4j.properties (10)3 整合mybatis (11)3.1 整合所需jar包 (11)3.2 其他依赖包 (11)3.3 整合步骤 (11)3.3.1 导入jar包 (11)3.3.2 配置config.properties (12)3.3.3 配置spring-dataSource.xml (12)3.3.4 配置applicationContext.xml (15)3.3.5 配置mybatis-config.xml (16)3.3.6 创建实体model (17)3.3.7 创建实例化dao (19)3.3.8 创建业务服务service (21)3.3.9 创建控制层controller (23)3.3.10 页面代码 (28)3.3.11 启动项目 (37)1导言1.1 目的本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。
1.2 范围本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。
Spring SpringMVC企业快速开发架构搭建解析

Spring+SpringMVC企业快速开发架构搭建创建项目从2014年12月开始,一直在研究Spring的框架;并且在我们新的开发框架中得到应用;这篇文章记录了这段时间的成长记录,仅此先给共同成长的小白。
为了简单,我们选择使用maven来构建项目,通过maven可以控制引入jar的版本,大大简化了jar包的管理工作,废话不多说,创建一个项目一、创建一个新项目1、创建maven项目2、选择 maven-archetype-webapp3、填写groupId、artifactId、package项目目录:二、项目创建完成后修改默认的jdk、编译器等默认属性,我的项目选择的是jdk73、引入Spring的jarXml代码<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.2.12.RELEASE</spring.version><tddl.version>3.0.1.5.taobaocode-SNAPSHOT</tddl.version><druid.version>0.2.3</druid.version><cglib.version>2.1_3</cglib.version><aspectj.version>1.6.6</aspectj.version><jms.version>2.0</jms.version><jackson.version>1.9.5</jackson.version><poi.version>3.10.1</poi.version><mail.version>1.4.3</mail.version><atomikos.version>3.9.3</atomikos.version><mysql.version>5.1.34</mysql.version><redis.version>2.1.0</redis.version><jta.version>1.1</jta.version><activemq.version>5.10.0</activemq.version><servlet-api.version>5.5.23</servlet-api.version><fileupload.version>1.3.1</fileupload.version><fastjson.version>1.1.15</fastjson.version><json-lib.version>2.4</json-lib.version><jaxb-api.version>2.2.11</jaxb-api.version><jaxb-impl.version>2.1</jaxb-impl.version><woodstox.version>4.1.5</woodstox.version><activation.version>1.1.1</activation.version> <testng.version>6.8.13</testng.version><mockito.version>1.10.18</mockito.version> <unitils.version>3.4.2</unitils.version><java.version>1.7</java.version><jodd.version>3.3.8</jodd.version><jstl.version>1.2</jstl.version><file.encoding>utf-8</file.encoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- JSTL --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId> <artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId> <version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.version}</version></dependency><dependency><groupId>javax.jms</groupId><artifactId>javax.jms-api</artifactId><version>${jms.version}</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mailapi</artifactId><version>${mail.version}</version></dependency><!-- json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>${json-lib.version}</version><classifier>jdk15</classifier></dependency><!-- MQ--><dependency><groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId><version>${activemq.version}</version></dependency><dependency><groupId>tomcat</groupId><artifactId>servlet-api</artifactId><version>${servlet-api.version}</version> </dependency><!-- 分布式事务处理 --><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jta</artifactId> <version>${atomikos.version}</version> <optional>true</optional></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jdbc</artifactId> <version>${atomikos.version}</version> <optional>true</optional></dependency><dependency><groupId>javax.transaction</groupId><artifactId>jta</artifactId><version>${jta.version}</version> <optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId> <artifactId>druid</artifactId><version>1.0.9</version><optional>true</optional></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId> <artifactId>poi</artifactId><version>${poi.version}</version> </dependency><dependency><groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi.version}</version> </dependency><!-- jackson --><dependency><groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>${jackson.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId> <version>${cglib.version}</version> </dependency><dependency><groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${fileupload.version}</version></dependency><dependency><groupId>org.jodd</groupId><artifactId>jodd</artifactId><version>${jodd.version}</version></dependency></dependencies>四、创建Spring的配置文件1、启动Spring需要在web.xml中配置监听,使用SpringMVC需要配置Spring的servlet Web.xml代码<?xml version="1.0" encoding="UTF-8"?><web-app><display-name>Archetype Created Web Application</display-name><error-page><exception-type>ng.Throwable</exception-type><location>/500.jsp</location></error-page><error-page><error-code>500</error-code><location>/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/404.jsp</location></error-page><!-- 装载spring 父上下文 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener><!-- 支持MVC 装载子上下文 --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><description>Spring MVC Configuration Location</description><param-name>contextConfigLocation</param-name><param-value>classpath:spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><filter><filter-name>encode</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>ssojcFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>2、Spring上下文配置文件ApplicationContext.xml用于配置Spring的通用配置Applicationcontext.xml代码<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="http://www.sprin /schema/p"xmlns:aop="/schema/aop" xmlns:tx="http://www.sprin /schema/tx"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/tx/schema/tx/spring-tx.xsd "><context:property-placeholder location="classpath:*.properties" /><!--dataSource--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="i nit" destroy-method="close"><!-- 基本属性 url、user、password --><property name="url" value="${jdbc.url}" /><property name="username" value="${erName}" /><property name="password" value="${jdbc.passWord}" /><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${jdbc.initialSize}" /><property name="minIdle" value="${jdbc.minIdle}" /><property name="maxIdle" value="maxIdle" /><property name="maxActive" value="${jdbc.maxActive}" /><!-- 配置获取连接等待超时的时间 --><property name="maxWait" value="60000" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionR unsMillis}" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis} " /><property name="validationQuery" value="${jdbc.validationQuery}" /><property name="testWhileIdle" value="${jdbc.testWhileIdle}" /><property name="testOnBorrow" value="${jdbc.testOnBorrow}" /><property name="testOnReturn" value="${jdbc.testOnReturn}" /><property name="filters" value="${jdbc.filters}" /></bean><!--daoSupport--><bean id="jldaoSupport" class=".framework.dao.support.JLDeDaoSupport"><property name="dataSource" ref="dataSource"/></bean><bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSo urceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 声明式事务配置 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="begin*" propagation="REQUIRED" rollback-for="Throwable, Exce ption, RuntimeException"/><tx:method name="end*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable, Exc eption, RuntimeException"/><tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable, Excepti on, RuntimeException"/><tx:method name="do*" propagation="REQUIRED" rollback-for="Throwable, Exceptio n, RuntimeException"/><tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable, Except ion, RuntimeException"/><tx:method name="modify*" propagation="REQUIRED" rollback-for="Throwable, Exc eption, RuntimeException"/><tx:method name="query*" propagation="NOT_SUPPORTED"/><tx:method name="get*" propagation="NOT_SUPPORTED"/><tx:method name="load*" propagation="NOT_SUPPORTED"/><tx:method name="find*" propagation="NOT_SUPPORTED"/><tx:method name="*" read-only="true" propagation="SUPPORTS" /></tx:attributes></tx:advice><!-- 内部服务 --><aop:config><aop:pointcut expression="execution(* ..service.*.*(..))" id="pointCut" /><aop:advisor pointcut-ref="pointCut" advice-ref="txAdvice"/></aop:config><!-- 对外服务 --><aop:config><aop:pointcut expression="execution(* ..service.soa.*.*(..))" id="pointCut_s oa" /><aop:advisor pointcut-ref="pointCut_soa" advice-ref="txAdvice"/></aop:config><!-- JMS --><aop:config><aop:pointcut expression="execution(* ..service.jms.receiver.*.*(..))" id="po intCut_jms" /><aop:advisor pointcut-ref="pointCut_jms" advice-ref="txAdvice"/></aop:config><!-- 定义过滤器 --><bean id="encode" class=".framework.web.filter.JLEncoderFilter"><property name="encode" value="UTF-8" /></bean></beans>3、SpringMVC配置Springmmc.xml代码<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="http://www.sprin /schema/p"xmlns:mvc="/schema/mvc" xmlns:context="http://ww /schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd/schema/mvc/schema/mvc/spring-mvc.xsd"><context:component-scan base-package=".*.web.controller"/><!-- mvc --><context:annotation-config /><!-- 使用ConfigurableWebBindingInitializer注册conversionService --><bean id="conversionService" class=".framework.converter.suport.JLConversi onService" init-method="init"><property name="converters"><set><bean class=".framework.converter.JLStringToTimestampConverter "><property name="formarts"><props><prop key="^\\d{4}-\\d{1,2}$">yyyy-MM</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2}$">yyyy-MM-dd</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$">yyyy-MM-d d hh-mm</prop><prop key="^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$">yy yy-MM-dd hh-mm-ss</prop></props></property></bean></set></property></bean><bean id="webBindingInitializer" class="org.springframework.web.bind.support.Confi gurableWebBindingInitializer"><property name="conversionService" ref="conversionService"/></bean><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappin gHandlerAdapter"><property name="webBindingInitializer" ref="webBindingInitializer"/></bean><!-- 根据后缀支持多视图处理器 --><!-- 根据客户端的不同的请求决定不同的view进行响应, 如/blog/1.json /blog/1.xml --><bean id="viewResolver" class="org.springframework.web.servlet.view.ContentNegotiat ingViewResolver"><!-- 设置为true以忽略对Accept Header的支持 --><property name="ignoreAcceptHeader" value="true" /><!-- 在没有扩展名时即: "/blog/1" 时的默认展现形式 --><property name="defaultContentType" value="application/json" /><!-- 扩展名至mimeType的映射,即 /blog.json => application/json --> <property name="mediaTypes"><map><entry key="html" value="text/html" /><entry key="jsp" value="text/html" /><entry key="pdf" value="application/pdf" /><entry key="xsl" value="application/vnd.ms-excel" /><entry key="xslx" value="application/vnd.ms-excel" /><entry key="xml" value="application/xml" /><entry key="json" value="application/json" /></map></property><!-- 用于开启 /blog/123?format=json 的支持 --><property name="favorParameter" value="true" /><!-- 视图解析器 --><property name="viewResolvers"><list><!-- jsp解析 --><ref bean="jspRseolver"/><ref bean="beanRseolver"/></property><property name="defaultViews"><list><!-- for application/json --><bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></list></property></bean><!-- 声明视图解析的对象 --><bean id="beanRseolver" class="org.springframework.web.servlet.view.BeanNameView Resolver" /><bean id="multipartRseolver" class=" monsMultipartResolver"><property name="maxUploadSize" value="5000000" /></bean><bean id="jspRseolver" class="org.springframework.web.servlet.view.InternalResource ViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp"></property><!-- 转向异常处理页面 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolve r"><!-- 定义默认的异常处理页面,当该异常类型的注册时使用 --><property name="defaultErrorView" value="error/error" /><!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception --><property name="exceptionAttribute" value="ex" /><!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 --><property name="exceptionMappings"><props><!-- 这里还可以继续扩展对不同异常类型的处理 --><prop key=".framework.exception.ValidateException">/error/error </prop><prop key=".framework.exception.SessionException">/error/login< /prop></props></property></bean><!-- 输出对象转String支持 --><bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessa geConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value></list></property></bean><!-- 输出对象转JSON支持 --><bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJack sonHttpMessageConverter" /><bean id="byteArrayConverter" class="org.springframework.http.converter.ByteArrayHt tpMessageConverter" /><bean id="resourceConverter" class="org.springframework.http.converter.ResourceHttp MessageConverter" /><bean id="sourceConverter" class="org.springframework.http.converter.xml.SourceHttp MessageConverter" /><bean id="xmlAwareFormConverter" class="org.springframework.http.converter.xml.X mlAwareFormHttpMessageConverter" /><bean id="jaxb2RootElementConverter" class="org.springframework.http.converter.xml. Jaxb2RootElementHttpMessageConverter" /><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandl erAdapter"><property name="messageConverters"><list><ref bean="stringConverter" /><ref bean="jsonConverter" /><ref bean="byteArrayConverter" /><ref bean="resourceConverter" /><ref bean="sourceConverter" /><ref bean="xmlAwareFormConverter" /><ref bean="jaxb2RootElementConverter" /></list></property></bean><!-- URL映射管理器 --><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandl erMapping"><property name="order" value="0"/><property name="useDefaultSuffixPattern" value="true"/><!-- 拦截器 --><property name="interceptors"><list><!--会话管理的拦截器 --><ref bean="userInfoInterceptor"/></list></property></bean><bean id="userInfoInterceptor" class="erInfoI nterceptor" /><!--<mvc:interceptors><mvc:interceptor><mvc:mapping path="/*"/><ref bean="securityInterceptor"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/*"/><ref bean="userInfoInterceptor"/></mvc:interceptor></mvc:interceptors>--></beans>完成以上操作一个完整的SpringMVC项目就创建完成了!更多详情见请继续阅读下一页的精彩内容:/Linux/2015-0 9/122942p2.htm--------------------------------------分割线 --------------------------------------。
JavaWeb_(Spring框架)注解配置

this.u_username = u_username; } public String getU_password() {
return u_password; } public void setU_password(String u_password) {
this.u_password = u_password; }
} public Pet getU_pet() {
return u_pet; } public void setU_pet(Pet u_pet) {
this.u_pet = u_pet; }
public User2() { System.out.println("默认使用 User2 对象空参构造方法");
User2 u1 = (User2) ac.getBean("user"); User2 u2 = (User2) ac.getBean("user"); //@Scope(scopeName="prototype")多例的
System.out.println(u1==u2);
}
}
Test_Annotation.java
this.u_username = u_username; } public String getU_password() {
spring+spring mvc+mybits框架整合

主要介绍三大框架的整合,至于环境的搭建以及项目的创建可以参考其他资料。
这次整合主要用到两个配置文件:spring-mybatis.xm,包含spring和mybatis的配置文件,还有个是spring-mvc.xml的配置文件,此外有两个资源文件:jdbc.propertis和log4j.properties。
完整的目录结构如下图:本框架中用到的所有jar包都在源码中。
本测试项目中用到的是sqlserver数据库,MyEclipse 8.6和apache-tomcat-7.0.41下来逐一介绍配置文件:1、spring-mybatis.xml这个文件就是用来完成spring和mybatis的整合的。
这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库,注释也很详细<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.myProcess.study"/><!-- 引入配置文件 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"value="classpath:jdbc.properties"/> </bean><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="${driver}"/><property name="url"value="${url}"/><property name="username"value="${username}"/><property name="password"value="${password}"/><!-- 初始化连接大小 --><property name="initialSize"value="${initialSize}"></property><!-- 连接池最大数量 --><property name="maxActive"value="${maxActive}"></property><!-- 连接池最大空闲 --><property name="maxIdle"value="${maxIdle}"></property><!-- 连接池最小空闲 --><property name="minIdle"value="${minIdle}"></property><!-- 获取连接最大等待时间 --><property name="maxWait"value="${maxWait}"></property></bean><!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource"ref="dataSource"/><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations"value="classpath:com/myProcess/study/mapping/*.xml"></property></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage"value=".hnust.dao"/><property name="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"ref="dataSource"/></bean></beans>2、log4j.propertieslog4j.rootLogger=INFO,Console,File#定义日志输出目的地为控制台log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Target=System.out#可以灵活地指定日志输出格式,下面一行是指定具体的格式yout = org.apache.log4j.PatternLayoutyout.ConversionPattern=[%c]-%m%n#文件大小到达指定尺寸的时候产生一个新的文件log4j.appender.File = org.apache.log4j.RollingFileAppender#指定输出目录log4j.appender.File.File = logs/ssm.log#定义文件最大大小log4j.appender.File.MaxFileSize = 10MB# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志log4j.appender.File.Threshold = ALLyout = org.apache.log4j.PatternLayoutyout.ConversionPattern =[%p][%d{yyyy-MM-ddHH\:mm\:ss}][%c]%m%n3、spring-mvc.xml主要是自动扫描控制器,视图模式,注解的启动这三个<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc/schema/mvc/spring-mvc-4.0.xsd"><!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --><context:component-scan base-package="com.myProcess.study.web"/><!--避免IE执行AJAX时,返回JSON出现下载文件 --><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJacksonHttpMessageConvert er"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean><!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAd apter"><property name="messageConverters"><list><ref bean="mappingJacksonHttpMessageConverter"/><!-- JSON转换器 --></list></property></bean><!-- 定义跳转的文件的前后缀,视图模式配置--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址 --><property name="prefix"value="/WEB-INF/jsp/"/><property name="suffix"value=".jsp"/></bean><!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --><bean id="multipartResolver"class="monsMultipartResolver"> <!-- 默认编码 --><property name="defaultEncoding"value="utf-8"/><!-- 文件大小最大值 --><property name="maxUploadSize"value="10485760000"/><!-- 内存中的最大值 --><property name="maxInMemorySize"value="40960"/></bean></beans>4、web.xml这里面对spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。
Spring+SpringMVC+Mybatis(SSM)Demo(入门详细步骤)

Spring+SpringMVC+Mybatis(SSM)Demo(⼊门详细步骤) 菜鸟⼀枚,刚刚接触Spring不久,前段时间按照⽹上的demo写了下SSM,发现好多都不懂,好不容易程序能运⾏,也能出应有的结果,但想再次安全靠⾃⼰写⼀遍,各个步骤完全记不住,因此发⼀随笔做好记录,⽅便后续查看。
该随笔按我⾃⼰的步骤⼀⼀记录下来,内容包括SpringMVC的配置,以及mybatis generator⾃动⽣成xml配置、entity、dao层等信息。
本⼯程的编辑器⽤的是IDEA,数据库⽤的MySQL。
⼀、新建⼯程1、运⾏IDEA,选择创建⼀个新⼯程,选择maven,创建对应的java web项⽬。
2、填写GroupId和ArtifactId3、配置本地maven仓库(我这⾥已经配置过了,所以显⽰如下)更改maven的本地仓库——更改C:\Users\⽤户名\.m2\setting.xml⽂件(如果没有该⽂件,可以去“idea安装⽬录\plugins\maven\lib\maven3\conf”下复制过来,该⽬录是在安装idea时选择安装maven插件时⾃动⽣成的)中添加<localRepository>本地仓库地址</localRepository>4、填写⼯程名完成⼯程的创建。
5、为了去除spring等框架版本和jdk版本不兼容问题,在settings⾥修改⼯程的jdk版本。
6、更改项⽬结构(图中的xml⽂件都是后续创建的,可以不管)- java 主Java代码⽂件夹 - controller 控制器⽂件⽂件夹 - dao 数据访问层⽂件夹 - service 业务逻辑层⽂件夹 - entity 实体层⽂件夹- resources 资源⽂件夹(要将此定义为Sources Root,不然classpath不会指向该⽬录,卡了本菜鸟好久=_=。
右键选择Mark directory as-->Sources Root-->显⽰) - mapper mybatis sql⽂件夹- webapp web页⾯⽂件夹 -WEB-INF web应⽤的安全⽬录- test 测试⽂件夹⼆、Maven包的初始化1、修改pom.xml配置⽂件相关jar包的⾃动导⼊参考配置如下:1<?xml version="1.0" encoding="UTF-8"?>23<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">5<modelVersion>4.0.0</modelVersion>67<groupId>com.mycompany.app</groupId>8<artifactId>Demo</artifactId>9<version>1.0-SNAPSHOT</version>10<packaging>war</packaging>1112<name>Demo Maven Webapp</name>13<!-- FIXME change it to the project's website -->14<url></url>1516<dependencies>17<dependency>18<groupId>junit</groupId>19<artifactId>junit</artifactId>20<version>4.12</version>21<scope>test</scope>22</dependency>23<dependency>24<groupId>org.springframework</groupId>25<artifactId>spring-core</artifactId>26<version>4.3.5.RELEASE</version>27</dependency>28<dependency>29<groupId>org.springframework</groupId>30<artifactId>spring-aop</artifactId>31<version>4.3.5.RELEASE</version>32</dependency>33<dependency>34<groupId>org.springframework</groupId>35<artifactId>spring-orm</artifactId>36<version>4.3.5.RELEASE</version>37</dependency>38<dependency>39<groupId>org.springframework</groupId>40<artifactId>spring-tx</artifactId>41<version>4.3.5.RELEASE</version>42</dependency>43<dependency>44<groupId>org.springframework</groupId>45<artifactId>spring-test</artifactId>46<version>4.3.5.RELEASE</version>47</dependency>48<dependency>49<groupId>org.springframework</groupId>50<artifactId>spring-mock</artifactId>51<version>2.0.8</version>52</dependency>53<dependency>54<groupId>org.springframework</groupId>55<artifactId>spring-jdbc</artifactId>56<version>4.3.5.RELEASE</version>57</dependency>58<dependency>59<groupId>org.springframework</groupId>60<artifactId>spring-context</artifactId>61<version>4.3.5.RELEASE</version>62</dependency>63<dependency>64<groupId>org.springframework</groupId>65<artifactId>spring-context-support</artifactId>66<version>4.3.5.RELEASE</version>67</dependency>68<dependency>69<groupId>org.springframework</groupId>70<artifactId>spring-expression</artifactId>71<version>4.3.5.RELEASE</version>72</dependency>73<!--Spring Web + Spring MVC-->74<dependency>75<groupId>org.springframework</groupId>76<artifactId>spring-web</artifactId>77<version>4.3.1.RELEASE</version>78</dependency>79<dependency>80<groupId>org.springframework</groupId>81<artifactId>spring-webmvc</artifactId>82<version>4.3.1.RELEASE</version>83</dependency>84<dependency>85<groupId>com.github.pagehelper</groupId>86<artifactId>pagehelper</artifactId>87<version>3.7.3</version>88</dependency>89<dependency>90<groupId>com.github.jsqlparser</groupId>91<artifactId>jsqlparser</artifactId>92<version>0.9.1</version>93</dependency>94<!--mysql jdbc-->95<dependency>96<groupId>mysql</groupId>97<artifactId>mysql-connector-java</artifactId>98<version>5.1.38</version>99</dependency>100<!--c3p0-->101<dependency>102<groupId>c3p0</groupId>103<artifactId>c3p0</artifactId>104<version>0.9.1.2</version>105</dependency>106<!--NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config--> 107<!-- https:///artifact/jstl/jstl -->108<dependency>109<groupId>jstl</groupId>110<artifactId>jstl</artifactId>111<version>1.2</version>113<!--file upload jar package-->114<!-- https:///artifact/commons-fileupload/commons-fileupload -->115<dependency>116<groupId>commons-fileupload</groupId>117<artifactId>commons-fileupload</artifactId>118<version>1.3.1</version>119</dependency>120<!-- https:///artifact/commons-io/commons-io -->121<dependency>122<groupId>commons-io</groupId>123<artifactId>commons-io</artifactId>124<version>2.4</version>125</dependency>126<!-- https:///artifact/commons-lang/commons-lang -->127<dependency>128<groupId>commons-lang</groupId>129<artifactId>commons-lang</artifactId>130<version>2.6</version>131</dependency>132<!-- https:///artifact/commons-beanutils/commons-beanutils -->133<dependency>134<groupId>commons-beanutils</groupId>135<artifactId>commons-beanutils</artifactId>136<version>1.8.3</version>137</dependency>138<!-- https:///artifact/commons-collections/commons-collections -->139<dependency>140<groupId>commons-collections</groupId>141<artifactId>commons-collections</artifactId>142<version>3.2.1</version>143</dependency>144<!-- https:///artifact/commons-logging/commons-logging -->145<dependency>146<groupId>commons-logging</groupId>147<artifactId>commons-logging</artifactId>148<version>1.2</version>149</dependency>150<!-- https:///artifact/net.sf.ezmorph/ezmorph -->151<dependency>152<groupId>net.sf.ezmorph</groupId>153<artifactId>ezmorph</artifactId>154<version>1.0.6</version>155</dependency>156<!--json serialize and deserialization-->157<!-- 引⼊fastjson依赖 -->158<dependency>159<groupId>com.alibaba</groupId>160<artifactId>fastjson</artifactId>161<version>1.2.12</version>162</dependency>163<!-- 引⼊gson依赖 -->164<dependency>165<groupId>com.google.code.gson</groupId>166<artifactId>gson</artifactId>167<version>2.6.2</version>168</dependency>169<!--Base64 加解密-->170<!-- https:///artifact/net.iharder/base64 -->171<dependency>172<groupId>net.iharder</groupId>173<artifactId>base64</artifactId>174<version>2.3.8</version>175</dependency>176<!-- https:///artifact/commons-codec/commons-codec -->177<dependency>178<groupId>commons-codec</groupId>179<artifactId>commons-codec</artifactId>180<version>1.10</version>181</dependency>182<!--log4j-->183<!-- https:///artifact/org.apache.logging.log4j/log4j-core -->184<dependency>185<groupId>org.apache.logging.log4j</groupId>186<artifactId>log4j-core</artifactId>187<version>2.6.2</version>188</dependency>189<dependency>190<groupId>org.jetbrains</groupId>191<artifactId>annotations-java5</artifactId>192<version>RELEASE</version>193</dependency>194<!--mybatis 应⽤mybatis需要导⼊mybatis,将mybatis和spring整合在⼀起需要导⼊mybatis-spring--> 195<dependency>196<groupId>org.mybatis</groupId>197<artifactId>mybatis</artifactId>198<version>3.3.0</version>199</dependency>200<dependency>201<groupId>org.mybatis</groupId>202<artifactId>mybatis-spring</artifactId>203<version>1.2.3</version>204</dependency>205<dependency>206<groupId>org.mybatis.generator</groupId>207<artifactId>mybatis-generator-core</artifactId>208<version>1.3.2</version>209</dependency>211212<build>213<finalName>Demo</finalName>214<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->215<plugins>216<plugin>217<artifactId>maven-clean-plugin</artifactId>218<version>3.0.0</version>219</plugin>220<!-- see /ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->221<plugin>222<artifactId>maven-resources-plugin</artifactId>223<version>3.0.2</version>224</plugin>225<plugin>226<artifactId>maven-compiler-plugin</artifactId>227<version>3.7.0</version>228</plugin>229<plugin>230<artifactId>maven-surefire-plugin</artifactId>231<version>2.20.1</version>232</plugin>233<plugin>234<artifactId>maven-war-plugin</artifactId>235<version>3.2.0</version>236</plugin>237<plugin>238<artifactId>maven-install-plugin</artifactId>239<version>2.5.2</version>240</plugin>241<plugin>242<artifactId>maven-deploy-plugin</artifactId>243<version>2.8.2</version>244</plugin>245</plugins>246</pluginManagement>247</build>248</project>View Code三、SpringMVC的配置1、(⼀般在resource⽂件夹或者WEB-INF⽂件夹)新建spring-servlet.xml⽂件(⽂件名称⼀般为“xxx-servlet.xml”),声明SpringMVC框架对控制器、页⾯、资源的访问。
javaweb后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

javaweb后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化⼀、ssm框架搭建1.1创建项⽬新建项⽬后规划好各层的包。
1.2导⼊包1.3整合spring与mybatis调整spring与mybatis配置⽂件1.4创建、编写配置⽂件:myBatis-config.xml⽂件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 通过别名简化对类的使⽤<typeAliases><typeAlias type="cn.itcast.entity.Dept" alias="Dept" /></typeAliases><mappers><mapper resource="cn/itcast/entity/DeptMapper.xml" /></mappers>--></configuration>applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xmlns:context="/schema/context"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.2.xsd/schema/context/schema/context/spring-context-3.2.xsd/schema/tx/schema/tx/spring-tx-3.2.xsd/schema/aop /schema/aop/spring-aop-3.2.xsd"><!-- 配置数据源,记得去掉myBatis-config.xml的数据源相关配置 --><bean id="dataSource" class="boPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8"/> <property name="user" value="root"/><property name="password" value="root"/></bean><!-- 配置session⼯⼚ --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:myBatis-config.xml"/></bean><!-- 配置事务管理器,管理数据源事务处理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 配置事务通知 --><tx:advice id="advice" transaction-manager="transactionManager"><tx:attributes><!-- 默认只处理运⾏时异常,可加rollback-for="Exception/Throwable"等处理所有异常或包括错误 --><tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/><tx:method name="*" propagation="SUPPORTS"/></tx:attributes><!-- 配置切⾯织⼊的范围,后边要把事务边界定在service层 --><aop:config><aop:advisor advice-ref="advice" pointcut="execution(* cn.itcast.scm.dao.impl.*.*(..))"/> </aop:config><!-- 配置SessionTemplate,已封装了繁琐的数据操作--><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><context:component-scan base-package="*"/></beans>1.5编写实体及sql映射⽂件如没有建库表,先建库表,可参考如下sql:drop database if exists mybatis;create database mybatis CHARACTER SET UTF8;use mybatis;create table dept(dept_id int primary key auto_increment,dept_name varchar(50),dept_address varchar(50));insert into dept(dept_name,dept_address) values('研发部⼀部','⼴州');insert into dept(dept_name,dept_address) values('研发部⼆部','⼴州');insert into dept(dept_name,dept_address) values('研发部三部','深圳');select*from dept;编写实体类public class Dept implements Serializable {private Integer deptId;private String deptName;private String deptAddress;public Integer getDeptId() {}public void setDeptId(Integer deptId) {this.deptId = deptId;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}public String getDeptAddress() {return deptAddress;}public void setDeptAddress(String deptAddress) {this.deptAddress = deptAddress;}@Overridepublic String toString() {return "Dept [deptId=" + deptId + ", deptName=" + deptName+ ", deptAddress=" + deptAddress + "]";}}sql映射⽂件,并将相关信息映射到mybatis-config.xml⽂件。
springweb3.0MVC注解(附实例)

SPRING WEB MVC 注解实例说明0.提示1) Spring发行版本附带了PetClinic 示例,它是一个在简单的表单处理的上下文中,利用了本节中说明的注解支持的Web应用程序。
可以在“samples/petclinic ”目录中找到PetClinic 应用程序。
2) 另外一个建立在基于注解的Web MVC上的示例应用程序,请见imagedb 。
这个示例集中在无状态的multi-action控制器,包括多段文件上传的处理。
可以在“samples/imagedb ”目录找到imagedb 应用程序。
1.建立dispatcher实现注解支持只有对应的HandlerMapping(为了实现类型级别的注解)和/ 或HandlerAdapter(为了实现方法级别的注解)出现在 dispatcher中时, @RequestMapping 才会被处理。
这在DispatcherServlet 和DispatcherPortlet 中都是缺省的行为。
然而,如果是在定义自己的HandlerMappings或HandlerAdapters,就需要确保一个对应的自定义的DefaultAnnotation HandlerMapping和 /或AnnotationMethod HandlerAdapter同样被定义——假设想要使用@RequestMapping 。
例1:雁联zfpt-servlet.xml配置DefaultAnnotationHandlerMapping 和 /或AnnotationMethodHandlerAdapter例2:web.xml2.1 webAppRootKey2.3 log4jConfigLocation2.4 contextConfigLocation2.5 springSecurityFilterChain2.6 Log4jConfigListener2.7 ContextLoaderListener2.8 DispatcherServlet2.9 exception.java例3:雁联web.xml如果你想要自定义映射策略,显式的定义一个DefaultAnnotationHandlerMapping和 /或AnnotationMethodHandlerAdapter也有实际意义。
SSM框架——详细整合教程

SSM框架——详细整合教程SSM(Spring + SpringMVC + MyBatis)是Java Web开发中常用的框架组合,通过整合这三个框架,可以使得开发更加高效、灵活、易于维护。
下面将详细介绍SSM框架的整合步骤。
1.准备工作在开始整合之前,首先需要准备好相关的环境和工具。
确保已经安装了JDK、Tomcat和Maven等工具,并且熟悉基本的Java开发和Web开发知识。
2.创建Maven项目使用Maven创建一个空白的项目作为基础项目。
在项目的pom.xml文件中添加Spring、SpringMVC和MyBatis等相关的依赖。
3.配置Spring在Spring的配置文件中,通过注解或XML的方式进行相关配置。
配置文件主要包含以下内容:-配置数据源,用于连接数据库。
-配置事务管理器,用于管理数据库事务。
- 配置Spring的扫描包,将相关的类自动注入到Spring容器中。
- 配置Spring的AOP(面向切面编程)功能,用于处理事务、日志等公共逻辑。
4.配置SpringMVC在SpringMVC的配置文件中,主要进行以下配置:-配置视图解析器,用于解析并返回视图。
-配置静态资源的处理器,用于处理静态资源文件(如CSS、JS等)。
-配置控制器映射,将请求与相应的控制器方法进行映射。
5.配置MyBatis在MyBatis的配置文件中,主要进行以下配置:- 配置数据源,与Spring的数据源配置保持一致。
- 配置MyBatis的映射文件,将Java对象与数据库表进行映射。
- 配置MyBatis的扫描包,将相关的Mapper接口自动注入到Spring容器中。
6.编写实体类和持久层代码在Java代码中,编写实体类和持久层(DAO)的代码。
实体类用于表示数据库的表结构,持久层代码用于进行数据库的操作。
7.编写服务层和控制器代码在Java代码中,编写服务层(Service)和控制器层(Controller)的代码。
spring学习7:纯注解整合mybatis和事务控制

spring学习7:纯注解整合mybatis和事务控制⽬录spring学习7: 纯注解整合mybatis和事务控制本⽂记录下如何利⽤纯注解的⽅式整合spring和mybatis⼀、引⼊依赖需要引⼊的依赖包括spring、mybatis、mybatis-spring、数据库驱动、连接池<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.5.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency><!--连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.11</version></dependency>⼆、整合过程2.1 整合原理本⽂中sql语句是写在xml⽂件中的mybatis-spring提供了⼀个SqlSessionFactoryBean类,创建该类的对象添加到容器中,然后再⽤MapperScan注解指定要扫描的dao层接⼝的包路径。
手工搭建注解方式的spring3+struts2.2+hibernate3.6+maven2

手工搭建注解方式的spring3+struts2.2+hibernate3.6+maven2这段时光不是很忙,头给我说了个事儿:让我把公司的网站给整整,想起来公司好多技术都该换新版本了,这正巧是个机会,于是就搭了一套最新的开发框架。
IDE:myeclipse8.6 JAR包管理:maven2 spring 版本:3.0.6.RELEASE (maven中心库目前不支持3.1.0) suts版本:2.2.3 hibernate版本:3.6.8 1.在myeclipse中新建一个maven工程: 1.1 File-- New-- Other-- MyEclipse-- Maven-- Java Maven Project 1.2 输入工程名、groupId、artifactId以及版本号 1.3 在新建的工程中点右键-- Myeclipse-- A Web Project Capabilities 关于这种建工程的方式,有以下几点需要解释: 1》我不知道在myeclipse如何挺直建maven web工程,用maven自带的那个web工程插件建筑不了,所以就这么建了,知道怎么挺直建的跟我说声,不过这样建有一个益处,就是可以部署到toat里面运行。
2》不想用maven 的我在下面贴出来jar包列表,你们可以自己下载。
2.pom文件project xms=\"/POM/4.0.0\"xmlns:xsi=\"/2001/XMLSchema-instae\"xsi:schemaLoion=\"/POM/4.0.0/xsd/maven-4.0.0.xsd\" modelVersion 4.0.0 /modelVersion groupId baseFrameForMaven /groupId artifactId baseFrameForMaven /artifactId version1.0.0-SNAPSHOT /version packaging war /packaging name baseFrameForMaven /name url /url properties project.build.sourceEncoding UTF-8/project.build.sourceEncoding /propertiesdependencies !-- J2EE容器所需包 -- dependency groupId junit /groupId artifactId junit /artifactId version 3.8.1 /version scope test /scope /dependency dependency第1页共4页。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MyBaits Spring MVC JSP零基础搭建Web开发框架(注解模式)搭建开发环境:Netbeans8.0.2 + MySql5.6 + JDK1.7 + tomcat8.0.15本次采用的Spring MVC Jar包如下:spring-aop-4.1.3.RELEASE.jarspring-beans-4.1.3.RELEASE.jarspring-context-4.1.3.RELEASE.jarspring-context-support-4.1.3.RELEASE.jarspring-core-4.1.3.RELEASE.jarspring-expression-4.1.3.RELEASE.jarspring-jdbc-4.1.3.RELEASE.jarspring-oxm-4.1.3.RELEASE.jarspring-tx-4.1.3.RELEASE.jarspring-web-4.1.3.RELEASE.jarspring-webmvc-4.1.3.RELEASE.jar当然还有其他的依赖jar,如有需要请留下邮箱~!1.首先创建Web项目web.mvc2.引入所有的jar文件3.配置web.xml做web开发的都知道,web.xml是项目的入口,我们既然使用spring那么当然要添加Spring 的支持啦!spring默认加载的是applicationContext.xml,由于我们需要集成MyBatis所以我把Spring的配置文件强制指定名称,并与MyBatis一起配置,减少配置文件数量先指定spring配置文件名名称与路径[html]view plaincopyprint?1.<!-- Spring 上下文参数加载Spring配置文件 -->2.<context-param>3.<param-name>contextConfigLocation</param-name>4.<param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value>5.</context-param>再执行Spring上下文监听配置[html]view plaincopyprint?1.<listener>2.<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>3.</listener>添加支持Spring mvc 的配置说明:添加支持目前有3种方式。
第一种:拦截/*.do[html]view plaincopyprint?1.<!-- spring mvc 拦截器配置 -->2.<servlet>3.<servlet-name>springmvc</servlet-name>4.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>5.<init-param>6.<param-name>contextConfigLocation</param-name>7.<param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>8.</init-param>9.<load-on-startup>1</load-on-startup>10.</servlet>11.<servlet-mapping>12.<servlet-name>springmvc</servlet-name>13.<url-pattern>/*.do</url-pattern>14.</servlet-mapping>优势:拦截明确,不会和其他的拦截冲突缺点:URL不美观第二种:拦截/*[html]view plaincopyprint?1.<!-- spring mvc 拦截器配置 -->2.<servlet>3.<servlet-name>springmvc</servlet-name>4.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>5.<init-param>6.<param-name>contextConfigLocation</param-name>7.<param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>8.</init-param>9.<load-on-startup>1</load-on-startup>10.</servlet>11.<servlet-mapping>12.<servlet-name>springmvc</servlet-name>13.<url-pattern>/*</url-pattern>14.</servlet-mapping>优点:支持rest风格,Url美观缺点:会拦截静态资源第三种,也是我推荐的一种:拦截/[html]view plaincopyprint?1.<!-- spring mvc 拦截器配置 -->2.<servlet>3.<servlet-name>springmvc</servlet-name>4.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>5.<init-param>6.<param-name>contextConfigLocation</param-name>7.<param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>8.</init-param>9.<load-on-startup>1</load-on-startup>10.</servlet>11.<servlet-mapping>12.<servlet-name>springmvc</servlet-name>13.<url-pattern>/</url-pattern>14.</servlet-mapping>优点:支持rest风格,URL美观,不拦截静态资源我们采用第三种做为我们的拦截方案,将配置添加到web.xml中。
大家都知道,web项目最怕的就是乱码,而spring为我们提供了字符编码的过滤器,我们也给配置到web.xml中[html]view plaincopyprint?1.<!-- 字符编码配置 -->2.<filter>3.<filter-name>characterEncodingFilter</filter-name>4.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>5.<init-param>6.<param-name>encoding</param-name>7.<param-value>UTF-8</param-value>8.</init-param>9.<init-param>10.<param-name>forceEncoding</param-name>11.<param-value>true</param-value>12.</init-param>13.</filter>14.<filter-mapping>15.<filter-name>characterEncodingFilter</filter-name>16.<url-pattern>/*</url-pattern>17.</filter-mapping>我们采用的是tomcat服务器,为了让静态的资源直接交给tomcat处理,所以我们在web.xml 中配置了以下配置[html]view plaincopyprint?1.<!-- 激活Tomcat的defaultServlet来处理静态文件 -->2.<servlet-mapping>3.<servlet-name>default</servlet-name>4.<url-pattern>*.jpg</url-pattern>5.</servlet-mapping>6.<servlet-mapping>7.<servlet-name>default</servlet-name>8.<url-pattern>*.gif</url-pattern>9.</servlet-mapping>10.<servlet-mapping>11.<servlet-name>default</servlet-name>12.<url-pattern>*.png</url-pattern>13.</servlet-mapping>14.<servlet-mapping>15.<servlet-name>default</servlet-name>16.<url-pattern>*.js</url-pattern>17.</servlet-mapping>18.<servlet-mapping>19.<servlet-name>default</servlet-name>20.<url-pattern>*.css</url-pattern>21.</servlet-mapping>4.配置springmvc-mybatis.xml和springmvc-servlet.xml相信很多人都在这里卡主了,因为配置实在是太多了,各种方式都有为了不妨碍大家,我决定直接将完整的配置直接贴出来springmvc-mybatis.xml[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/schema/beans"3.xmlns:xsi="/2001/XMLSchema-instance"4.xmlns:p="/schema/p"5.xmlns:mvc="/schema/mvc"6.xmlns:context="/schema/context"7.xmlns:util="/schema/util"8.xsi:schemaLocation="/schema/beans9. /schema/beans/spring-beans-4.1.xsd10. /schema/context11. /schema/context/spring-context-4.1.xsd12. /schema/mvc13. /schema/mvc/spring-mvc-4.1.xsd14. /schema/util15. /schema/util/spring-util-4.1.xsd">16.17.<!-- 数据源定义-->18.<bean id="dataSource"class="com.jolbox.bonecp.BoneCPDataSource">19.<property name="driverClass"value="jdbc:mysql://127.0.0.1:3306/web"/>20.<property name="jdbcUrl"value="root"/>21.<property name="username"value="123456"/>22.<property name="password"value="com.mysql.jdbc.Driver"/>23.</bean>24.25.<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">26.<property name="dataSource"ref="dataSource"/>27.<property name="mapperLocations"value="classpath*:dbmap/*Mapper.xml"/>28.</bean>29.30.<!-- 配置事务管理器 -->31.<bean id="transactionManager"32.class="org.springframework.jdbc.datasource.DataSourceTransactionManager">33.<property name="dataSource"ref="dataSource"/>34.</bean>35.36.<bean id="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">37.<property name="dataSource">38.<ref bean="dataSource"/>39.</property>40.</bean>41.<bean id="defaultLobHandler"42.class="org.springframework.jdbc.support.lob.DefaultLobHandler"zy-init="true"/>44.<!-- 查找类路径下的映射器并自动将它们创建成 MapperFactoryBean-->45.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">46.<property name="basePackage"value="com.ansitech.web.orm.mapper"/>47.</bean>48.</beans>spring-servlet.xml[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.<beans xmlns="/schema/beans"3.xmlns:xsi="/2001/XMLSchema-instance"4.xmlns:context="/schema/context"5.xmlns:mvc="/schema/mvc"6.xsi:schemaLocation="/schema/mvc7. /schema/mvc/spring-mvc-4.1.xsd8. /schema/beans9. /schema/beans/spring-beans-4.1.xsd10. /schema/context11. /schema/context/spring-context-4.1.xsd">12.13.<description>Spring MVC Configuration</description>14.15.<!-- 对静态资源文件的访问,交给default servlet handler处理 -->16.<mvc:default-servlet-handler/>17.18.<!-- 启用spring mvc 注解 -->19.<context:annotation-config/>20.21.<!-- 默认的注解映射的支持 -->22.<mvc:annotation-driven/>23.24.<!-- 设置使用注解的类所在的jar包 -->25.<context:component-scan base-package="com.ansitech.web"></context:component-scan>26.27.<!-- 完成请求和注解POJO的映射 -->28.<bean class=29."org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>30.31.<!-- JSP视图文件解析配置 -->32.<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">33.<property name="viewClass"value="org.springframework.web.servlet.view.JstlView"/>34.<property name="prefix"value="/WEB-INF/view/"/>35.<property name="suffix"value=".jsp"/>36.<property name="viewNames"value="jsp/*"/>37.<property name="order"value="1"/>38.</bean>39.40.<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">41.<property name="viewClass"value="org.springframework.web.servlet.view.JstlView"/>42.<property name="prefix"value="/WEB-INF/view/"/>43.<property name="suffix"value=".jsp"/>44.<property name="order"value="2"/>45.</bean>46.47.<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->48.<bean id="multipartResolver"49.class="monsMultipartResolver">50.<!-- one of the properties available; the maximum file size in bytes-->51.<property name="maxUploadSize">52.<value>5242880</value>53.</property>54.</bean>55.</beans>web.xml[html]view plaincopyprint?1.<?xml version="1.0"encoding="UTF-8"?>2.3.<web-app xmlns="/xml/ns/javaee"4.xmlns:xsi="/2001/XMLSchema-instance"5.xsi:schemaLocation="/xml/ns/javaee6. /xml/ns/javaee/web-app_3_0.xsd"7.version="3.0">8.<!-- 程序Session配置 -->9.<session-config>10.<!-- Session过期时间(单位:分) -->11.<session-timeout>30</session-timeout>12.</session-config>13.14.<!-- 激活Tomcat的defaultServlet来处理静态文件 -->15.<servlet-mapping>16.<servlet-name>default</servlet-name>17.<url-pattern>*.jpg</url-pattern>18.</servlet-mapping>19.<servlet-mapping>20.<servlet-name>default</servlet-name>21.<url-pattern>*.gif</url-pattern>22.</servlet-mapping>23.<servlet-mapping>24.<servlet-name>default</servlet-name>25.<url-pattern>*.png</url-pattern>26.</servlet-mapping>27.<servlet-mapping>28.<servlet-name>default</servlet-name>29.<url-pattern>*.js</url-pattern>30.</servlet-mapping>31.<servlet-mapping>32.<servlet-name>default</servlet-name>33.<url-pattern>*.css</url-pattern>34.</servlet-mapping>35.36.<!-- Spring 上下文参数加载Spring配置文件 -->37.<context-param>38.<param-name>contextConfigLocation</param-name>39.<param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value>40.</context-param>41.42.<listener>43.<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>44.</listener>45.46.<!-- spring mvc 拦截器配置 -->47.<servlet>48.<servlet-name>springmvc</servlet-name>49.<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>50.<init-param>51.<param-name>contextConfigLocation</param-name>52.<param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>53.</init-param>54.<load-on-startup>1</load-on-startup>55.</servlet>56.<servlet-mapping>57.<servlet-name>springmvc</servlet-name>58.<url-pattern>/</url-pattern>59.</servlet-mapping>60.61.<!-- 字符编码配置 -->62.<filter>63.<filter-name>characterEncodingFilter</filter-name>64.<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>65.<init-param>66.<param-name>encoding</param-name>67.<param-value>UTF-8</param-value>68.</init-param>69.<init-param>70.<param-name>forceEncoding</param-name>71.<param-value>true</param-value>72.</init-param>73.</filter>74.<filter-mapping>75.<filter-name>characterEncodingFilter</filter-name>76.<url-pattern>/*</url-pattern>77.</filter-mapping>78.79.<!-- 欢迎页 -->80.<welcome-file-list>81.<welcome-file>/index.html</welcome-file>82.</welcome-file-list>83.</web-app>接下来就是包的结构了前缀大家可以自己定义自己喜欢的,但是后边的结构,是整个框架的核心,所以请大家按照我的格式去建前缀com.ansitechcom.ansitech.ormcom.ansitech.orm.basecom.ansitech.orm.mappercom.ansitech.servicecom.ansitech.service.pocom.ansitech.service.implcom.ansitech.webcom.ansitech.web.controller大家可能不理解,为什么要这么建呢?那么我们来以用户管理模块来解释,用户对象为User那么我们需要建立基础对象:er.java[java]view plaincopyprint?1.package com.ansitech.orm.base;2.3./**4. * 用户对象5. *6. * @author qsyang7. */8.public class User {9.10.private int id;11.private String loginName;12.private String loginPwd;13./**14. * 用户类型 1 管理员 2 普通用户15. */16.private int typeId;17.18.public int getId() {19.return id;20. }21.22.public void setId(int id) {23.this.id = id;24. }25.26.public String getLoginName() {27.return loginName;28. }29.30.public void setLoginName(String loginName) {31.this.loginName = loginName;32. }33.34.public String getLoginPwd() {35.return loginPwd;36. }37.38.public void setLoginPwd(String loginPwd) {39.this.loginPwd = loginPwd;40. }41.42.public int getTypeId() {43.return typeId;44. }45.46.public void setTypeId(int typeId) {47.this.typeId = typeId;48. }49.}基础对象建好了,我们需要做一个Mapper来实现用户对象的增删改查erMapper.java[java]view plaincopyprint?1.package com.ansitech.orm.mapper;2.3.import er;4.import org.apache.ibatis.annotations.Param;5.6./**7. * 用户数据接口8. *9. * @author qsyang10. */11.public interface UserMapper {12.13.void add(User user);14.15. User get(@Param("id") int id);16.17.void update(User user);18.19.int delete(@Param("id") int id);20.21.}使用ORM模式,我们需要创建一个抽象的用户对象来解决额外属性查询的问题com.ansitech.orm.AbstractUser.java[java]view plaincopyprint?1.package com.ansitech.orm;2.3.import er;4.5./**6. * 抽象用户对象7. *8. * 提供其他属性获取9. *10. * @author qsyang11. */12.public abstract class AbstractUser extends User{13.14.//获取当前用户所属分类名称15.public abstract String findTypeName();16.}有了数据接口了,我们需要对外提供服务com.ansitech.service.IUserService.java[java]view plaincopyprint?1.package com.ansitech.service;2.3.import com.ansitech.orm.AbstractUser;4.import er;5.6./**7. * 用户服务接口8. *9. * @author qsyang10. */11.public interface IUserService {12.13.//添加系统管理员14.void addSystemUser(String loginName, String loginPwd);15.16.//添加普通用户17.void addNormalUser(String loginName, String loginPwd);18.19.//根据用户Id查询抽象用户20. AbstractUser getAbstractUserById(int userId);21.22.//根据用户Id查询用户23. User getUserById(int userId);24.25.//修改用户信息26.void updateUser(int userId, String loginName, String loginPwd);27.28.//根据用户Id删除用户29.int deleteUser(int userId);30.}有了服务接口,就要有实现接口erService.java[java]view plaincopyprint?1.package com.ansitech.service.impl;2.3.import com.ansitech.orm.AbstractUser;4.import er;5.import erMapper;6.import com.ansitech.service.IUserService;7.import org.springframework.beans.factory.annotation.Autowired;8.import org.springframework.stereotype.Service;9.10./**11. * 用户接口实现类12. *13. * @author qsyang14. */15.@Service16.public class UserService implements IUserService {17.18.@Autowired19.private UserMapper userMapper;20.21.@Override22.public void addSystemUser(String loginName, String loginPwd) {23. User user = new User();24. user.setLoginName(loginName);25. user.setLoginPwd(loginPwd);26.//用户类型 1 管理员 2 普通用户27. user.setTypeId(1);28. userMapper.add(null);29. }30.31.@Override32.public void addNormalUser(String loginName, String loginPwd) {33. User user = new User();34. user.setLoginName(loginName);35. user.setLoginPwd(loginPwd);36.//用户类型 1 管理员 2 普通用户37. user.setTypeId(2);38. userMapper.add(null);39. }40.41.@Override42.public AbstractUser getAbstractUserById(int userId) {43.throw new UnsupportedOperationException("Not supported yet.");44. }45.46.@Override47.public User getUserById(int userId) {48.return userMapper.get(userId);49. }50.51.@Override52.public void updateUser(int userId, String loginName, String loginPwd) {53.//先根据用户Id查询用户对象54. User user = userMapper.get(userId);55.if (user != null) {56. user.setLoginName(loginName);57. user.setLoginPwd(loginPwd);58.//修改用户59. userMapper.update(user);60. }61. }62.63.@Override64.public int deleteUser(int userId) {65.return userMapper.delete(userId);66. }67.68.}细心的便宜,可能已经看到了,getAbstractUserById()这个方法我们还没有实现因为AbstractUser还有具体的实现类,所以我们来新建实现类[java]view plaincopyprint?1.package com.ansitech.service.po;2.3.import com.ansitech.orm.AbstractUser;4.import er;5.import erService;6.7./**8. * 用户数据操作对象9. *10. * @author qsyang11. */12.public class UserPO extends AbstractUser {13.14.private final UserService userService;15.16.public UserPO(UserService userService) {erService = userService;18. }19.20.public UserPO copyFrom(User obj) {21.this.setId(obj.getId());22.this.setLoginName(obj.getLoginName());23.this.setLoginPwd(obj.getLoginPwd());24.this.setTypeId(obj.getTypeId());25.return this;26. }27.28.@Override29.public String findTypeName() {30.return userService.findTypeName(this.getTypeId());31. }32.33.}对象已经创建好了,这个时候我们可以修改下service实现类的方法了,并且我们增加了一个方法增加这个方法,只是因为我们有可能需要继续调用其他的Mapper去查询。