最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

 更新時(shí)間:2022年05月05日 09:57:34   作者:Rapper_cl  
這篇文章主要介紹了SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SSM數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

在SSM框架下,數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)主要有以下幾種方法:

  • 通過(guò)HttpServletRequest對(duì)象進(jìn)行傳遞
  • 通過(guò)ModeandView對(duì)象進(jìn)行傳遞
  • 通過(guò)在在方法中添加形參Model進(jìn)行傳遞

接下來(lái)分批進(jìn)行講解:

通過(guò)HttpServletRequest對(duì)象進(jìn)行傳遞

前臺(tái)頁(yè)面Demo:

<form action="TestDemo.do" method="post">
<input type="text" name="username" value="${requestScope.textname}">
<input type="submit" value="提交">
</form>

后臺(tái):

@RequestMapping(value="/TestDemo",method=RequestMethod.POST)
?? ?public String TestDemo(Model model, member mbr,HttpServletRequest request)?
?? ?{
?? ??? ?String text = "";
?? ??? ?request.setAttribute("textname", text);?
?? ??? ?return "";
?? ?}

通過(guò)ModeandView對(duì)象進(jìn)行傳遞

前臺(tái):共用第一個(gè)前臺(tái)

后臺(tái):

@RequestMapping(value="/TestDemo")
?? ?public ModelAndView TestDemo()?
?? ?{
?? ??? ?String text = "hello!";
?? ??? ?//ModelAndView中三個(gè)參數(shù),跳轉(zhuǎn)頁(yè)面,接收返回?cái)?shù)據(jù)的屬性,返回的數(shù)據(jù)
?? ??? ?ModelAndView modelAndView = new ModelAndView("Demo","textname",text);?
?? ??? ?return modelAndView;
?? ?}

通過(guò)在在方法中添加形參Model進(jìn)行傳遞

前臺(tái):共用第一個(gè)前臺(tái)

后臺(tái):

@RequestMapping(value="/TestDemo")
?? ?public String TestDemo(Model model)?
?? ?{
?? ??? ?String text = "hello!";
?? ??? ?model.addAttribute("textname", text);
?? ??? ?return "Demo";
?? ?}

SSM框架前后端數(shù)據(jù)傳輸邏輯整理

由于代碼的學(xué)習(xí)一直都是根據(jù)視頻課以及有相關(guān)工作經(jīng)驗(yàn)的朋友學(xué)習(xí),所以自己思考的還是很不足。學(xué)習(xí)了很長(zhǎng)時(shí)間碎片化的項(xiàng)目,也寫(xiě)過(guò)一些小的項(xiàng)目,但是這之間的邏輯依然沒(méi)有吃透。嘗試總結(jié)一下SSM框架下前后端數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn),也是對(duì)這段時(shí)間框架學(xué)習(xí)的小總結(jié)。

本文會(huì)盡可能地梳理前端、后端、前后端之間的數(shù)據(jù)傳輸過(guò)程

SSM框架實(shí)現(xiàn)思路

另外一個(gè)博主的思路也有些類(lèi)似

實(shí)現(xiàn)步驟

1.前端部分的頁(yè)面請(qǐng)求

這次主要看的是ajax傳值,頁(yè)面主要涉及這部分查詢結(jié)果的展示。

JSP部分代碼如下(注意是id="show"的部分進(jìn)行的表格查詢結(jié)果展示):

<div class="table-box">
			<table>
				<thead>
					<tr>
						<th class="num">序號(hào)</th>
						<th class="time">住院號(hào)</th>
						<th class="process">姓名</th>
						<th class="num">性別</th>
						<th class="node">科室</th>
						<th class="num">病房</th>
						<th class="num">床位號(hào)</th>
						<th class="num">入院情況</th>
						<th class="time">入院時(shí)間</th>
					</tr>
				</thead>
				<tbody id="show">
				</tbody>
			</table>
		</div>

這里的url地址(url : ‘patient/patientQuery.do’)結(jié)合jsp,在后面會(huì)去spring_mvc的文件中進(jìn)行查詢。

JS部分代碼如下(僅展示ajax部分):

var list;
var $tbody = $("#show");
var start = 0;
var end = 15;
function patientQuery() {
	var queryData = $("#patientFindForm").serialize();
	$.ajax({
		url : 'patient/patientQuery.do',
		type : 'post',
		data : queryData,
		dataType : 'JSON',
		success : function(result) {
			if (result.state == 0) {
				var lists = result.data;
				$tbody.empty();
				// 分頁(yè)
				if (lists.length > 0) {
					$('.pagination').pagination(lists.length, {
						callback : function(page) {
							start = page * this.items_per_page;
							end = (page + 1) * this.items_per_page;
							$tbody.empty();
							showList(lists, start, end);
							return true;
						},
						display_msg : true, // 是否顯示記錄信息
						setPageNo : true
					// 是否顯示跳轉(zhuǎn)第幾頁(yè)
					});
					$("#showbuttom").show();
				} else {
					alert("未找到信息!");
					$("#showbuttom").hide();
					$(".clear").click();
				}
				showList(lists, start, end);
			}
		}
	});
}

2.根據(jù)spring_mvc.xml配置文件,去尋找相應(yīng)的controller

這里是實(shí)現(xiàn)了一個(gè)url地址請(qǐng)求的攔截,可以看見(jiàn)這里將原始地址的".do"部分進(jìn)行了攔截,

去controller下進(jìn)行查找

3.在表現(xiàn)層找到了相應(yīng)的 PatientController.java

根據(jù)代碼,下面開(kāi)始深層次套娃

	@RequestMapping(value = "/patientQuery.do", produces = "application/json;charset=utf-8")
	@ResponseBody
	public String patientQuery(HttpServletRequest request) throws ParseException {
		PatientCode patientCode = new PatientCode();
		String patientId = BaseUtils.toString(request.getParameter("patientId"));
		String name = BaseUtils.toString(request.getParameter("name"));
		patientCode.setPatientId(patientId);
		patientCode.setDepartmentNo(BaseUtils.toInteger(request.getParameter("departmentNo")));
		// patientCode.setDocid(BaseUtils.toInteger(request.getParameter("Docid")));
		patientCode.setName(name);
		patientCode.setWardNo(BaseUtils.toInteger(request.getParameter("wardNo")));
		patientCode.setBedNo(BaseUtils.toInteger(request.getParameter("bedNo")));
		patientCode.setStart(BaseUtils.toDate(request.getParameter("start")));
		patientCode.setEnd(BaseUtils.toDate(request.getParameter("end")));
		patientCode.setOutStatus(0);// 設(shè)置出院狀態(tài)為未出院
		// System.out.println("當(dāng)前患者碼為:" + patientCode);
		List<Map<String, Object>> list = patientService.patientQuery(patientCode);
		log.info("患者查詢");
		for (Map<String, Object> map : list) {// 此處不對(duì)從庫(kù)中取出的時(shí)間做toString轉(zhuǎn)化會(huì)報(bào)java.lang.IllegalArgumentException
			String admissionTime = map.get("admissionTime").toString();
			map.put("admissionTime", admissionTime);
			String birth = map.get("birth").toString();
			map.put("birth", birth);
		}
		JSON json = JSONSerializer.toJSON(new JsonResult<List<Map<String, Object>>>(list));
		return json.toString();
	}

4.表現(xiàn)層controller去向業(yè)務(wù)層service調(diào)用查詢方法

5.service中實(shí)現(xiàn)的接口是對(duì)持久層(一些查詢語(yǔ)句封裝的地方)的調(diào)用

Mapper部分 PatientMapper .java接口

@Repository("patientMapper")
public interface PatientMapper {
	/**
	 * 病人的添加
	 * 
	 * @param patient
	 */
	void patientAdd(Patient patient);
	/**
	 * 病人列表的查詢
	 * 
	 * @return
	 */
	List<Map<String, Object>> patientQuery(PatientCode patientCode);
	/*省略*/

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.qut.mapper.PatientMapper">
	<insert id="patientAdd" parameterType="com.qut.pojo.Patient">
		insert into
		patient
		(patientId,patientName,gender,nation,birth,department,certificateNo,workUnit,maritalStatus,doctorId,admissionTime,homeAddress,homePhone,contacts,contactsPhone,admissionStatus,roomType,roomNo,bedNo,state)
		values
		(#{patientId},#{name},#{gender},#{nation},#{birth},#{department},#{cerificateNo},#{workUnit},#{maritalStatus},#{doctorId},NOW(),#{homeAddress},#{homePhone},#{contacts},#{contactsPhone},#{admissionStatus},#{roomType},#{roomNo},#{bedNo},#{state})
	</insert>
	<select id="patientQuery"
		parameterType="com.qut.pojo.PatientCode" resultType="map">
		select
		a.id as
		"id",
		a.patientId as "patientId",
		a.patientName as "name",
		a.gender as
		"gender",
		a.nation as "nation",
		a.birth as "birth",
		a.department as
		"department",
		g.`name` as "departmentName",
		a.certificateNo as
		"cerificateNo",
		a.workUnit as "workUnit",
		a.doctorId as "doctorId",
		b.`name` as "doctorName",
		a.admissionTime as "admissionTime",
		a.homeAddress as "homeAddress",
		a.homePhone as "homePhone",
		a.contacts
		as "contacts",
		a.contactsPhone as "contactsPhone",
		a.admissionStatus as
		"admissionStatus",
		a.roomType as "roomType",
		c.`name` as "roomTypeName",
		a.roomNo as "roomNo",
		a.bedNo as "bedNo",
		a.state as "state",
		a.settlementState as "settlementState",
		a.leaveTime as "leaveTime"
		from
		patient a LEFT JOIN doctor b ON
		a.doctorId = b.doctorId
		LEFT JOIN
		category c ON a.roomType = c.type
		LEFT JOIN (
		SELECT e.parameter_values
		"value",e.parameter_name "name"
		from
		parameter d LEFT JOIN paracode e ON
		d.`code` = e.`code`
		where
		d.name="科室"
		) g ON a.department = g.`value`
		where
		1=1
		and
		if(#{patientId}
		is null,0=0,patientId=#{patientId})
		and
		if(#{name} is null,0=0,
		patientName like CONCAT('%',#{name},'%'))
		and
		if(#{departmentNo} is
		null,0=0,department=#{departmentNo})
		and
		if(#{Docid} is
		null,0=0,a.doctorId=#{Docid})
		and
		if(#{start} is
		null,0=0,admissionTime &gt;= #{start})
		and
		if(#{end} is
		null,0=0,admissionTime &lt;= #{end})
		and
		if(#{wardNo} is
		null,0=0,roomNo=#{wardNo})
		and
		if(#{bedNo} is null,0=0,bedNo=#{bedNo})
		and
		if(#{outStart} is null,0=0,leaveTime &gt;= #{outStart})
		and
		if(#{outEnd} is null,0=0, leaveTime &lt;= #{outEnd})
		and
		if(#{outStatus} is null,0=0,leaveState = #{outStatus})
		and
		if(#{cerificateNo} is null,0=0,certificateNo = #{cerificateNo})
		order
		by
		id,admissionTime
	</select>

6.查詢語(yǔ)句與數(shù)據(jù)庫(kù)之間的關(guān)聯(lián)是通過(guò)數(shù)據(jù)庫(kù)連接配置實(shí)現(xiàn)的

這里還有一點(diǎn)疑惑,少說(shuō)了什么 bean的注入等相關(guān)知識(shí)點(diǎn)未體現(xiàn)

找到了~視圖解析器

7.將最后查詢到的結(jié)果以json的格式傳給前端

在步驟3至步驟6實(shí)現(xiàn)了查詢并返回json的這樣一個(gè)功能。最后會(huì)將得到的結(jié)果通過(guò)加上.jsp實(shí)現(xiàn)傳輸給前端,利用web.xml

在servlert的這部分功能寫(xiě)的還是有些不到位,servlet主要是請(qǐng)求與響應(yīng),所以應(yīng)該是一個(gè)入口也是一個(gè)出口。

后話

對(duì)于mybatis、spring、springmvc的部分其實(shí)還是有一些混淆,雖然能感知到他們分別在哪一個(gè)模塊發(fā)揮了作用。本文僅個(gè)人總結(jié),未來(lái)思路更清晰時(shí),也會(huì)對(duì)文章進(jìn)行修繕~歡迎大家指正。希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中使用AOP打印接口日志的方法

    SpringBoot中使用AOP打印接口日志的方法

    本篇文章主要介紹了SpringBoot中使用AOP打印接口日志的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Java根據(jù)模板導(dǎo)出Excel報(bào)表并復(fù)制模板生成多個(gè)Sheet頁(yè)

    Java根據(jù)模板導(dǎo)出Excel報(bào)表并復(fù)制模板生成多個(gè)Sheet頁(yè)

    本文主要介紹了Java根據(jù)模板導(dǎo)出Excel報(bào)表并復(fù)制模板生成多個(gè)Sheet頁(yè)的方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • java解析xml常用的幾種方式總結(jié)

    java解析xml常用的幾種方式總結(jié)

    這篇文章主要介紹了java解析xml常用的幾種方式總結(jié),有需要的朋友可以參考一下
    2013-11-11
  • Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解

    Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解

    今天小編就為大家分享一篇關(guān)于Intellij idea下使用不同tomcat編譯maven項(xiàng)目的服務(wù)器路徑方法詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 一文詳解Spring是怎樣處理循環(huán)依賴的

    一文詳解Spring是怎樣處理循環(huán)依賴的

    循環(huán)依賴簡(jiǎn)單理解就是A,B 兩個(gè)bean相互依賴,A依賴B,B依賴A,A->B、B->A大概就是這樣,這篇文章主要介紹了Spring是怎樣處理循環(huán)依賴的,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • Springboot中使用緩存的示例代碼

    Springboot中使用緩存的示例代碼

    這篇文章主要介紹了Springboot中使用緩存的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • MybatisPlus實(shí)現(xiàn)數(shù)據(jù)攔截的使用示例

    MybatisPlus實(shí)現(xiàn)數(shù)據(jù)攔截的使用示例

    在MyBatis-Plus中,可以通過(guò)自定義攔截器來(lái)實(shí)現(xiàn)對(duì)SQL語(yǔ)句的攔截和修改,本文就來(lái)介紹一下如何使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • SpringBoot中的分布式追蹤及使用詳解

    SpringBoot中的分布式追蹤及使用詳解

    隨著互聯(lián)網(wǎng)應(yīng)用程序的復(fù)雜性不斷增加,分布式系統(tǒng)已經(jīng)成為了許多企業(yè)級(jí)應(yīng)用程序的標(biāo)配,由于服務(wù)之間的調(diào)用關(guān)系錯(cuò)綜復(fù)雜,很難追蹤到一個(gè)請(qǐng)求在整個(gè)系統(tǒng)中的執(zhí)行路徑和時(shí)間,為了解決這個(gè)問(wèn)題,本文將介紹SpringBoot中的分布式追蹤技術(shù)及其使用方法
    2023-07-07
  • RateLimiter 源碼分析

    RateLimiter 源碼分析

    本文主要對(duì)ratelimiter的常用方法以及源碼進(jìn)行了分析解讀,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • Java面試重點(diǎn)中的重點(diǎn)之Elasticsearch核心原理

    Java面試重點(diǎn)中的重點(diǎn)之Elasticsearch核心原理

    ElasticSearch是一個(gè)基于Lucene的搜索引擎,是用Java語(yǔ)言開(kāi)發(fā)的,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便,作為Apache許可條款下的開(kāi)放源碼發(fā)布,是一種流行的企業(yè)級(jí)搜索引擎,是最受歡迎的企業(yè)搜索引擎
    2022-01-01

最新評(píng)論

辽阳市| 三河市| 大冶市| 托克逊县| 平乐县| 哈密市| 五台县| 综艺| 杭州市| 天门市| 金堂县| 三台县| 九龙县| 澄迈县| 罗江县| 浑源县| 南川市| 获嘉县| 天长市| 新巴尔虎右旗| 霍山县| 双牌县| 保康县| 江西省| 西昌市| 清水河县| 泗阳县| 都安| 吉木萨尔县| 汽车| 开江县| 漾濞| 博爱县| 淳化县| 惠安县| 北川| 瓦房店市| 桑日县| 宁都县| 蓬安县| 黄浦区|