寫在前面的話:現(xiàn)在是北京時間2016年11月2日凌晨1點10分18秒,我在這里寫下這篇博客,希望能幫到有需要的朋友,由于個人水平有限,有不正確的地方還請各位多多指教,不甚感激!
前期工作準備
1、軟件準備
JDK:1.7
IDE:Eclipse mars
Spring:4.3.0
Spring Mvc:4.3.0
MyBatis:3.4.0
數(shù)據(jù)庫:mysql-5.6.24
2、硬件準備:
本尊(全球限量一個,產地:貴州凱里,當前版本:23.0,型號:男),華碩筆記本一臺,好視力臺燈一臺,椅子一張。
正式開始配置
本來想一邊講解配置過程,一邊創(chuàng)建目錄,但是這樣感覺不是很清晰,所以我干脆先把工程結構貼出來,方便大家對整個項目的結構有個大概了解,小小的運用了先全局后部分的哲學思想,哈哈??矗@就是我們要完成的工程圖
看著好復雜的樣子,不過不要害怕,作為一名合格的程序員就應該有跟bug革命到底的精神,下面我們來開始配置項目。
1.配置數(shù)據(jù)庫
右鍵項目新建一個config源文件夾,用來存放我們的各種配置文件。然后在config下新建文件jdbc.properties,這個文件用來配置數(shù)據(jù)庫信息,內容如下:
- #MySql 數(shù)據(jù)庫驅動
- jdbc.driver=com.mysql.jdbc.Driver
- #jdbc:mysql://連接地址:端口號(默認3306)/數(shù)據(jù)庫名
- jdbc.url=jdbc:mysql://127.0.0.1:3306/spring
- #用戶名
- jdbc.username=root
- #密碼
- jdbc.password=123456
- #連接池初始化連接
- jdbc.initialSize=0
- #連接池最大連接數(shù)
- jdbc.maxActive=20
- #連接池最大空閑連接
- jdbc.maxIdle=20
- #連接池最小空閑連接
- jdbc.minIdle=1
- #等待超時
- jdbc.maxWait=60000</span>
代碼都有注釋,不再累述。
2.配置日志log4j
在項目下新建文件夾logs,日志文件將往這里面寫;同樣在config下新建文件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.PatternLayout
- log4j.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 = 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</span>
3.spring與mybatis的結合(主角登場,鼓掌)在config目錄下新建一個xml文件,命名為spring-mybatis.xml,內容如下
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
- xmlns:cache="http://www.springframework.org/schema/cache"
- xsi:schemaLocation="
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd
- http://www.springframework.org/schema/jdbc
- http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
-
- <!-- 自動掃描 -->
- <context:component-scan base-package="com.pyx" />
- <!-- 引入配置文件 -->
- <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="${jdbc.driver}" />
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- <!-- 初始化連接大小 -->
- <property name="initialSize" value="${jdbc.initialSize}"></property>
- <!-- 連接池最大數(shù)量 -->
- <property name="maxActive" value="${jdbc.maxActive}"></property>
- <!-- 連接池最大空閑 -->
- <property name="maxIdle" value="${jdbc.maxIdle}"></property>
- <!-- 連接池最小空閑 -->
- <property name="minIdle" value="${jdbc.minIdle}"></property>
- <!-- 獲取連接最大等待時間 -->
- <property name="maxWait" value="${jdbc.maxWait}"></property>
- </bean>
-
- <!-- 配置spring與mybatis結合 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <!-- 自動掃描mapping.xml文件 -->
- <property name="mapperLocations" value="classpath:com/pyx/mapper/*.xml"></property>
- </bean>
-
- <!-- DAO接口所在包名,Spring會自動查找其下的類 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.pyx.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"/>
- </beans>
為了測試,只配置了最基本的功能,你可以根據(jù)自己的項目需求進行配置。
4.測試spring與mybatis的整合
在src源文件夾下新建以下包
看文件名應該能猜出個大概,這些包類有哪些功能,你應該明白,如果不明白,建議你還是再學學框架吧。
在數(shù)據(jù)庫新建一張user表用于測試,我的表結構如下:
表建好后根據(jù)你的表字段就可以編寫dao,mapper和Pojo了,這里介紹一個自動生成mybatis mapper的jar,參考下面的博文:
SSM框架——使用MyBatis Generator自動創(chuàng)建代碼
新手不建議使用,還是自己手寫比較好,把生成的文件復制到項目中,然后開始編寫測試代碼。新建test源文件夾,編寫一個測試類。
- package com.pyx.test;
-
- import javax.annotation.Resource;
-
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
- import com.pyx.pojo.User;
- import com.pyx.service.UserService;
-
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
-
- public class TestMyBatis {
-
- @Resource
- private UserService userService = null;
-
-
- @Test
- public void mytest() {
- User user = userService.getUserById(1);
- System.out.println("查詢結果:"+user.getUsername());
- }
- }
這里有幾點要注意:
1,因為用了JUnit4插件測試,所以務必確認你的項目中已經加入JUnit4類庫,否則會報找不到mytest方法的錯誤。
2, <!-- spring和MyBatis的整合配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自動掃描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/pyx/mapper/*.xml"></property>
</bean>
這里的mapperLocations一定要寫對,我就是因為mapper后面少了一個“/”,所以一直在報找補到mapper方法的錯誤,還有如果你是用自動生成工具生成的代碼,那請你一定要留意mapper文件中的包名是否正確,其他兩個pojo和dao如果包名不對會立即顯示錯誤的,但是mapper就不會,所以如果tomcat啟動異常,一定要查看這個文件。
接下來開始測試,選擇mytest方法右鍵調試方式->JUnit4測試,如果控制臺輸出如下結果,表示spring與mybatis已經整合成功,如果報錯,根據(jù)bug信息慢慢調試吧。
5.整合spring mvc
config下新建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-3.1.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.1.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
- <!-- 自動掃描該包,使SpringMVC認為包下用了@controller注解的類是控制器 -->
- <context:component-scan base-package="com.pyx.controller" />
- <!-- 啟動SpringMVC的注解功能,完成請求和注解POJO的映射 -->
- <bean
- class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
- </bean>
- <!-- 定義跳轉的文件的前后綴 ,視圖模式配置-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
-
- <!-- 配置返回Json數(shù)據(jù) -->
- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
- <property name="messageConverters">
- <list>
- <ref bean="mappingJacksonHttpMessageConverter"/>
- </list>
- </property>
- </bean>
- <bean id="mappingJacksonHttpMessageConverter"
- class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <value>text/html;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- <!-- 特別重要,不配置該項,使用ajax請求時會報406錯誤 -->
- <mvc:annotation-driven></mvc:annotation-driven>
-
-
- </beans>
配置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>Spring Mybatis</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監(jiān)聽器 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</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>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
-
- <!-- 配置過濾靜態(tài)文件,如js,css,image等,方法不止這一種,自己百度有很多其他更好的方法 -->
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>/static/*</url-pattern>
- </servlet-mapping>
-
- <welcome-file-list>
- <welcome-file>/index.jsp</welcome-file>
- </welcome-file-list>
-
- </web-app>
在controller包下建一個控制器,就叫UserController吧,內容如下
- package com.pyx.controller;
-
- import java.util.Date;
-
- 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 org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import com.pyx.pojo.User;
- import com.pyx.service.UserService;
-
- @Controller
- @RequestMapping("/user")
- public class UserController {
-
- @Resource
- private UserService userService;
-
-
- //查詢用戶
- @RequestMapping("/list")
- public String list(HttpServletRequest request,Model model){
- int userId = Integer.parseInt(request.getParameter("id"));
- User user = this.userService.getUserById(userId);
- model.addAttribute("user", user);
- return "user";
- }
-
- //更新用戶
- @RequestMapping("/update")
- public String update(HttpServletRequest request,Model model){
- int userId = Integer.parseInt(request.getParameter("id"));
- User user = new User();
- user.setSid(userId);
- user.setUsername("隔壁老王");
- user.setPassword("258258");
- int status = this.userService.updateUserById(user);
- model.addAttribute("msg", status);
- return "ok";
- }
-
- //添加用戶
- @RequestMapping("/add")
- public String addUser(HttpServletRequest request,Model model) {
- User user = new User();
- //SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy-mm-dd");
- Date birth=null;
- user.setUsername("panyx");
- user.setPassword("258258");
- user.setBirth(birth);
- user.setEmail("ape010@163.com");
- user.setSex("女");
- int status = this.userService.insertUser(user);
- model.addAttribute("msg", status);
- return "add-ok";
-
- }
-
- //ajax測試頁面
- @RequestMapping("/test")
- public String mytest(Model model){
- return "test";
- }
-
- //測試ajax請求,返回json數(shù)據(jù)
- @RequestMapping(value="jsontest", method=RequestMethod.POST)
- @ResponseBody
- public User jsonTest(Model model){
- User user = this.userService.getUserById(1);
- return user;
- }
- }
/WEB-INF
/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>
6.測試spring mvc
啟動tomcat,瀏覽器輸入http://localhost:8080/你的項目名/user/list?id=1
如果能出現(xiàn)上圖的效果就說明我們的框架整合完美結束了,但在實際開發(fā)中,肯定會用到ajax,那我們就再配置一下ajax吧,其實在spring-mvc.xml中我們已經做了返回json數(shù)據(jù)的配置,只要把jackson.jar包引進去就可以了。我們再寫一個測試頁面,用來測試ajax,test.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>ajax測試</title>
- <script src="${pageContext.request.contextPath}/static/js/jquery.min.js"></script>
- </head>
- <body>
- <p>
- <button id="testbtn" class="" >找老王</button>
- </p>
- <script>
- $(function(){
- $("#testbtn").bind("click",function(){
- $.ajax({
- url:"http://localhost:8080/myspring/user/jsontest",
- type:"post",
- async:true,
- data:{},
- dataType:"json",
- success:function(data){
- console.log(data);
- }
-
- })
- });
- })
- </script>
- </body>
- </html>
方法在UserController中都已經寫好了,在瀏覽器中輸入:http://localhost:8080/myspring/user/test,
到此,spring,spring-mvc,mybatis完美的融合在了一起!
特別感謝:
參考了博主shu_lin的文章,SSM框架——詳細整合教程(Spring+SpringMVC+MyBatis)
SSM框架——使用MyBatis Generator自動創(chuàng)建代碼
工程所需jar包下載:spring-4.3.0和mybatis-3.4整合所需jar包
提取碼:vsk7