zoukankan      html  css  js  c++  java
  • (原创)ssm sql 例子(freemarker+jsp)

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

     
     
     
     
     
  • 相关阅读:
    signalr推送消息
    WebApi2跨域问题
    iTextSharp生成pdf的一个简单例子
    遇到的错误记录
    AutoMapper用法
    visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决
    visualstudio 2013 mysql entityframework :实体模型无法添加,闪退
    webapi相关知识
    2016年4月14日
    2016年4月13日
  • 原文地址:https://www.cnblogs.com/xiaohuihui96/p/6139002.html
Copyright © 2011-2022 走看看