SSM框架学习小结

前言

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;
}

常用注解

  1. @Controller:将类识别为控制器,方法将默认返回页面路径。使用在类的上方。

  2. @ResponseBody:将返回Java对象转换成Json数据,同时方法将不会返回页面路径。用在方法上方。

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

  4. @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的值为嵌套对象的属性
这样我们便可以将它们关联起来。-->
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容