ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.htmlhtml
接下講解一個插入語句的流程和順帶講解freemarker+jsp視圖的整合java
初次接觸,若是有錯誤請評論指出,謝謝mysql
表單界面:add.jspweb
<%@ 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.xmlspring
<?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>
業務類的配置,啓動註解和設置註解所在的包,這樣在啓動時就會去讀取所在的路徑。sql
下半部分的配置是關於freemarker和jsp的整合數據庫
freemarker,第一部分是啓動freemarker和存放的路徑,第二是解析apache
springmvc會根據返回的設置的優先級,根據返回的字符串和配置合成對應的視圖名,而後去匹配對應的視圖,在對應的文件夾下去匹配spring-mvc
能夠設置jsp仍是freemarker仍是其餘的視圖類型的匹配的優先級服務器
整合freemarker須要在pom.xml添加着2個jar包
<!-- freemarker --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.25-incubating</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的簡單的插入語句的例子大概就這麼多,若是出錯請勿噴我,本人也是剛學