• SSM(Spring)


    目录

    Spring

    IoC

    Bean

    依赖注入

    setter

    构造器

    集合注入

    注解开发

    AOP

    举例

    切入点表达式

    通知类型

    获取通知数据

    SpringMVC

    创建使用

    请求

    get

    post 

    post乱码处理

     参数类型

    响应

    Rest风格 

    注解说明

    Mybatis Plus

    CURD

    wapper条件构造器

    注解说明


    Spring

    Spring-01-初识Spring_哔哩哔哩_bilibili

    IoC

    Ioc—Inversion of Control

    一种思想。 创建对象、管理对象

    一般对象都是直接通过new出来 ,交由IoC管理后,IoC容器来控制对象的创建

    配置实在是多

    pom.xml

    1. <dependency>
    2. <groupId>org.springframeworkgroupId>
    3. <artifactId>spring-contextartifactId>
    4. <version>5.3.23version>
    5. dependency>

    applicationContext.xml

    1. <bean id="bookDao" class="com.beink.dao.Impl.bookDaoImpl"/>
    2. <bean id="bookService" class="com.beink.service.Impl.bookServiceImpl"/>

    Main.java

    1. public class Main {
    2. public static void main(String[] args) {
    3. // 3.获取容器
    4. ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");
    5. // 4. 获取bean
    6. bookDao bookDao = (bookDao) atx.getBean("bookDao");
    7. bookDao.save();
    8. // 等同于
    9. bookDao bookDao1 = new bookDaoImpl();
    10. bookDao1.save();
    11. }
    12. }

    Bean

            被构造 调用的是无参构造

    生命周期:

    public void init(){
        System.out.println("init");
    }
    public void destory(){
        System.out.println("destory");
    }
    配置
    
    或者 直接 implements InitializingBean, DisposableBean 同样效果

    依赖注入

    setter

    1. .xml
    2. "bookDao" class="com.beink.dao.Impl.bookDaoImpl">
    3. "a" value="123"/>
    4. "s" value="true"/>
    5. Impl.java
    6. private String s;
    7. private int a;

    构造器

    1. <bean id="bookDao" class="com.beink.dao.Impl.bookDaoImpl">
    2. <constructor-arg name="a" value="6"/>
    3. <constructor-arg name="s" value="true"/>
    4. bean>
    5. <bean id="bookService" class="com.beink.service.Impl.bookServiceImpl">
    6. <constructor-arg name="bookdao" ref="bookDao"/>
    7. bean>

     依赖注入

    1. private bookDao book_dao;
    2. public void setBookdao(bookDao bookdao){
    3. this.book_dao = bookdao;
    4. }

    一般 注入

    1. private String s;
    2. private int a;
    3. public bookDaoImpl(String s, int a) {
    4. this.s = s;
    5. this.a = a;
    6. }

    集合注入

    1. <bean id="bookDao" class="com.beink.dao.Impl.bookDaoImpl">
    2. <property name="list">
    3. <array>
    4. <value>hello value>
    5. <value>worldvalue>
    6. array>
    7. property>
    8. <property name="map">
    9. <map>
    10. <entry key="hello" value="world">entry>
    11. map>
    12. property>
    13. bean>

    注解开发

    @Component("名字") 定义Bean

            ---@Service

            ---@Controller(同样效果 只是便于理解)

            ---@Repository

    @Configuration 设置位配置类 类似于applicationContext.xml
    @ComponentScan("com.beink") 扫描路径 自动装配到spring的bean
    @Scope("singleton") 单例
    @PostConstruct 生命周期-初始化
    @PreDestroy  生命周期-销毁
    @Autowired 自动装配  === private bookDao bookdao = new bookDaoImpl();
    @Value("${name}") 简单类型注入 private String s;
    @PropertySource("xxx.yml") 数据源 内容--(name=hello world)

    AOP

    不改变原始设计 将功能增强

    举例

    1. @Component
    2. @Aspect
    3. //这是个aop
    4. public class MyAop {
    5. // 在哪里执行
    6. @Pointcut("execution(void com.beink.dao.bookDao.save())")
    7. private void ss(){}
    8. // 绑定
    9. @AfterReturning("ss()")
    10. public void set(){
    11. System.out.println("AOP");
    12. }
    13. }

    切入点表达式

    使用*通配符即可
    @Pointcut("execution( * * com.beink.dao.*)")
    

    通知类型

    1. public class MyAop {
    2. @Pointcut("execution(void com.beink.dao.bookDao.save())")
    3. private void ss(){}
    4. @AfterReturning("ss()")
    5. public void set(){
    6. System.out.println("AOP");
    7. }
    8. // 环绕
    9. @Around("ss()")
    10. public void round(ProceedingJoinPoint e) throws Throwable {
    11. System.out.println("qian");
    12. e.proceed();/*调用原始操作*/
    13. System.out.println("hou");
    14. // 如果有返回值 返回对象必须是Object
    15. }
    16. // @AfterReturning
    17. // @AfterThrowing
    18. }

    获取通知数据

    1. public class MyAop {
    2. @Pointcut("execution(void com.beink.dao.bookDao.save(..))")
    3. private void ss(){}
    4. // 环绕
    5. @Around("ss()")
    6. public Object round(ProceedingJoinPoint e) throws Throwable {
    7. Object[] args = e.getArgs();
    8. e.proceed();/*调用原始操作*/
    9. System.out.println(Arrays.toString(args));/*获取参数*/
    10. // 修改参数
    11. args[0] = 666;
    12. Object ret = e.proceed(args);
    13. return ret;
    14. }
    15. }

    SpringMVC

    SpringMVC-02-SpringMVC入门案例_哔哩哔哩_bilibili

    创建使用

    pom.xml

    1. <dependencies>
    2. <dependency>
    3. <groupId>javax.servletgroupId>
    4. <artifactId>javax.servlet-apiartifactId>
    5. <version>4.0.1version>
    6. <scope>providedscope>
    7. dependency>
    8. <dependency>
    9. <groupId>org.springframeworkgroupId>
    10. <artifactId>spring-webmvcartifactId>
    11. <version>5.3.23version>
    12. dependency>
    13. dependencies>

    userControler类

    1. @Controller
    2. //定义Bean
    3. public class userController {
    4. // 访问路径
    5. @RequestMapping("/save")
    6. // 返回值类型
    7. @ResponseBody
    8. public String save(){
    9. System.out.println("hhh");
    10. return "hello world";
    11. }
    12. }

    config类

    1. servletinitConfig.java
    2. //定义一个servlet启动配置,在里面加载spring配置
    3. public class servletinitConfig extends AbstractDispatcherServletInitializer {
    4. // 加载springMVC配置
    5. @Override
    6. protected WebApplicationContext createServletApplicationContext() {
    7. AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    8. ctx.register(springMVCConfig.class);
    9. return ctx;
    10. }
    11. //设置那些请求归springMVC处理
    12. @Override
    13. protected String[] getServletMappings() {
    14. return new String[]{"/"};
    15. }
    16. //加载spring配置
    17. @Override
    18. protected WebApplicationContext createRootApplicationContext() {
    19. return null;
    20. }
    21. }
    22. springMVCConfig.java
    23. //加载对应的Bean
    24. @ComponentScan("com.beink.controller")
    25. //加载配置
    26. @Configuration
    27. public class springMVCConfig {
    28. }

    配置Tomcat启动即可。。

    请求

    get

    /save?name=name

    1. @RequestMapping("/save")
    2. @ResponseBody
    3. public String save(String name){
    4. System.out.println(name);
    5. return "hello world";
    6. }

    post 

    1. @RequestMapping("/save")
    2. @ResponseBody
    3. public String save(String name,String id){
    4. System.out.println(name + id);
    5. return "hello world";
    6. }

    post乱码处理

     参数类型

    SpringMVC-09-json数据传递参数_哔哩哔哩_bilibili

    1. @ResponseBody
    2. public String save(@RequestParam("name") String userName, String id){
    3. // 一: 会把地址中的name映射给userName
    4. // 二: save(User user) 当名字一样使 会自动把属性放进去
    5. // 三:Map List.....@RequestParam List
    6. // 四:JSON
    7. // 五:时间
    8. // 六:。。。
    9. System.out.println(userName + id);
    10. return "hello world";
    11. }

    响应

    1. @RequestMapping("topage")
    2. public String toapage(){
    3. // 跳转到index.jsp页面
    4. return "index.jsp";
    5. }
    6. @RequestMapping("ttt")
    7. @ResponseBody
    8. public String toattpage(){
    9. // 返回一个串“index.jsp”
    10. return "index.jsp";
    11. }

    Rest风格 

    访问形式:   /put/5    /get/6

    SpringMVC-14-RESTful快速开发_哔哩哔哩_bilibili

    1. @RequestMapping(value = "/put/{id}",method = RequestMethod.PUT)
    2. @ResponseBody
    3. public void put(@PathVariable String id){
    4. System.out.println(id);
    5. }
    6. @RequestMapping(value = "/get/{id}",method = RequestMethod.GET)
    7. @ResponseBody
    8. public void get(@PathVariable String id){
    9. System.out.println(id);
    10. }
    11. POST DELETE ....

    注解说明

    @Controller    //定义Bean
    @RequestMapping("/save")   // 访问路径
    @ResponseBody    //返回值
    @RequestParam  //用于接收url地址参数    /get?id=5
    @ResponseBody //用于接收JSON数据
    @PathVariable  //接受url地址参数   /get/
    @RestController //= @Controller + @ResponseBody
    @GetMapping("/get/{id}") // == @RequestMapping(value = "/get/{id}",method = RequestMethod.GET)

     .....

    Mybatis Plus

    【尚硅谷】2022版MyBatisPlus教程(一套玩转mybatis-plus)_哔哩哔哩_bilibili

    CURD

    1. @Test
    2. void TestInsert(){
    3. user user = new user();
    4. user.setId(880);
    5. user.setAccount("天天学习");
    6. user.setPassword("hhh");
    7. int res = UserMapper.insert(user);
    8. System.out.println(res);
    9. }
    10. @Test
    11. void TestDelete(){
    12. // 一:
    13. // int res = UserMapper.deleteById(1);
    14. // System.out.println(res);
    15. // 二:
    16. // delete from user where account = ? and password = ?
    17. // HashMap map = new HashMap<>();
    18. // map.put("account","jkl");
    19. // map.put("password","123root");
    20. // UserMapper.deleteByMap(map);
    21. // 三:
    22. // 删除多个
    23. // DELETE FROM user WHERE id IN ( ? , ? )
    24. List list = Arrays.asList(80,880);
    25. UserMapper.deleteBatchIds(list);
    26. }
    27. @Test
    28. void TestUpdata(){
    29. user user = new user();
    30. user.setAccount("改了");
    31. UpdateWrapper q = new UpdateWrapper<>();
    32. q.eq("password","666");
    33. // 不屑password 不被修改
    34. UserMapper.update(user,q);
    35. }
    36. @Test
    37. void TestSelect(){
    38. // 通过id查询信息
    39. // user user = UserMapper.selectById(2);
    40. // System.out.println(user.toString().isEmpty());
    41. // 通过多个id进行查询
    42. // List list = Arrays.asList(3,2);
    43. // List users = UserMapper.selectBatchIds(list);
    44. // users.forEach(System.out::println);
    45. // 通过map查询
    46. // HashMap map = new HashMap<>();
    47. // map.put("account",666);
    48. // List users = UserMapper.selectByMap(map);
    49. // users.forEach(System.out::println);
    50. // 所有的数据
    51. // List users = UserMapper.selectList(null);
    52. // users.forEach(System.out::println);
    53. }

    wapper条件构造器

    注解说明

    @TableName   表名

    @TableId  主键

           ---@TableId(type= IdType.AUTO)  自增

            ---@TableId(type= IdType.NONE)  雪花算法 赋值

    @TableField  把表中字段和实体类对应

            ---@TableField(value="name")   映射

            ---@TableField(exist=false)   不是数据库中字段

            ---@TableField(select = false)   不会参与查询  返回值为null

  • 相关阅读:
    03【设计模式的七大原则】
    leetcode3. 无重复字符的最长子串 [滑动窗口]
    leetcode(力扣):203移除链表元素 leetcode(力扣):206反转链表 leetcode(力扣):876.链表的中间结点多种解法
    pcdn链路聚合怎么在爱快上实现
    基础化学试题A卷
    spring boot使用拦截器修改请求URL域名 换 IP 访问
    Golang 快速删除map所有元素
    最新版发布,快扶我起来,Android 13 现已正式发布至 AOSP
    “要疯”六年,安踏与年轻人疯出“新宇宙”
    POJ3258River Hopscotch题解
  • 原文地址:https://blog.csdn.net/qq_53950686/article/details/127790860