前言
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;
}
常用注解
@Controller:將類識(shí)別為控制器,方法將默認(rèn)返回頁(yè)面路徑。使用在類的上方。
@ResponseBody:將返回Java對(duì)象轉(zhuǎn)換成Json數(shù)據(jù),同時(shí)方法將不會(huì)返回頁(yè)面路徑。用在方法上方。
@RestController:作用為@Controller+@ResponseBody。使用在類上方。(常用)
@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)。-->