SSM框架學(xué)習(xí)小結(jié)

前言

SSM框架的知識(shí)點(diǎn)還是有不少的,很多網(wǎng)上的課程都會(huì)在剛開始學(xué)習(xí)的時(shí)候就去深入的講解原理、看源碼,像我一樣基礎(chǔ)比較差的同學(xué)可能會(huì)感覺云里霧里的。我覺得學(xué)習(xí)一個(gè)東西還是要先學(xué)會(huì)怎么用,才能有興趣去深入的探究它的原理。所以我總結(jié)了一些之前學(xué)習(xí)SSM的重點(diǎn)知識(shí),在之后的實(shí)戰(zhàn)中還是會(huì)比較有用的,希望能幫助到像我當(dāng)初一樣迷茫的小伙伴吧。

Spring

IOC控制反轉(zhuǎn)

本質(zhì):創(chuàng)建對(duì)象

@Component 普通組件注解
@Controller 控制層組件注解 (常用)
@Service 業(yè)務(wù)層組件注解 (常用)
@Repository 持久層組件注解

DI依賴注入

本質(zhì):賦值(把同類型實(shí)例變量賦值給當(dāng)前變量)

@Autowired 類型注入,既只能按照byType注入 (常用)
注:此注解只適用于一個(gè)對(duì)象的注入,如果有多個(gè)注解,則要使用
@Resource(默認(rèn)byName注入)

并在相應(yīng)的@Component等注解上對(duì)應(yīng)添加name值,如

@Component('cat')
public class cat implements Animal{}
@Component('dog')
public class dog implements Animal{}

@Resource(name='cat')
Animal a1;
@Resource(name='dog')
Animal a2;

SpringMVC

接收參數(shù)(多個(gè)參數(shù)/封裝對(duì)象/Map)

//1.多個(gè)參數(shù)
//注:需要和前臺(tái)發(fā)送數(shù)據(jù)的個(gè)數(shù)、類型一致
public Stirng method1(String name,int age)
//2.封裝對(duì)象
//注:需要和實(shí)體類中的屬性一致
public String method2(User user)
//3.Map(需要使用@RequestBody注解)
//注:@RequestBody注解可以把前端JSON數(shù)據(jù)轉(zhuǎn)換為Java對(duì)象
public String method3(@RequestBody Map<String,Object> map)
//4.從路徑中獲取(需要使用@PathVariable注解)
/*注:controller映射的路徑上具有一個(gè)占位符,
@PathVariable可以接收請(qǐng)求路徑中占位符的值并賦值給所注解的參數(shù)*/
@GetMapping("/test/{name}/{age}")
public String method4(@PathVariable("name") String name,
                      @PathVariable("age") Integer age)

返回類型(文本、對(duì)象、集合)

//1.返回文本、單個(gè)數(shù)據(jù)int、bool等
public String method1(){
    return "aa";
}
//2.返回對(duì)象
public User method2(){
    User user = new User();
    return user;
}
//3.返回Collection集合
public List<User> method3(){
    List<User> list = new ArryList<>();
    User u1 = new User();
    User u2 = new User();
    list.add(u1);
    list.add(u2);
    return list;
}
//4.返回Map集合(最常用,可以將前三種打包發(fā)回前端)
public Map<String,Object> method4(){
    Map<String,Object> map = new HashMap<>();

    List<User> list = new ArrayList<>();
    User u1 = new User();
    User u2 = new User();
    list.add(u1);
    list.add(u2);

    map.put("name","aa");
    map.put("user",new User());
    map.put("list",list);
    return map;
}

常用注解

  1. @Controller:將類識(shí)別為控制器,方法將默認(rèn)返回頁(yè)面路徑。使用在類的上方。

  2. @ResponseBody:將返回Java對(duì)象轉(zhuǎn)換成Json數(shù)據(jù),同時(shí)方法將不會(huì)返回頁(yè)面路徑。用在方法上方。

  3. @RestController:作用為@Controller+@ResponseBody。使用在類上方。(常用)

  4. @RequestMapping:請(qǐng)求映射,表示訪問(wèn)路徑。使用在類的上方或方法的上方。

Mybatis

我們可以在resource目錄下創(chuàng)建mapper包來(lái)存放mapper.xml文件,在其中編寫SQL語(yǔ)句以實(shí)現(xiàn)mapper接口中的方法。

mapper.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="">
    <select id="getUser" parameterType="User" resultType="User">
        select * from user where username=#{username} and password=#{password}
    </select>
</mapper>
  • namespace為該.xml文件對(duì)應(yīng)的mapper接口的路徑,會(huì)以namespace 和 id 在mapper 中查詢具體的方法。

  • id 接口中相應(yīng)的方法名
    parameterType 表示傳入的數(shù)據(jù)對(duì)象
    resultType 表示返回對(duì)象的數(shù)據(jù)類型

(Mybatis會(huì)調(diào)用實(shí)體類的get(),set()方法來(lái)完成傳入對(duì)象的屬性提取和查詢結(jié)果對(duì)象的封裝

#{}中放的是sql語(yǔ)句中需要使用的傳入的數(shù)據(jù)。#{} 是預(yù)編譯處理,mybatis在處理時(shí),會(huì)將{}中替換為輸入?yún)?shù)的值,然后調(diào)用PrepareStatement的set方法來(lái)賦值,傳入字符串時(shí),會(huì)在字符串的兩端加上單引號(hào),使用占位符的方式提高效率,防止SQL注入

傳遞多參

例如我們完成對(duì)user表的模糊查詢,查詢名字里含有name的值并且年齡與age的值相等的user。在mapper接口中使用@Param給參數(shù)起別名,此時(shí)便不再需要parameterType。

List<User> getUser(@Param("name") String name,@Param("age") Integer age);
<select id="getUser" resultType="User">
    select * from user where name like concat('%',#{name},'%') and age=#{age}
</select>
<!--注:語(yǔ)句中concat的作用是拼接字符串-->

我們還可以通過(guò)Map來(lái)傳遞多參
key:參數(shù)名 value:參數(shù)值

List<User> getUser(Map<String,Object> map);
<select id="getUser" resultType="User">
    select * from user where name like concat('%',#{name},'%') and age=#{age}
</select>
<!--注:此時(shí)#{}中為map的key-->

多表查詢

在涉及到多表查詢時(shí),我們就不能用resultType來(lái)表示返回的對(duì)象類型了。這時(shí)我們需要使用resultMap。

<resultMap id="map1" type="Clazz"><!--這里的id起到標(biāo)記resultMap唯一性的作用-->
        <id property="id" column="cid"></id>
        <result property="name" column="cname"></result>
        <collection property="list" ofType="student">
            <id property="id" column="sid"></id>
            <result property="name" column="sname"></result>
            <result property="age" column="age"></result>
        </collection>
</resultMap>
<!--property代表實(shí)體類中的屬性,column代表數(shù)據(jù)表中的字段名。
id標(biāo)簽中是表中主鍵與相應(yīng)的實(shí)體類屬性,result標(biāo)簽中是其他字段與相應(yīng)實(shí)體類屬性
collection中則是嵌套的對(duì)象。
property的值依然是實(shí)體類的屬性,ofType的值為嵌套對(duì)象的屬性
這樣我們便可以將它們關(guān)聯(lián)起來(lái)。-->
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容