前言
SSM框架的知识点还是有不少的,很多网上的课程都会在刚开始学习的时候就去深入的讲解原理、看源码,像我一样基础比较差的同学可能会感觉云里雾里的。我觉得学习一个东西还是要先学会怎么用,才能有兴趣去深入的探究它的原理。所以我总结了一些之前学习SSM的重点知识,在之后的实战中还是会比较有用的,希望能帮助到像我当初一样迷茫的小伙伴吧。
Spring
IOC控制反转
本质:创建对象
@Component 普通组件注解
@Controller 控制层组件注解 (常用)
@Service 业务层组件注解 (常用)
@Repository 持久层组件注解
DI依赖注入
本质:赋值(把同类型实例变量赋值给当前变量)
@Autowired 类型注入,既只能按照byType注入 (常用)
注:此注解只适用于一个对象的注入,如果有多个注解,则要使用
@Resource(默认byName注入)
并在相应的@Component等注解上对应添加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
接收参数(多个参数/封装对象/Map)
//1.多个参数
//注:需要和前台发送数据的个数、类型一致
public Stirng method1(String name,int age)
//2.封装对象
//注:需要和实体类中的属性一致
public String method2(User user)
//3.Map(需要使用@RequestBody注解)
//注:@RequestBody注解可以把前端JSON数据转换为Java对象
public String method3(@RequestBody Map<String,Object> map)
//4.从路径中获取(需要使用@PathVariable注解)
/*注:controller映射的路径上具有一个占位符,
@PathVariable可以接收请求路径中占位符的值并赋值给所注解的参数*/
@GetMapping("/test/{name}/{age}")
public String method4(@PathVariable("name") String name,
@PathVariable("age") Integer age)
返回类型(文本、对象、集合)
//1.返回文本、单个数据int、bool等
public String method1(){
return "aa";
}
//2.返回对象
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集合(最常用,可以将前三种打包发回前端)
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:将类识别为控制器,方法将默认返回页面路径。使用在类的上方。
@ResponseBody:将返回Java对象转换成Json数据,同时方法将不会返回页面路径。用在方法上方。
@RestController:作用为@Controller+@ResponseBody。使用在类上方。(常用)
@RequestMapping:请求映射,表示访问路径。使用在类的上方或方法的上方。
Mybatis
我们可以在resource目录下创建mapper包来存放mapper.xml文件,在其中编写SQL语句以实现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文件对应的mapper接口的路径,会以namespace 和 id 在mapper 中查询具体的方法。
id 接口中相应的方法名
parameterType 表示传入的数据对象
resultType 表示返回对象的数据类型
(Mybatis会调用实体类的get(),set()方法来完成传入对象的属性提取和查询结果对象的封装
#{}中放的是sql语句中需要使用的传入的数据。#{} 是预编译处理,mybatis在处理时,会将{}中替换为输入参数的值,然后调用PrepareStatement的set方法来赋值,传入字符串时,会在字符串的两端加上单引号,使用占位符的方式提高效率,防止SQL注入
传递多参
例如我们完成对user表的模糊查询,查询名字里含有name的值并且年龄与age的值相等的user。在mapper接口中使用@Param给参数起别名,此时便不再需要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>
<!--注:语句中concat的作用是拼接字符串-->
我们还可以通过Map来传递多参
key:参数名 value:参数值
List<User> getUser(Map<String,Object> map);
<select id="getUser" resultType="User">
select * from user where name like concat('%',#{name},'%') and age=#{age}
</select>
<!--注:此时#{}中为map的key-->
多表查询
在涉及到多表查询时,我们就不能用resultType来表示返回的对象类型了。这时我们需要使用resultMap。
<resultMap id="map1" type="Clazz"><!--这里的id起到标记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代表实体类中的属性,column代表数据表中的字段名。
id标签中是表中主键与相应的实体类属性,result标签中是其他字段与相应实体类属性
collection中则是嵌套的对象。
property的值依然是实体类的属性,ofType的值为嵌套对象的属性
这样我们便可以将它们关联起来。-->