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

来源:http://www.cnblogs.com/xiaohuihui96/archive/2016/12/06/6139002.html
-Advertisement-
Play Games

ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html 接下講解一個插入語句的流程和順帶講解freemarker+jsp視圖的整合 初次接觸,如果有錯誤請評論指出,謝謝 表單界面:add.jsp spring-mvc.xml 業務類的配置 ...


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>com.sun.phobos</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.12</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的簡單的插入語句的例子大概就這麼多,如果出錯請勿噴我,本人也是剛學

 
 
 
 
 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需要的jar包:xmlpull_1_0_5.jar,xstream-1.4.1.jar) 1、工具類XstreamUtil package com.learn.util; import com.thoughtworks.xstream.XStream; import com.thoughtworks ...
  • pc的demo很多,不記。 移動端做支付的時候要先配置可測試功能變數名稱和授權功能變數名稱,一個在公眾平臺里的微信支付里配置 註意,獲取open的Id的方法需要寫到這個配置好的功能變數名稱下。否則會說功能變數名稱未授權。 還有一個是在微信支付里配置的授權功能變數名稱,在最下麵有個網頁授權,裡面配置你的測試功能變數名稱,然後需要下載一個文件,建議放 ...
  • 很長時間都沒有更新了,最近在補充JavaSE的一些細節部分 關於IO流的一些總結 首先要介紹的是File類,File類用於對文件和目錄的一些操作 1.創建文件CreateNewFile() 2.對文件的信息的獲取getName(),getAbsolutePath() 3.判斷是否是文件isFile( ...
  • 調用requonse.getWriter()方法時可實現文本字元串數據輸出,調用response.getOutputStream()方法可現實位元組流數據的輸出。兩種輸出方式threadlocal模式和osiv模式~~~!!!!threadlocal 是一個局部的線程變數 只是一個map 保存的是線程 ...
  • std::function是可調用對象的包裝器,它最重要的功能是實現延時調用: 由上邊代碼定義std::function<int(int)> fr2,那麼fr2就可以代表返回值和參數表相同的一類函數。可以看出fr2保存了指代的函數,可以在之後的程式過程中調用。這種用法在實際編程中是很常見的。 std ...
  • 1.先將map對象轉成set,然後再轉為迭代器 2.先將map轉為set類型的key值集合,然後轉為迭代器 ...
  • import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOE ...
  • [1]安裝 [2]連接 [3]增刪改查 [4]分散式 [5]狀態 [6]安全 [7]應用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...