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>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的简单的插入语句的例子大概就这么多,如果出错请勿喷我,本人也是刚学