Maven+SSMæ¡æ¶(Spring+SpringMVC+MyBatis) - Hello World
æ¥æºï¼http://blog.****.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referralï¼ä»¥ä¸åæå¯¹ååæææ¹å¨åè¡¥å ï¼
åæé红åºç½åçï¼ä¸ºæ³¨æä¿®æ¹çå°æ¹ï¼å¨è¿éå 声æ
æºç ï¼Maven&SSMæ¡æ¶ - Hello World
å¼åç¯å¢ï¼
Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2)
MySQL 5.0.11-devï¼å®ç½ä¸è½½éè¦è´¦å·ç»å½ï¼æ 䏿ä¾ï¼è¯·èªè¡ç¾åº¦ï¼
1ãåºæ¬æ¦å¿µ
1.1ãSpring
Springæ¯ä¸ä¸ªå¼æºæ¡æ¶ï¼Springæ¯äº2003 å¹´å ´èµ·çä¸ä¸ªè½»é级çJava å¼åæ¡æ¶ï¼ç±Rod Johnson å¨å ¶èä½Expert One-On-One J2EE Development and Designä¸éè¿°çé¨åç念åååè¡çèæ¥ã宿¯ä¸ºäºè§£å³ä¼ä¸åºç¨å¼åç夿æ§èå建çãSpring使ç¨åºæ¬çJavaBeanæ¥å®æä»¥ååªå¯è½ç±EJB宿çäºæ ãç¶èï¼Springçç¨éä¸ä» éäºæå¡å¨ç«¯çå¼åãä»ç®åæ§ã坿µè¯æ§åæ¾è¦åçè§åº¦èè¨ï¼ä»»ä½Javaåºç¨é½å¯ä»¥ä»Springä¸åçã ç®åæ¥è¯´ï¼Springæ¯ä¸ä¸ªè½»éçº§çæ§å¶å转ï¼IoCï¼åé¢ååé¢ï¼AOPï¼ç容卿¡æ¶ã
1.2ãSpringMVC
Spring MVCå±äºSpringFrameWorkçåç»äº§åï¼å·²ç»èåå¨Spring Web Flowéé¢ãSpring MVC åç¦»äºæ§å¶å¨ã模å对象ãåæ´¾å¨ä»¥åå¤çç¨åºå¯¹è±¡çè§è²ï¼è¿ç§å离让å®ä»¬æ´å®¹æè¿è¡å®å¶ã
1.3ãMyBatis
MyBatis æ¬æ¯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å¯¹è±¡ï¼æ å°ææ°æ®åºä¸çè®°å½ã
2ãå¼åç¯å¢æå»º
åçåæï¼MyEclipse+Tomcat+MAVEN+SVN项ç®å®æ´ç¯å¢æå»ºï¼ä½è ï¼shu_linï¼
3ãMaven Web项ç®å建
åçåæï¼ä½¿ç¨mavenå建web项ç®ï¼ä½è ï¼shu_linï¼ï¼åææå䏿¥å¯ä»¥ä¸ç¨è®¾ç½®ï¼Maven->Update Project...ä¼èªå¨è®¾ç½®ï¼
è¡¥å ï¼ï¼å¯è·³è¿ï¼
æ°å»ºçMavenï¼Java Resourcesåªæresource
å¯ä»¥æ·»å Server Libraryèªå¨çæ
å³å»é¡¹ç®->Properties->Java Build Path->Add Library...->Server Library
4ãSSMæ´å
ä¸é¢ä¸»è¦ä»ç»ä¸å¤§æ¡æ¶çæ´åï¼è³äºç¯å¢çæå»ºä»¥å项ç®çå建ï¼åçä¸é¢çåæãè¿æ¬¡æ´åæåäº2个é ç½®æä»¶ï¼å嫿¯spring-mybatis.xmlï¼å å«springåmybatisçé ç½®æä»¶ï¼è¿æä¸ªæ¯spring-mvcçé ç½®æä»¶ï¼æ¤å¤æ2ä¸ªèµæºæä»¶ï¼jdbc.propertisålog4j.propertiesã
ä½¿ç¨æ¡æ¶é½æ¯è¾æ°ççæ¬ï¼
Spring 4.0.2 RELEASEï¼PSï¼æ éæå¨ä¸è½½ï¼Mavenä¼èªå¨ä¸ï¼
Spring MVC 4.0.2 RELEASEï¼PSï¼æ éæå¨ä¸è½½ï¼Mavenä¼èªå¨ä¸ï¼
MyBatis 3.2.6ï¼ä¸è½½ï¼https://github.com/mybatis/mybatis-3/releasesï¼
宿´ç®å½ç»æå¦ä¸ï¼
4.1ãMavenå¼å
¥éè¦çJARå
ä¸ºäºæ¹ä¾¿åé¢è¯´çæ¶åä¸éè¦å¼å ¥JARå ï¼æè¿éç´æ¥ç»åºææéè¦çJARå ï¼è¿é½æ¯åºæ¬çJARå ï¼æ¯ä¸ªå çæ¯å¹²ä»ä¹çé½ææ³¨éï¼å°±ä¸åå¤è¯´äºã
pom.xml
<properties> <!-- springçæ¬å· --> <spring.version>4.0.2.RELEASE</spring.version> <!-- mybatisçæ¬å· --> <mybatis.version>3.2.6</mybatis.version> <!-- log4jæ¥å¿æä»¶ç®¡çå çæ¬ --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 表示å¼åçæ¶åå¼å ¥ï¼åå¸çæ¶åä¸ä¼å è½½æ¤å --> <scope>test</scope> </dependency> <!-- springæ ¸å¿å --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</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-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- mybatisæ ¸å¿å --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/springå --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- å¯¼å ¥java ee jar å --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- å¯¼å ¥Mysqlæ°æ®åºé¾æ¥jarå --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- å¯¼å ¥dbcpçjarå ï¼ç¨æ¥å¨applicationContext.xmlä¸é ç½®æ°æ®åº --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- JSTLæ ç¾ç±» --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- æ¥å¿æä»¶ç®¡çå --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- æ ¼å¼åå¯¹è±¡ï¼æ¹ä¾¿è¾åºæ¥å¿ --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- æ å ¥JSON --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- ä¸ä¼ ç»ä»¶å --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> </dependencies> <build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
4.2ãSpringä¸MyBatisçæ´å
ææéè¦çJARå é½å¼å ¥ä»¥åï¼é¦å è¿è¡Springä¸MyBatisçæ´åï¼ç¶ååè¿è¡JUnitæµè¯ï¼å çä¸ä¸ªé¡¹ç®ç»æå¾ï¼
4.2.1ã建ç«JDBC屿§æä»¶
jdbc.propertiesï¼æä»¶ç¼ç ä¿®æ¹ä¸ºutf-8ï¼
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8 username=root password=123456 #å®ä¹åå§è¿æ¥æ° initialSize=0 #å®ä¹æå¤§è¿æ¥æ° maxActive=20 #å®ä¹æå¤§ç©ºé² maxIdle=20 #å®ä¹æå°ç©ºé² minIdle=1 #å®ä¹æé¿çå¾ æ¶é´ maxWait=60000
4.2.2ãLog4jçé ç½®ï¼è·³è¿æ¤æ¥ä¹æ²¡å½±åï¼
ä¸ºäºæ¹ä¾¿è°è¯ï¼ä¸è¬é½ä¼ä½¿ç¨æ¥å¿æ¥è¾åºä¿¡æ¯ï¼Log4jæ¯Apacheçä¸ä¸ªå¼æ¾æºä»£ç 项ç®ï¼éè¿ä½¿ç¨Log4jï¼æä»¬å¯ä»¥æ§å¶æ¥å¿ä¿¡æ¯è¾éçç®çå°æ¯æ§å¶å°ãæä»¶ãGUIç»ä»¶ï¼çè³æ¯å¥æ¥å£æå¡å¨ãNTçäºä»¶è®°å½å¨ãUNIX Syslog宿¤è¿ç¨çï¼æä»¬ä¹å¯ä»¥æ§å¶æ¯ä¸æ¡æ¥å¿çè¾åºæ ¼å¼ï¼éè¿å®ä¹æ¯ä¸æ¡æ¥å¿ä¿¡æ¯ç级å«ï¼æä»¬è½å¤æ´å ç»è´å°æ§å¶æ¥å¿ççæè¿ç¨ã
Log4jçé
ç½®å¾ç®åï¼èä¸ä¹æ¯éç¨çï¼ä¸é¢ç»åºä¸ä¸ªåºæ¬çé
ç½®ï¼æ¢å°å
¶ä»é¡¹ç®ä¸ä¹æ éåå¤å¤§çè°æ´ï¼å¦ææ³åè°æ´æè
æ³äºè§£Log4jçåç§é
ç½®ï¼åçæè½¬è½½çä¸ç¯åæï¼å¾è¯¦ç»ï¼Log4jé
置详解 ï¼ä½è
ï¼shu_linï¼
log4j.propertiesï¼æä»¶ç¼ç ä¿®æ¹ä¸ºutf-8ï¼
#å®ä¹LOGè¾åºçº§å« log4j.rootLogger=INFO,Console,File #å®ä¹æ¥å¿è¾åºç®çå°ä¸ºæ§å¶å° log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out #å¯ä»¥çµæ´»å°æå®æ¥å¿è¾åºæ ¼å¼ï¼ä¸é¢ä¸è¡æ¯æå®å ·ä½çæ ¼å¼ log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n #æä»¶å¤§å°å°è¾¾æå®å°ºå¯¸çæ¶å产çä¸ä¸ªæ°çæä»¶ log4j.appender.File = org.apache.log4j.RollingFileAppender #æå®è¾åºç®å½ log4j.appender.File.File = logs/springmvcMybist/ssm.log #å®ä¹æä»¶æå¤§å¤§å° log4j.appender.File.MaxFileSize = 10MB #è¾åºæä»¥æ¥å¿ï¼å¦ææ¢æDEBUG表示è¾åºDEBUG以ä¸çº§å«æ¥å¿ log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
4.2.3ã建ç«spring-mybatis.xmlé
ç½®æä»¶
è¿ä¸ªæä»¶å°±æ¯ç¨æ¥å®æspringåmybatisçæ´åçãè¿éé¢ä¹æ²¡å¤å°è¡é ç½®ï¼ä¸»è¦çå°±æ¯èªå¨æ«æï¼èªå¨æ³¨å ¥ï¼é ç½®æ°æ®åºã注éä¹å¾è¯¦ç»ï¼å¤§å®¶ççå°±æç½äºã
spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- èªå¨æ«æ --> <context:component-scan base-package="com.ssm" /> <!-- å¼å ¥é ç½®æä»¶ --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.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/ssm/mapping/*.xml"></property> </bean> <!-- DAOæ¥å£æå¨å åï¼Springä¼èªå¨æ¥æ¾å ¶ä¸çç±» --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ssm.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>
4.2.4ãJUnitæµè¯
ç»è¿ä»¥ä¸æ¥éª¤ï¼log4jä¸é 乿²¡å½±åï¼ï¼æä»¬å·²ç»å®æäºSpringåmybatisçæ´åï¼è¿æ ·æä»¬å°±å¯ä»¥ç¼å䏿®µæµè¯ä»£ç æ¥è¯è¯æ¯å¦æåäºã
4.2.4.1ãå建æµè¯ç¨è¡¨
æ¢ç¶æä»¬éè¦æµè¯ï¼é£ä¹æä»¬å°±éè¦å»ºç«å¨æ°æ®åºä¸å»ºç«ä¸ä¸ªæµè¯è¡¨ï¼è¿ä¸ªè¡¨å»ºçå¾ç®åï¼SQLè¯å¥ä¸ºï¼
MySQL
# # Structure for table "user_t" # DROP TABLE IF EXISTS `user_t`; CREATE TABLE `user_t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(40) NOT NULL, `password` varchar(255) NOT NULL, `age` int(4) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; # # Data for table "user_t" # INSERT INTO `user_t` VALUES (1,'æµè¯','123456',24);
4.2.4.2ãå©ç¨MyBatis Generatorèªå¨å建代ç
é便æ¾ä¸ªä½ç½®å»ºæä»¶å¤¹ï¼è·¯å¾æå¥½é½æ¯è±æï¼ï¼ç¶åå¨éé¢å»ºä¸ªsrcæä»¶å¤¹ï¼ä¸è½½ä¸é¢é£ä¸¤ä¸ªå ï¼å°generatorConfig.xmlæ·è¿å»ï¼æåæå¼cmdï¼è¿å°æä»¶å¤¹ï¼æ§è¡ä¸é¢çå½ä»¤ï¼ä»£ç å°±ä¼çæå°srcæä»¶å¤¹é
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- æ°æ®åºé©±å¨ --> <classPathEntry location="mysql-connector-java-5.1.38-bin.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true" /> <!-- æ¯å¦å»é¤èªå¨çæç注é trueï¼æ¯ ï¼ false:å¦ --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--æ°æ®åºé¾æ¥URLï¼ç¨æ·åãå¯ç --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- çææ¨¡åçå ååä½ç½® --> <javaModelGenerator targetPackage="com.ssm.pojo" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- çææ å°æä»¶çå ååä½ç½® --> <sqlMapGenerator targetPackage="com.ssm.mapping" targetProject="src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- çæDAOçå ååä½ç½® --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.ssm.dao" targetProject="src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- è¦çæç表 tableNameæ¯æ°æ®åºä¸ç表åæè§å¾å domainObjectNameæ¯å®ä½ç±»å --> <table tableName="user_t" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table> </context> </generatorConfiguration>
cmdå½ä»¤
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
å¯åæ.batæä»¶å¤ç¨ï¼æ¾å¨ç®å½è¿è¡å³å¯
cmdå½ä»¤
set current_path="%cd%" java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite pause exit
åèåæï¼SSMæ¡æ¶ââ使ç¨MyBatis Generatorèªå¨å建代ç ï¼ä½è ï¼shu_linï¼
è¿ä¸ªå¯æ ¹æ®è¡¨èªå¨å建å®ä½ç±»ãMyBatisæ 尿件以åDAOæ¥å£ï¼å®æåå°æä»¶å¤å¶å°å·¥ç¨ä¸ãå¦å¾ï¼
IUserService.java
package com.ssm.service; import com.ssm.pojo.User; public interface IUserService { public User getUserById(int userId); }
UserService.java
package com.ssm.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.ssm.dao.UserMapper; import com.ssm.pojo.User; import com.ssm.service.IUserService; @Service("userService") public class UserService implements IUserService { @Resource private UserMapper userDao; public User getUserById(int userId) { return this.userDao.selectByPrimaryKey(userId); } }
4.2.4.4ãå»ºç«æµè¯ç±»
æµè¯ç±»å¨src/test/javaä¸å»ºç«ï¼ä¸é¢æµè¯ç±»ä¸æ³¨éæçé¨åæ¯ä¸ä½¿ç¨Springæ¶ï¼ä¸è¬æ åµä¸çä¸ç§æµè¯æ¹æ³ï¼å¦æä½¿ç¨äºSpringé£ä¹å°±å¯ä»¥ä½¿ç¨æ³¨è§£çæ¹å¼æ¥å¼å ¥é ç½®æä»¶åç±»ï¼ç¶ååå°serviceæ¥å£å¯¹è±¡æ³¨å ¥ï¼å°±å¯ä»¥è¿è¡æµè¯äºã妿æµè¯æåï¼è¡¨ç¤ºSpringåMybatiså·²ç»æ´åæåäºãè¾åºä¿¡æ¯ä½¿ç¨çæ¯Log4jæå°å°æ§å¶å°ã
TestMyBatis.java
package com.ssm.testmybatis; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.alibaba.fastjson.JSON; import com.ssm.pojo.User; import com.ssm.service.IUserService; @RunWith(SpringJUnit4ClassRunner.class) // 表示继æ¿äºSpringJUnit4ClassRunnerç±» @ContextConfiguration(locations = { "classpath:spring-mybatis.xml" }) public class TestMyBatis { private static Logger logger = Logger.getLogger(TestMyBatis.class); // private ApplicationContext ac = null; @Resource private IUserService userService = null; // @Before // public void before() { // ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // userService = (IUserService) ac.getBean("userService"); // } @Test public void test() { User user = userService.getUserById(1); // System.out.println(user.getUserName()); // logger.info("å¼ï¼"+user.getUserName()); logger.info(JSON.toJSONString(user)); } }
æµè¯ï¼
å clean项ç®ï¼å¯è·³è¿ï¼ï¼åMaven->Update Project...ï¼éç¹ï¼ï¼å°±æ¯ä¸ºäºæ´æ°é¡¹ç®è®¾ç½®ï¼ï¼å³å»é¡¹ç®->Run As->JUnit Testï¼
è³æ¤ï¼å®æSpringåmybatisè¿ä¸¤å¤§æ¡æ¶çæ´åï¼ä¸é¢å¨ç»§ç»è¿è¡SpringMVCçæ´åã
妿µè¯å¤±è´¥è¯·åèç½åæ¹æ³ï¼ä¸è¬clean项ç®åå³å»é¡¹ç®->Maven->Update Project...æ´æ°ä¸ä¸é¡¹ç®è®¾ç½®é½å¯ä»¥è§£å³ï¼
4.3ãæ´åSpringMVC
ä¸é¢å·²ç»å®æäº2å¤§æ¡æ¶çæ´åï¼SpringMVCçé ç½®æä»¶åç¬æ¾ï¼ç¶åå¨web.xmlä¸é ç½®æ´åã
4.3.1ãé ç½®spring-mvc.xml
é ç½®éé¢ç注éä¹å¾è¯¦ç»ï¼å¨æ¤å°±ä¸è¯´äºï¼ä¸»è¦æ¯èªå¨æ«ææ§å¶å¨ï¼è§å¾æ¨¡å¼ï¼æ³¨è§£çå¯å¨è¿ä¸ä¸ªã
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!--é¿å IEæ§è¡AJAXæ¶ï¼è¿åJSONåºç°ä¸è½½æä»¶ --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- å¯å¨SpringMVCçæ³¨è§£åè½ï¼å®æè¯·æ±å注解POJOçæ å° --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转æ¢å¨ --> </list> </property> </bean> <!-- 对éæèµæºçè®¿é® --> <!-- <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/css/**" location="/css/" /> --> <!-- èªå¨æ«æè¯¥å ï¼ä½¿SpringMVC认为å ä¸ç¨äº@controller注解çç±»æ¯æ§å¶å¨ --> <context:component-scan base-package="com.ssm.controller" /> <!-- æ·»å æ³¨è§£é©±å¨ --> <mvc:annotation-driven enable-matrix-variables="true" /> <!-- å 许对éæèµæºæä»¶çè®¿é® --> <mvc:default-servlet-handler /> <!-- å®ä¹è·³è½¬çæä»¶çååç¼ ï¼è§å¾æ¨¡å¼é ç½® --> <bean class="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="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- é»è®¤ç¼ç --> <property name="defaultEncoding" value="UTF-8" /> <!-- æä»¶å¤§å°æå¤§å¼ --> <property name="maxUploadSize" value="10485760000" /> <!-- å åä¸çæå¤§å¼ --> <property name="maxInMemorySize" value="40960" /> </bean> </beans>
4.3.2ãé
ç½®web.xmlæä»¶
è¿éé¢å¯¹spring-mybatis.xmlçå¼å ¥ä»¥åé ç½®çspring-mvcçServletå°±æ¯ä¸ºäºå®æSSMæ´åï¼ä¹å2æ¡æ¶æ´åä¸éè¦å¨æ¤å¤è¿è¡ä»»ä½é ç½®ãé ç½®ä¸æ ·æè¯¦ç»æ³¨éï¼ä¸å¤è§£éäºã
web.xml
<?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 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Archetype Created Web Application</display-name> <!-- Springåmybatisçé ç½®æä»¶ --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!-- ç¼ç è¿æ»¤å¨ --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Springçå¬å¨ --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 鲿¢Springå åæº¢åºçå¬å¨ --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- Spring MVC servlet --> <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- æ¤å¤å¯ä»¥å¯ä»¥é ç½®æ*.doï¼å¯¹åºstrutsçåç¼ä¹ æ¯ --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.html</welcome-file> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app>
4.3.3ãæµè¯
è³æ¤å·²ç»å®æäºSSMä¸å¤§æ¡æ¶çæ´åäºï¼æ¥ä¸æ¥æµè¯ä¸ä¸ï¼å¦ææåäºï¼é£ä¹æåä½ ï¼å¦æå¤±è´¥äºï¼ç»§ç»è°è¯å§ï¼ä½ä¸ºç¨åºåå°±æ¯ä¸åçä¸BUGåæäºï¼
4.3.3.1ãæ°å»ºjsp页é¢
User.jsp æ¤é¡µé¢ä» è¾åºä¸ä¸ç¨æ·åï¼å®æä¸ä¸ªå®æ´çç®åæµç¨ã
User.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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>${user.userName} </body> </html>
4.3.3.2ã建ç«UserControllerç±»
UserController.java
package com.ssm.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.ssm.pojo.User; import com.ssm.service.IUserService; @Controller @RequestMapping("/user") public class UserController { @Resource private IUserService userService; @RequestMapping("/showUser") public String toIndex(HttpServletRequest request, Model model) { int userId = Integer.parseInt(request.getParameter("id")); User user = this.userService.getUserById(userId); model.addAttribute("user", user); return "User"; } }
4.3.3.3ãé¨ç½²é¡¹ç®
忬¡æµè¯ï¼å³å»é¡¹ç®->Run As->Run On Serserï¼ï¼è¾å ¥å°åï¼http://localhost:8080/app/user/showUser?id=1
妿æå请ä¸è¦å¼å¿å¾å¤ªæ©ï¼Maven->Update Project...æå°é¡¹ç®æ·å°å ¶ä»æºä¸åä¼ç«é©¬åºç°404ï¼shu_linä¸å ¶ä»å䏻齿²¡æä¸ºæ¤ä½åºä»»ä½åç»è¯´æï¼ä¸ºæ¤ååºæ¤åæä½åºè¡¥å ã
è¡¥å ï¼
æ 论æ¯shu_linçSSMæ¡æ¶ââè¯¦ç»æ´åæç¨ï¼Spring+SpringMVC+MyBatisï¼è¿æ¯å ¶ä»äººçåæï¼é½æ²¡æåæMaven->Update Project...åä¼å¯¼è´é¡¹ç®ä¸è½è¿è¡ï¼ä¼åºç°å ³äºSpringå çClassNotFoundExceptioné误è¿ä¸ªé®é¢ï¼
ï¼å¯¹äºæè¿ä¸ªæ°æï¼Javaé¶åºç¡æ°æï¼Eclipseä¹ä¸çæï¼å¤´å¤§äºãããè±äºè¿ä¸ä¸ªææ¥å¦è¿ä¸ªHello Worldãå°±æ¯å¡å¨è¿ä¸ªé®é¢ä¸ãï¼
çé®å¼å§ï¼æ¾Maven
带çè¿ä¸ªçé®ï¼å°±ç¬¬ä¸æ¶é´æ¾å°Mavenï¼å¯æ¯å¥æªäºï¼é½å å«äºï¼ï¼ä¸ºä»ä¹è¿æ¯æ¾ä¸å°ç±»ï¼
ä»ç¾åº¦éæ¾äºå¤ä¸ªçæ¡åï¼ç»äºæ¾å°é®é¢æå¨ï¼å°±æ¯ç¼è¯æ¶æ²¡æå¤å¶ä¾èµå å°WEB-INF/libéï¼ç¼è¯æ¶ä¹æ²¡æçælibæä»¶å¤¹
ä¸´æ¶æ¹æ³ï¼ï¼PSï¼æè§æ¹æ³ä¸å¤ªå¯¹ï¼æ¾å¼äºï¼
ç¾åº¦éæä¸ªæ¹æ³å°±æ¯æä½ ä¿®æ¹.classpathï¼æå¨æ·»å /WEB-INF/lib
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> <attribute name="maven.pomderived" value="true"/> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry>
ä¸´æ¶æ¹æ³ï¼
å³å»é¡¹ç®->Properties->Deployment Assembly->Add->Java Build Path Entries->Maven Dependencies->Finishå®ææ·»å ï¼åç¹å»OKå ³é
忬¡æµè¯ï¼å³å»é¡¹ç®->Run As->Run On Serserï¼ï¼è¾å ¥å°åï¼http://localhost:8080/app/user/showUser?id=1ï¼è¿è¡OKï¼
å®ç¾è§£å³æ¹æ³ï¼
坿¯æ¯ç«æ¯ä¸´æ¶æ¹æ³ï¼Maven->Update Project...åè¿æ¯ä¼å¯¼è´é¡¹ç®ä¸è½è¿è¡ï¼å 为é 置被Mavenè¿åäºï¼ï¼ï¼ä¸è¡ï¼è¿è¿æ¯æ²¡æè§£å³ï¼è¿éè¦åæ¾ï¼å çªå¨æç»äºæ¾å°äºï¼
æå¼cmdï¼å®ä½å°é¡¹ç®ç®å½ä¸ï¼æ§è¡ä¸é¢å½ä»¤
cmdå½ä»¤ï¼æ ¹æ®Java Build Pathçå表å¾ç¥ï¼åªè¦ä¸æ¹å¨å ï¼å°±ä¸éè¦å次è¿è¡æ¤å½ä»¤ï¼
mvn eclipse:eclipse -Dwtpversion=2.0
å¯åæ.batæä»¶å¤ç¨ï¼æ¾å¨é¡¹ç®æ ¹ç®å½è¿è¡å³å¯
cmdå½ä»¤
set current_path="%cd%" mvn eclipse:eclipse -Dwtpversion=2.0 pause exit
æ§è¡å½ä»¤ä»¥åï¼clean项ç®åMaven->Update Project...åï¼Deployment AssemblyåJava Build Path齿åå
忬¡æµè¯ï¼å³å»é¡¹ç®->Run As->Run On Serserï¼ï¼è¾å ¥å°åï¼http://localhost:8080/app/user/showUser?id=1ï¼è¿è¡OKï¼å®ç¾ï¼
åççWEB-INFéï¼ç»äºèªå¨çælibæä»¶å¤¹