ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html 接下講解一個插入語句的流程和順帶講解freemarker+jsp視圖的整合 初次接觸,如果有錯誤請評論指出,謝謝 表單界面:add.jsp spring-mvc.xml 業務類的配置 ...
ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html
接下講解一個插入語句的流程和順帶講解freemarker+jsp視圖的整合
初次接觸,如果有錯誤請評論指出,謝謝
表單界面:add.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">
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<!-- springmvc跟struts一樣,只要name一樣就會自動填充成javabean -->
<form action="/maven-hello-exam/addTest/add">
<input type="text" name="id">
<input type="text" name="name">
<input type="text" name="age">
<input type="submit">
</form>
<body>
</body>
</html>
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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <!-- 啟用spring mvc 註解 --> <context:annotation-config /> <!-- 設置使用註解的類所在的jar包 --> <context:component-scan base-package="com.huawei.controller" /> <!-- 完成請求和註解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 對轉向頁面的路徑解析。prefix:首碼, suffix:尾碼 ,jsp部分--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp" /> <!-- freemarker -->
<!-- freemarker --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/views/"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true"/> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> </bean> </beans>
業務類的配置,啟動註解和設置註解所在的包,這樣在啟動時就會去讀取所在的路徑。
下半部分的配置是關於freemarker和jsp的整合
freemarker,第一部分是啟動freemarker和存放的路徑,第二是解析
springmvc會根據返回的設置的優先順序,根據返回的字元串和配置合成對應的視圖名,然後去匹配對應的視圖,在對應的文件夾下去匹配
可以設置jsp還是freemarker還是其他的視圖類型的匹配的優先順序
整合freemarker需要在pom.xml添加著2個jar包
<!-- freemarker --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>com.sun.phobos</groupId> <artifactId>freemarker</artifactId> <version>2.3.12</version> </dependency>
實體
package bean; /** * person 實體 * @author Administrator * */ public class Person { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + "]"; } }
根據springmvc的註解配置會來到對應的業務類
package com.huawei.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.huawei.service.impl.addTestService; import bean.Person; /** * 插入一條數據 * 業務層 * @author Administrator * */ @Controller @RequestMapping("/addTest") public class addTest { @Autowired @Qualifier("testService") private addTestService testService; //@Autowired自動依賴註入,項目啟動便會自動執行,所以就會自動實例化addTestService /* @Autowired public void setTestService(addTestService testService) { this.testService = testService; } public addTestService getTestService() { return testService; }*/ /** * * @param person springmvc根據name自動填充成實體 * @return */ @RequestMapping(value="/add") public String add(Person person){ System.out.println("進來"+person.getAge()); //sql的處理 boolean b=testService.add(person); System.out.println("add:"+b); if(b) return "chenggon"; else return "shibai"; } }
@Controller這個註解標註了這個類是springmvc的處理類,相當於struts的action
@RequestMapping請求映射的路徑
springmvc跟struts一樣,會根據名字進行映射填充成實體進來,不需要任何的配置
testService.add(person);做了一個sql的請求,接下來詳細的講解這部分
這個類的上半部分還用了2個註解:
@Autowired 這個是自動依賴註入,他的作用相當於寫了一個set方法。在伺服器啟動時邊會由容器自動執行,實例化這個欄位
@Qualifier("testService") 這個註解的作用是網上說的我暈乎乎的,他大概的作用是說明他要實例化那個bean,跟@Service對應的,會把標註了@Service這個註解的名字的類實例化給這個欄位
大概就是這樣子,都是通過ioc容器進行一個依賴註入實例化這個欄位
所以在請求進入這個處理類時,該欄位就已經被實例化好了
接著通過調用該類的方法來到該類的數據訪問層
package com.huawei.service.impl; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.huawei.dao.PersonMapper; import bean.Person; /** * 資料庫處理層 * @author Administrator * */ @Service("testService") public class addTestService { /** PersonMapper介面和PersonMapper.xml相互映射的,分別對應sql語句 */ @Autowired private PersonMapper personMapper; /** * 執行sql * 添加一條數據 * @param person 業務傳遞進來的javabean * @return */ public boolean add(Person person){ System.out.println("personservice進來了"+person.getAge()); //執行介面中的方法 return personMapper.addTest(person); } }
@Service("testService")這個和上面那個是對應的
PersonMapper 這是和mybatis的映射配置文件對對應的,他只是一個介面,具體的實現用框架去做,只需要配置對應的xml和sql語句,還有在介面中提供對應的方法進行調用就好
PersonMapper
package com.huawei.dao; import java.util.List; import bean.Person; public interface PersonMapper { /** * 查詢所有 * @return */ List<Person> queryAll(); /** * 添加測試 * @param person */ boolean addTest(Person person); }
PersonMapper.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"> <mapper namespace="com.huawei.dao.PersonMapper"> <!-- 查詢所有person --> <select id="queryAll" resultType="Person" > select * from person </select> <insert id="addTest" parameterType="Person" flushCache="true"> INSERT INTO `person`(`id`,`name`,`age`) VALUES (#{id},#{name},#{age}); </insert> </mapper>
到這裡就大概這樣。註意幾個註解的作用
至於@Service("testService")這個註解的詳細作用我也不是很清除,還沒做一個更深入的瞭解,但是在spring.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"> <!-- 自動註入 --> <context:component-scan base-package="com.huawei.service.impl" /> <!-- 載入properties文件 --> <!-- <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:mysqldb.properties</value> </list> </property> </bean> --> </beans>
配置了該註解所在的包,通過配置文件去讀取該路徑下的類進行一個自動的註入,所以在業務類中才能進行一個實例化,在測試的時候我由於少了這幾個依賴註入所以
一直會包一個空指針的錯誤
還有關於personMapper的類和xml的映射關係,其實在配置文件中就可以發現
mybatis-spring.xml中有這一段
<!-- Mybatis文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="dataSource" /> <!-- 映射文件路徑 --> <!-- <property name="mapperLocations" value="com/huawei/mapping/*.xml" />--> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.huawei.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean>
配置了sql語句的配置文件和介面類所在的包,詳細的映射在personMapper.xml中
<mapper namespace="com.huawei.dao.PersonMapper">
描述了該語句的介面在哪裡。
一個ssm的簡單的插入語句的例子大概就這麼多,如果出錯請勿噴我,本人也是剛學