(原創)ssm sql 例子(freemarker+jsp)

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的簡單的插入語句的例子大概就這麼多,若是出錯請勿噴我,本人也是剛學

相關文章
相關標籤/搜索