網上不少整合SSM博客文章並不能讓初探ssm的同窗思路徹底的清晰,能夠試着關掉整合教程,搖兩下頭骨,哈一大口氣,就在萬事具有的時候,開整,這個時候你可能思路全無 ~中招了咩~ ,還有一些同窗依舊在使用eclipse或者Myeclipse開發,我想對這些朋友說IDEA 的編譯速度很快,人生苦短,來不及解釋了,直接上手idea吧。這篇文章每一步搭建過程都測試過了,應該不會有什麼差錯。本文章還有個比較優秀的特色,就是idea的使用,基本上關於idea的操做都算是比較詳細的,因此不用太擔憂不會擼idea!最後,本文章旨在清晰地整合各個框架之間的流程與思路。javascript
相信有不少小夥伴都是學了SSM框架,並且學的時候應該是用eclipse或者Myeclipse開發的,隨着idea崛起,實力碾壓eclipse,IDEA 的編譯速度很快,一般比ec快2倍!外加喪心病狂的代碼提示引發程序員的尖叫!固然,我不是說eclipse很差,只是idea更加便捷,更加便於開發,這是事實。我相信不少小夥伴都是從eclipse轉向idea(包括我,廣泛一開始上手不習慣idea,時刻保持一顆畏懼敬畏的心,生怕敲不出一行靚麗的Hello Word(大家都是大神,記得當時的我一直syso,敲不出一行輸出語句QAQ),做爲過來人,我告訴你們,這些都是不必的擔憂,你只要記住,具(工具idea)在我手中,碼(代碼)就在我手中,管他三七四十九呢,拿起idea就是一頓擼碼,我就是醬紫的,因此呢纔有了這篇idea版的SSM框架整合,否則你覺得怎麼來的? @[toc]css
整合說明:SSM整合可使用多種方式,我們選擇XML + 註解的方式,不要以爲不妥,這樣其實最便捷-html
一、先搭建整合的環境前端
<p> </p> 二、先把Spring的配置搭建完成 <p> </p> 三、再使用Spring整合SpringMVC框架 <p> </p> 四、以後使用Spring整合MyBatis框架 <p> </p> 五、最後spring整合mybatis框架配置事務(Spring的聲明式事務管理)java
複製在MySQL中運行便可:mysql
create database ssm; use ssm; create table account ( id int primary key auto_increment, name varchar(50), money double );程序員
具體的使用idea建立maven,請看這篇使用IntelliJ IDEA建立第一個Mawen項目web
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <spring.version>5.0.2.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <mysql.version>5.1.6</mysql.version> <mybatis.version>3.4.5</mybatis.version> </properties> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</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-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</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>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <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>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 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies>
在這裏,我提醒一下,可能各位不熟悉idea快捷鍵,就好比說getset方法搞不出來哈哈,就這篇整合SSM的文章所用到的idea快捷鍵能夠參考下面藍色字體文章(點擊藍色字體便可),熟悉idea的哥們能夠當我沒說,當我在放pi(快快快捂住鼻子....) IDEA快速實現接口、查找接口的實現、getSet方法快速生成等等經常使用快捷鍵spring
package com.gx.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } }
在dao包中編寫dao接口IAccountdaosql
package com.gx.dao; import com.gx.domain.Account; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; public interface IAccountdao { public List<Account> findAll(); public void saveAccount(Account account); }
service接口:
package com.gx.service; import com.gx.domain.Account; import java.util.List; public interface AccountService { // 查詢全部帳戶 public List<Account> findAll(); // 保存賬戶信息 public void saveAccount(Account account); }
service接口實現類:
package com.gx.service.Impl; import com.gx.domain.Account; import com.gx.service.AccountService; import org.springframework.stereotype.Service; import java.util.List; @Service("accountService") public class AccountServiceImpl implements AccountService { @Override public List<Account> findAll() { System.out.println("Service業務層:查詢全部帳戶..."); return null; } @Override public void saveAccount(Account account) { System.out.println("Service業務層:保存賬戶..."); } }
到這裏,整合環境就搭建好了效果以下,接下來搭建Spring的配置!
搭建和測試Spring的開發環境
建立一個叫resources的資源文件目錄,用來管理放置XML配置文件
在resources資源文件中建立applicationContext.xml的配置文件,編寫具體的配置信息 applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--開啓註解的掃描,但願處理service和dao,controller不須要Spring框架去處理--> <context:component-scan base-package="com.gx" > <!--配置哪些註解不掃描--> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> </beans>
一、建立Test包 二、在test包中建立一個叫TestSpring的class類,具體的內容以下:
package com.gx.test; import com.gx.domain.Account; import com.gx.service.AccountService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring { @Test public void run1(){ ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); AccountService as = (AccountService) ac.getBean("accountService"); as.findAll(); } }
運行以下效果,說明搭建Spring的開發環境成功! 到這裏,Spring的開發環境成功!接下來搭建SpringMVC框架環境。
搭建和測試SpringMVC的開發環境
<!--配置前端控制器--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加載springmvc.xml配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!--啓動服務器,建立該servlet--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!--解決中文亂碼的過濾器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <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> <!--配置前端控制器--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加載springmvc.xml配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!--啓動服務器,建立該servlet--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--解決中文亂碼的過濾器--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
一樣是在resources資源文件夾中建立springmvc.xml配置文件 springmvc.xml的配置文件內容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--開啓註解掃描,只掃描Controller註解--> <context:component-scan base-package="com.gx"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--配置的視圖解析器對象--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!--過濾靜態資源--> <mvc:resources location="/css" mapping="/css/**"/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <!--開啓SpringMVC註解的支持--> <mvc:annotation-driven/> </beans>
編寫index.jsp頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <a href="account/findAll">測試SpringMVC查詢</a> </body> </html>
在controller層中的AccountController的class類中編寫代碼
package com.gx.controller; import com.gx.domain.Account; import com.gx.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller public class AccountController { @RequestMapping("/account/findAll") public String findAll(){ System.out.println("Controller表現層:查詢全部帳戶..."); return "list"; //在視圖解析器中配置了前綴後綴 } }
這時候就要建立controller跳轉的list.jsp頁面了: list.jsp頁面建立好了,編寫一下內容,只是看是否跳轉成功,輸出一句話便可:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: Bule Date: 2019/9/2 Time: 7:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h2>查詢全部的帳戶</h2> </body> </html>
到這裏,spring、springmvc的開發環境就都搭建好了,不容易啊,都堅持看到這裏了,給你點個贊,接下來是整合spring和springmvc了!
整合以前,想想,怎樣去整合Spring、SpringMVC框架呢,怎麼纔算是整合成功了呢,帶着問題,一塊兒來吧!
整合成功的表現:在controller(SpringMVC)中能成功的調用service(Spring)對象中的方法。要想在controller中調用service方法,就要注入service到controller中來,有service對象才能夠調用service方法,方法是這樣沒有錯,可是有一個問題,就是啓動Tomcat以後試想一下,在web.xml中配置有前端控制器,web容器會幫咱們加載springmvc.xml配置文件,在springmvc.xml配置文件中咱們配置狀況是隻掃描controller,別的不掃,而spring.xml文件就從頭至尾沒有執行過,spring中的配置掃描天然也不會去掃描,就至關於沒有將spring交到IOC容器當中去,因此,如今的解決方案就是,在<font color=red>啓動服務器時就加載spring配置文件</font>,怎麼實現呢?這時候<font color=red>監聽器listener</font>就派上用場了,具體實現以下:
在項目啓動的時候,就去加載applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener監聽器(該監聽器只能加載WEB-INF目錄下的applicationContext.xml的配置文件)。要想加載applicationContext.xml的配置文件有兩種方法,第一種(不建議): 第二種(強烈建議):在web.xml中配置加載路徑
<!--配置Spring的監聽器,默認只加載WEB-INF目錄下的applicationContext.xml配置文件--> <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>
至於爲啥強烈建議第二種呢,是由於咱們在整合過程當中會有許多配置文件,咱們自定義一個相似pages資源文件夾專門管理這些配置文件,方便管理,方便維護!!!
這時候,啓動服務器時也會加載spring配置文件了,那麼,咱們能夠在controller中注入service了,因而開始編寫controller代碼:
package com.gx.controller; import com.gx.domain.Account; import com.gx.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller public class AccountController { @Autowired //按類型注入 private AccountService accountService; @RequestMapping("/account/findAll") public String findAll(Model model){ System.out.println("Controller表現層:查詢全部帳戶..."); List<Account> list = accountService.findAll(); return "list"; } }
編寫完成,開始測試,啓動Tomcat,效果 到這裏, 總算是整合完了spring、springmvc,同窗你還能看到這裏,我也挺欣慰的哈哈,手動再給你點個贊,接下來編寫MyBatis環境惹!
一看到Mybatis,就要想到dao,沒錯,MyBatis環境搭建首先是dao,搭建mybatis,以前要編寫mapper映射的配置文件,其實挺麻煩的,因此我選擇使用註解!
package com.gx.dao; import com.gx.domain.Account; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; @Repository //此註解表明這是一個持久層,用法相似@controller、@service public interface IAccountdao { @Select("select * from account") public List<Account> findAll(); @Insert("insert into account (name,money) value(#{name},#{money})") public void saveAccount(Account account); }
和以前建立配置文件同樣,建立: 編寫:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///ssm"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 使用的是註解 --> <mappers> <!-- <mapper class="com.gx.dao.IAccountdao"/> --> <!-- 該包下全部的dao接口均可以使用 --> <package name="com.gx.dao"/> </mappers> </configuration>
由於我使用的是註解,我以爲仍是有必要提一下如下三種方法:
建立: 編寫:
package com.gx.test; import com.gx.dao.IAccountdao; import com.gx.domain.Account; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class TestMyBatis { @Test public void run1() throws IOException { Account account =new Account(); account.setName("杜永藍"); account.setMoney(200d); // 加載配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); // 建立SqlSessionFactory對象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 建立SqlSession對象 SqlSession session = factory.openSession(); // 獲取到代理對象 IAccountdao dao = session.getMapper(IAccountdao.class); // 保存 dao.saveAccount(account); // 提交事務 session.commit(); // 關閉資源 session.close(); in.close(); } @Test public void run2() throws Exception { InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession session = factory.openSession(); IAccountdao dao = session.getMapper(IAccountdao.class); List<Account> list = dao.findAll(); for (Account account: list ) { System.out.println(account); } session.close(); in.close(); } }
運行測試: 運行效果: 到這裏,mybatis環境搭建算是完成了,,哈哈接下來搭建最後整合spring、mybatis!(估計看到這裏,你也餓了吧)
Spring整合MyBatis框架以前,先想想,怎樣纔算整合成功呢?其實,這和以前的spring整合springMVC的套路差很少,其實就是,Service能成功調用dao對象,可以作查詢操做或者新增數據能存進數據庫。如今spring已是在IOC容器中了,dao是一個接口,能夠經過程序幫這個接口生成代理對象,咱們要是能夠把這個代理對象也放進IOC容器,那麼service就能夠拿到這個對象,以後在service中作一個注入,service從而調用dao代理對象的方法,那麼咱們怎麼去實現dao接口生成的代理對象放入IOC容器呢?其實很簡單,只須要以下操做! 整合目的:把SqlMapConfig.xml配置文件中的內容配置到applicationContext.xml配置文件中
至於爲啥要配池子,我不說你們應該也知道,畢竟各位都是學過ssm的大神了
<!--Spring整合MyBatis框架--> <!--配置鏈接池--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///ssm"/> <property name="user" value="root"/> <property name="password" value="root"/> </bean>
沒配置工廠以前,咱們用Test測試的時候,每次都要先建立工廠,由於工廠可以給咱們建立SqlSession,有了SqlSession就能夠經過SqlSession拿到代理對象。如今咱們直接在applicationContext.xml中配置SqlSessionFactory工廠,這就至關於IOC容器中有了工廠,就能夠去建立SqlSession,進而經過SqlSession拿到代理對象,不必每次測試都去建立工廠。
<!--配置SqlSessionFactory工廠--> <bean id="sqlSessonFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean>
由於工廠有了,SqlSession也有了,那代理誰呢,因此咱們要配置IAccountdao接口所在包,告訴SqlSession去代理接口所在包中的代理,從而存到IOC容器中
<!--配置IAccountdao接口所在包--> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.gx.dao"/> </bean>
其實,上面的操做就是<font color=red>把mybatis中的配置(SqlMapConfig.xml)轉移到spring中去,讓它產生代理並存到IOC容器中</font>!
在AccountServiceImpl實現類中編寫代碼:
package com.gx.service.Impl; import com.gx.dao.IAccountdao; import com.gx.domain.Account; import com.gx.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("accountService") public class AccountServiceImpl implements AccountService { @Autowired private IAccountdao iaccountdao; @Override public List<Account> findAll() { System.out.println("Service業務層:查詢全部帳戶..."); return iaccountdao.findAll(); } @Override public void saveAccount(Account account) { System.out.println("Service業務層:保存賬戶..."); } }
package com.gx.controller; import com.gx.domain.Account; import com.gx.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; @Controller public class AccountController { @Autowired private AccountService accountService; @RequestMapping("/account/findAll") public String findAll(Model model){ //存數據, Model對象 System.out.println("Controller表現層:查詢全部帳戶..."); // 調用service的方法 List<Account> list = accountService.findAll(); model.addAttribute("list",list); return "list"; } }
由於要使用到jstl顯示數據庫數據,因此list.jsp頁面以下:
<%-- Created by IntelliJ IDEA. User: Bule Date: 2019/9/2 Time: 7:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <h2>查詢全部的帳戶</h2> <c:forEach items="${list}" var="account"> ${account.name} </c:forEach> </body> </html>
到這裏,SSM整合就基本完成,各位能夠去打王者樓嘍,咳咳等等...還沒完成,我只是說基本完成。 接下來,spring整合mybatis框架還須要配置事務(Spring的聲明式事務管理),至於爲啥,一張圖告訴你!(哎呀...ai..ai..別打...別打...別打臉...)
細心的小夥伴可能發現了,我在整合spring、mybatis測試的時候(TestMybatis中),新增數據保存的時候手動的提交過事務<font color=red> session.commit()</font>,若是不寫這一句,就會出現數據沒提交的狀況,所以爲了完美的整合ssm,咱們必須配置Spring的聲明式事務管理!
若是對一些execution表達式什麼的不太清除的或者AOP不是特別印象深入,能夠去看看個人這篇文章【Spring框架學習總結二】Spring的AOP通俗理解以及AOP的入門開發
<!--配置Spring框架聲明式事務管理--> <!--配置事務管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!--配置事務通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true"/> <tx:method name="*" isolation="DEFAULT"/> </tx:attributes> </tx:advice> <!--配置AOP加強--> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.gx.service.Impl.*ServiceImpl.*(..))"/> </aop:config>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <a href="account/findAll">測試查詢</a> <h3>測試包</h3> <form action="account/save" method="post"> 姓名:<input type="text" name="name" /><br/> 金額:<input type="text" name="money" /><br/> <input type="submit" value="保存"/><br/> </form> </body> </html>
Service層:在AccountServiceImpl實現類中調用service中的saveAccount(account)方法
@Override public void saveAccount(Account account) { System.out.println("Service業務層:保存賬戶..."); iaccountdao.saveAccount(account); //調用service中的saveAccount(account)方法 }
Controller層代碼:在AccountController類中添加一個保存save的方法
@RequestMapping("/account/save") public void save(Account account, HttpServletRequest request, HttpServletResponse response) throws IOException { accountService.saveAccount(account); response.sendRedirect(request.getContextPath()+"/account/findAll"); return; }
OK ,到這裏,可以堅持到這裏的各位都是人才,說話有好聽,敲的代碼又好看,我超喜歡大家,因此,我要是哪裏寫錯了,歡迎指出,還望不吝賜教!!!
同時附上源碼給各位,畢竟堅持看到最後,也是真的不容易() <font color=red>源碼上傳至:CSDN主頁資源上
考慮到C幣問題,已分享至百度網盤</font>,啥?沒有網盤帳戶?出門右轉,秋名山決鬥...
連接:https://pan.baidu.com/s/1lYtogVNBvK2taR1luDCdoA 提取碼:htov
歡迎各位關注個人公衆號,一塊兒探討技術,嚮往技術,追求技術...