我是根據這篇博客自己學習這個實例的:AndyLizh的專欄 SSM框架——詳細整合教程(Spring SpringMVC MyBatis)
上面的這篇博客里有怎么搭建 Maven 環(huán)境,根據數據表自動生成 Mybatis 的Dao層,Service層,Maping xml文件等教程。
下面是我的實例實現的詳細步驟、源代碼和一些筆記、遇到的問題
Eclipse版本 Neon.1a Release (4.6.1)apache-maven-3.3.9數據庫 MySQL5.7.12
maven 配置的中央倉庫阿里云地址
setting.xml
.. <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> . .
建好之后會提示下面的錯誤:
The superclass 'javax.servlet.http.HttpServlet' was not found on the Java Build Path index.jsp
在項目右鍵 Java Build Path
添加 Tomcat 服務器的依賴
修改 JRE 版本, Edit 更改為 Eclipse 工作空間默認的 JRE 版本,我的是1.8
之后還要在pom.xml文件中聲明 jre 的版本(配置pom.xml文件時給出),和你
Java Build Path
中配置的版本要相同,否則 maven update project又會回到1.5版本,這個版本和項目目錄下.settings/org.eclipse.wst.common.project.facet.core.xml
的配置有關
...<plugins> <!-- 修改maven默認的JRE編譯版本 防止maven update project之后 把jre配置的成默認的1.5 根據自己的情況更改為1.7或1.8 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>
默認的 pom.xml 內容:
pom.xml
<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>com.jxust</groupId> <artifactId>SSM-Test2</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SSM-Test2 Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>SSM-Test2</finalName> </build></project>
Maven Project 最重要的就是配置這個 pom.xml 文件,我在引用別人的pom.xml文件時,發(fā)生了很多問題,這和 maven 中央倉庫的地址應該也有關系。
說到阿里云的maven中央倉庫的jar包,在我的測試中,像Spring 和Mybatis 最新的jar包都還沒有,需要低一個版本才有
在配置 pom.xml 過程中,遇到了的幾個問題:
2.0版本前叫org.codehaus.jackson ,2.0版本之后com.fasterxml.jackson ,配置方式不同
<!-- 2.0版本之后引入JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.5</version> </dependency>
<!-- 2.0版本之前 引入JSON --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
升級 Spring 或者 Mybatis 的版本是,mybatis-spring 包的版本也要跟著升級
spring 版本 4.0.2,Mybatis 的版本為3.2.6時,mybatis-spring的jar包1.2.0就行
spring 版本 4.3.3,Mybatis 的版本為3.4.0時,mybatis-spring的jar包1.3.0才可以
<!--mybatis spring 插件 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
org.mybatis.spring.SqlSessionFactoryBean
找不到 配置了mybatis spring 版本的不對
.
Maven引入需要的SSM 框架jar包,修改后: pom.xml
<project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>com.jxust</groupId> <artifactId>SSM-Test2</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SSM-Test2 Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring版本號 --> <spring.version>4.3.3.RELEASE</spring.version> <!-- mybatis版本號 --> <mybatis.version>3.4.0</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.12</version> <!-- 表示開發(fā)的時候引入,發(fā)布的時候不會加載此包 --> <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.3.0</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.25</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>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.5</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>SSM-Test2</finalName> <plugins> <!-- 修改maven默認的JRE編譯版本 防止maven update project之后 把jre配置的成默認的1.5 根據自己的情況更改為1.7或1.8 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build></project>
有些jar包并不一定會用到
之后保存,右擊項目-maven-update project,如果出現以下的異常
JavaServer Faces 2.2 can not be installed : One or more constraints have not been satisfied.JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer. SSM-Test2
這是web.xml
文件頭信息配置的不正確,原來的2.3,不符合要求。
解決步驟1:web.xml
頭信息替換為下面的代碼:
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' id='WebApp_ID' version='3.0'></web-app>
解決步驟2:關閉Eclipse,修改項目目錄下.settings/org.eclipse.wst.common.project.facet.core.xml
的配置
<installed facet='jst.web' version='2.3'/>
改為
<installed facet='jst.web' version='3.0'/>
重啟Eclipse,右擊項目-maven-update project(不行,就先移除項目,導入)
項目結構為:
之后可以在 Java Build Path
中查看自己 maven 下載的jar包。
jdbc.properties
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/db_ssmusername=rootpassword=rootinitialSize=0 maxActive=20 maxIdle=20minIdle=1maxWait=60000
注意字符后面不要帶空格,特別是當你復制別人的代碼時,例如 ‘root ‘,我就是犯了這個錯誤
包的路徑,在創(chuàng)建之后,記得改為自己的路徑
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:context='http://www.springframework.org/schema/context' xmlns:mvc='http://www.springframework.org/schema/mvc' xmlns:tx='http://www.springframework.org/schema/tx' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd'> <!-- 自動掃描 --> <context:component-scan base-package='com.jxust.ssm' > <!-- 不掃描@Controller注解的類--> <context:exclude-filter type='annotation' expression='org.springframework.stereotype.Controller'/> </context:component-scan> <!-- 引入配置文件 --> <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/jxust/ssm/mapping/*.xml'></property> </bean> <!-- DAO接口所在包名,Spring會自動查找其下的類 動態(tài)代理實現 不用寫dao的實現類--> <bean class='org.mybatis.spring.mapper.MapperScannerConfigurer'> <property name='basePackage' value='com.jxust.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> <tx:annotation-driven transaction-manager='transactionManager'/> <!-- 在這里我有一個疑惑,原文博客這里并沒有配置事務注解,我測試了向數據庫添加數據,也能成功,(我在寫Hibernate是需要配置事務注解的) 不知道是不是,service實現類,bean 使用了注解的方式,還是其他什么的 這里我把事務注解加上 spring、mybatis 配置方式 可以看這篇博客:http://blog.csdn.net/qh_java/article/details/51601139 --></beans>
通過日志來輸出各種調試信息
log4j.properties
#定義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.PatternLayoutlog4j.appender.Console.layout.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 = ALLlog4j.appender.File.layout = org.apache.log4j.PatternLayoutlog4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
建表語句和原始數據
mysql> use db_ssm;Database changedmysql> CREATE TABLE tb_user( -> id int(11) NOT NULL AUTO_INCREMENT, -> user_name varchar(40) NOT NULL, -> password varchar(40) NOT NULL, -> age int(4) NOT NULL, -> PRIMARY KEY(id)) -> ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.33 sec)mysql> select * from tb_user; ---- ----------- ---------- ----- | id | user_name | password | age | ---- ----------- ---------- ----- | 1 | 李白 | 123454 | 23 || 2 | 杜甫 | 234234 | 23 | ---- ----------- ---------- ----- 2 rows in set (0.00 sec)
該工具可根據MySQL中的表(tb_user)自動創(chuàng)建實體類、MyBatis映射文件以及Dao接口
參考博文:http://blog.csdn.net/zhshulin/article/details/23912615
紅色部分為自動生成的文件,UserMaping.xml里各種包路徑,要修改成自己的,尤其是namespace,要關聯(lián)為創(chuàng)建的UserDao(因為使用了動態(tài)代理實現)
你可以自己去嘗試自動創(chuàng)建,下面給出這3個文件(注釋是我加的)。
User.java
package com.jxust.ssm.pojo;/** * 用戶實體類 * 對應數據表tb_user * @author Peng * @Date2016年12月10日下午10:30:16 */public class User { private Integer id; private String userName; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName == null ? null : userName.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return 'User [id=' id ', userName=' userName ', password=' password ', age=' age ']'; } }
UserDao.java
package com.jxust.ssm.dao;import com.jxust.ssm.pojo.User;/** * User類Dao層接口 * * 之前我們會在dao層自己手動實現dao層然后自動注入SqlSessionTemplate 實例 * 來調用具體的方法 比如 insert('','') selectOne('','') 等方法 * 其中第一個參數就是映射文件的地址: namespace id 而第二個參數就是傳遞的條件這樣mybatis * 就會按照我們傳遞的這兩個參數找到具體的映射文件進行解析查詢。 * 而這里使用動態(tài)代理就省去了我們實現dao接口的這一步驟,而是由spring提我們實現了 * @author Peng * @Date2016年12月10日下午10:31:27 */public interface UserDao { int deleteByPrimaryKey(Integer id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record);}
自動創(chuàng)建的文件中,有增刪改查的各種方法,動態(tài)SQL等,如果你想了解詳細的使用方法:http://blog.csdn.net/peng_hong_fu/article/details/53235271
UserMapper.xml
<?xml version='1.0' encoding='UTF-8' ?><!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-mapper.dtd' ><!-- namespace的值就是dao接口的完整路徑,就這個demo而言namespace 就是userDao.java的完整路徑--><mapper namespace='com.jxust.ssm.dao.UserDao'> <resultMap id='BaseResultMap' type='com.jxust.ssm.pojo.User'> <id column='id' property='id' jdbcType='INTEGER' /> <result column='user_name' property='userName' jdbcType='VARCHAR' /> <result column='password' property='password' jdbcType='VARCHAR' /> <result column='age' property='age' jdbcType='INTEGER' /> </resultMap> <sql id='Base_Column_List'> id, user_name, password, age </sql> <select id='selectByPrimaryKey' resultMap='BaseResultMap' parameterType='java.lang.Integer'> select <include refid='Base_Column_List' /> from tb_user where id = #{id,jdbcType=INTEGER} </select> <delete id='deleteByPrimaryKey' parameterType='java.lang.Integer'> delete from tb_user where id = #{id,jdbcType=INTEGER} </delete> <insert id='insert' parameterType='com.jxust.ssm.pojo.User'> insert into tb_user (id, user_name, password, age) values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}) </insert> <insert id='insertSelective' parameterType='com.jxust.ssm.pojo.User'> insert into tb_user <trim prefix='(' suffix=')' suffixOverrides=','> <if test='id != null'> id, </if> <if test='userName != null'> user_name, </if> <if test='password != null'> password, </if> <if test='age != null'> age, </if> </trim> <trim prefix='values (' suffix=')' suffixOverrides=','> <if test='id != null'> #{id,jdbcType=INTEGER}, </if> <if test='userName != null'> #{userName,jdbcType=VARCHAR}, </if> <if test='password != null'> #{password,jdbcType=VARCHAR}, </if> <if test='age != null'> #{age,jdbcType=INTEGER}, </if> </trim> </insert> <update id='updateByPrimaryKeySelective' parameterType='com.jxust.ssm.pojo.User'> update tb_user <set> <if test='userName != null'> user_name = #{userName,jdbcType=VARCHAR}, </if> <if test='password != null'> password = #{password,jdbcType=VARCHAR}, </if> <if test='age != null'> age = #{age,jdbcType=INTEGER}, </if> </set> where id = #{id,jdbcType=INTEGER} </update> <update id='updateByPrimaryKey' parameterType='com.jxust.ssm.pojo.User'> update tb_user set user_name = #{userName,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, age = #{age,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER} </update></mapper>
UserService.java
package com.jxust.ssm.service;import com.jxust.ssm.pojo.User;/** * Service層接口 * @author Peng * @Date2016年12月11日下午7:05:05 */public interface UserService { //根據id查找 public User getUserById(Integer userid); //添加一條數據 public int insert(User user);}
UserServiceImpl.java
package com.jxust.ssm.service.impl;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.jxust.ssm.dao.UserDao;import com.jxust.ssm.pojo.User;import com.jxust.ssm.service.UserService;/** * userService 接口的實現類 * * @author Peng * @Date2016年12月11日上午11:50:01 */@Transactional@Service('userService')public class UserServiceImpl implements UserService { /** * 因為沒有在spring的文件中顯式的聲明userService實現類,直接通過getBean得到 userService 會找不到 * 需要顯式配置 @Service ('userService'),指定bean的名稱 * 相當與<bean id='userService' class='com.jxust.ssm.service.impl.UserServiceImpl'></bean> */ @Resource private UserDao userDao; public User getUserById(Integer userid) { return this.userDao.selectByPrimaryKey(userid); } @Override public int insert(User user) { return this.userDao.insert(user); }}
使用Junit測試,TestMyBatis為使用 spring 的測試方法,TestMyBatis2為不使用 spring 的普通方法
TestMyBatis.java
package com.test;import javax.annotation.Resource;import org.apache.log4j.Logger;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.alibaba.fastjson.JSON;import com.jxust.ssm.pojo.User;import com.jxust.ssm.service.UserService;@RunWith(SpringJUnit4ClassRunner.class) // 表示繼承了SpringJUnit4ClassRunner類@ContextConfiguration(locations = { 'classpath:spring-mybatis.xml' })/** * 測試spring整合mybatis spring方式 * * @author Peng * @Date2016年12月11日上午11:52:56 */public class TestMyBatis { private static Logger logger = Logger.getLogger(TestMyBatis.class); @Resource private UserService userService = null; /** * 測試查詢 */ @Test public void test1() { User user = userService.getUserById(2); logger.info('值:' user.getUserName()); logger.info(JSON.toJSONString(user)); } /** * 測試添加 */ @Test public void test2() { User user = new User(); user.setUserName('杜甫3'); user.setPassword('234234'); user.setAge(23); int count = userService.insert(user); logger.info('count:' count); }}
TestMyBatis2.java
package com.test;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.jxust.ssm.pojo.User;import com.jxust.ssm.service.UserService;/** * 測試spring整合mybatis 普通方式 * @author Peng * @Date2016年12月11日上午11:52:11 */public class TestMyBatis2 { private ApplicationContext ac = null; private UserService userService = null; @Before public void before() { ac = new ClassPathXmlApplicationContext('classpath:spring-mybatis.xml'); userService = (UserService) ac.getBean('userService'); } /** * 測試查詢 */ @Test public void test1() { User user = userService.getUserById(2); System.out.println(user.toString()); } /** * 測試添加 */ @Test public void test2() { User user = new User(); user.setUserName('杜甫'); user.setPassword('234234'); user.setAge(23); int count = userService.insert(user); System.out.println('插入' count '條數據成功'); }}
測試結果:
...[org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring [com.test.TestMyBatis] - 值:杜甫 [com.test.TestMyBatis] - {'age':23,'id':2,'password':'234234','userName':'杜甫'} [org.springframework.context.support.GenericApplicationContext] - Closing org.springframework.context.support.GenericApplicationContext@55d56113: startup date [Sun Dec 11 20:23:43 CST 2016]; root of context hierarchy
正確輸入結果,則測試成功!
項目結構為:
SpringMVC 涉及到視圖了,需要配置web.xml文件
和SpringMVC的配置文件了
web.xml
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' id='WebApp_ID' version='3.0'> <!-- 編碼過濾器 --> <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監(jiān)聽器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--Spring MVC 配置servlet --> <servlet> <servlet-name>springDispatcherServlet</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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>
使用 Eclipse在 web.xml 文件中,可以使用
Alt /
快速創(chuàng)建ContextLoaderListener
和DispatcherServlet
兩個過濾器配置
springmvc.xml
springmvc.xml
<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:context='http://www.springframework.org/schema/context' xmlns:mvc='http://www.springframework.org/schema/mvc' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd'> <!-- 自動掃描該包 @controller注解的類--> <context:component-scan base-package='com.jxust.ssm.controller'/> <!-- 靜態(tài)資源處理 --> <mvc:default-servlet-handler/> <!--自動注冊 RequestMappingHandlerMapping、RequestMappingHandlerAdapter 等bean --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 定義跳轉的文件的前后綴 ,視圖模式配置--> <bean class='org.springframework.web.servlet.view.InternalResourceViewResolver'> <property name='prefix' value='/WEB-INF/views/' /> <property name='suffix' value='.jsp' /> </bean> </beans>
spring配置文件和springmvc配置文件的兩個自動掃描的路徑范圍,最好不要重復,使用
<context:exclude-filter/>
和<context:include-filter/>
指定不掃描和掃描的條件
UserController.java
package com.jxust.ssm.controller;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import com.jxust.ssm.pojo.User;import com.jxust.ssm.service.UserService;@Controllerpublic class UserController { /** * 使用@Autowired也可以,@Autowired默認按類型裝配 * @Resource 默認按名稱裝配,當找不到與名稱匹配的bean才會按類型裝配。 */ @Resource private UserService userService; /** * 測試查詢 * * @param id * @param model * @return */ @RequestMapping('/showUser') public String testtoshowUser(@RequestParam(value = 'id') Integer id, Model model) { System.out.println('id:' id); User user = userService.getUserById(id); model.addAttribute('user', user); return 'showUser'; } /** * 測試添加數據 * * @param id * @param model * @return */ @RequestMapping('/insertUser') public String testinsertUser() { User user = new User(); user.setUserName('李清照'); user.setPassword('3232322'); user.setAge(22); int count = userService.insert(user); System.out.println('插入' count '條數據成功'); return 'showUser'; }}
index.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>index.jsp</title></head><body> <a href='showUser?id=2'>ShowUser page</a><br> <a href='insertUser'>insertUser </a></body></html>
showUser.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> id:${user.id} <br> userName: ${user.userName} <br> password: ${user.password} <br> age: ${user.age} <br></body></html>
JSP頁面寫完,就可以發(fā)布了
Maven 項目就是小,沒有jar包,只有 30k