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

 
 
 
 
 

(原创)ssm sql 例子(freemarker+jsp)的更多相关文章

  1. SSM的例子-参考

    ssm的例子:http://blog.csdn.net/double030/article/details/63683613

  2. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  3. 【原创】SQL常用函数

    --值类型转换 ) --时间差 ,GETDATE()),GETDATE()) --加减指定时间 ,GETDATE()) --获取系统日期 select GETDATE() --生成不重复Id sele ...

  4. springmvc配置多视图 - tiles, velocity, freeMarker, jsp

    转自: http://www.cnblogs.com/shanheyongmu/p/5684595.html <!-- Velocity --> <bean id="vel ...

  5. JavaWeb 例子 JDBC+JSP登陆注册留言板

    注册页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...

  6. Spring Mvc配置多视图 - tiles, velocity, freeMarker, jsp

    <!-- Velocity --> <bean id="velocityViewResolver" class="org.springframework ...

  7. springboot-10-前端页面整合, thymeleaf, freemarker, jsp 模板使用

    springboot 中不建议使用jsp作为页面展示, 怎么使用可以看: http://412887952-qq-com.iteye.com/blog/2292471 关于什么是thymeleaf, ...

  8. 关于SSM框架项目中jsp页面EL表达式使用的一些疑问(一)

    问题 ssm框架整合中,jsp页面中EL表达式所引用的对象“page”可以在controller中使用mav.addObject(“page”,pag )进行添加,如果省略mav.addObject( ...

  9. 一个例子说明Jsp三大重要内置对象的生命周期

    此处Jsp的三大内置对象指:request,session以及application.他们共有的方法:setAttribute,getAttribute,方法名和方法作用都是相同的,但是作用范围不一样 ...

随机推荐

  1. Jquery 循环map的用法

    $.each(map,function(key,values){console.log(key);$(values).each(function(){console.log("\t" ...

  2. JDBC判断数据库是否插入成功

    package com.xujianyou; import java.sql.*; public class TestConnect { public static void main(String ...

  3. javascript 基础

    javascript概述: javascript历史: * 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEas ...

  4. 【原】小玩node+express爬虫-1

    最近开始重新学习node.js,之前学的都忘了.所以准备重新学一下,那么,先从一个简单的爬虫开始吧. 什么是爬虫 百度百科的解释: 爬虫即网络爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部 ...

  5. Base64编码【转】

    转http://www.cnblogs.com/luguo3000/p/3940197.html 开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了.实际上Base64已经简单到不能 ...

  6. vue自定义指令

    Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...

  7. Xcode同一个Workspace中两个工程依赖于Undefined Symbol Error

    Workspace中包含两个工程A和B: A是dylib工程,引用了另一个动态库C,B需要链接(依赖)A库.当编译B时,会先编译A,然后把A生成的dylib拷贝到B的生成目录中.如果要运行B的话需要把 ...

  8. 2.1、Hibernate多表操作--一对多、多对一、多对多。

    一.什么是一对一.一对多.多对一及多对多关系(以简单的学生和老师的关系为例来说): 1.一对一:学生具有学号和姓名(假定没有同名的学生)这两个属性,那么我知道了学生的学号也就能找到对应的学生姓名,如果 ...

  9. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  10. 在布局文件中使用Fragment的步骤

    为了在Activity布局文件中使用Fragment我们需要四个步骤. 1.定义一个Activity,他继承android.support.v4.app.FragmentActivity,下面是关键代 ...