SSM学习笔记

news/2025/2/24 19:33:22/文章来源:https://www.cnblogs.com/zj-cnbolgs/p/18566125

SSM学习笔记

Spring_quickstart的对象注入

    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl"><property name="bookDao" ref="bookDao"/>  <!--注入对象,name指的是声明的对象的名字,ref指的是xml中对象的id名称--></bean><bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>
//bookService类的bookDao对象创建方式
public class bookServiceImpl implements bookService {bookDao bookDao;//只用声明对象,但不用new,对象由IOC容器提供(在XML中配置)@Overridepublic void save() {System.out.println("bookService save...");bookDao.save();}//创建对象的方法public void setBookDao(bookDao bookDao){this.bookDao = bookDao;}
}
//main方法的写法
public class APP {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");bookService bookService  = (bookService) ctx.getBean("bookService");bookService.save();}
}

Bean配置

基本配置

    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl"><property name="bookDao" ref="bookDao"/></bean><bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>

别名配置

    <bean id = "bookService" name="service,service2,service3" class="com.cwnu.service.Impl.bookServiceImpl"> <!--name属性表示别名,可用空格,逗号,分号分隔--><property name="bookDao" ref="bookDao"/></bean><bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"/>

作用范围配置

spring默认配置的对象是单例,我们需要用scope配置,prototype是多例,singleton是单例

bean的实例化

1、容器通过构造方法实现对象

public class bookDaoImpl implements bookDao {public bookDaoImpl(){//可以用public,也可以用privateSystem.out.println("无参构造器...");}@Overridepublic void save() {System.out.println("bookdao save...");}
}

2、使用静态工厂实现对象

3、使用实例工厂实现对象

4、使用FactoryBean实现对象

Bean的生命周期

依赖注入方式

setter注入

1、引用类型

public class bookServiceImpl implements bookService{bookDao bookDao;public void setBookDao(bookDao bookDao){this.bookDao = bookDao;}//其他事务处理
}
    <bean id = "bookService" class="com.cwnu.service.Impl.bookServiceImpl"><property name="bookDao" ref="bookDao"/>    <!--用property标签设置--></bean>

2、基本类型

    <bean id = "bookDao" class="com.cwnu.dao.Impl.bookDaoImpl"><property name="name" value="周锦"/><property name="num" value="20"/></bean>
public class bookDaoImpl implements bookDao {private int num;private String name;public void setName(String name){this.name = name;}public void setNum(int num){this.num = num;}//其他事务处理
}

构造器注入 (自己做模块不推荐使用)

依赖自动装配

集合注入

1、数组注入

2、list注入

3、set注入

4、map注入

5、property注入

第三方数据管理

<!--管理德鲁伊德数据库资源对象--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.driver"/><property name="url" value="jdbc:mysql://localhost:3306/db_fruit"/><property name="username" value="root"/><property name="password" value="123456"/></bean>

用properties文件加载数据

加载properties文件的方式

创建容器的方式

获取Bean的方式

注解开发

注解开发定义Bean

@component:@service 业务层@repository 数据层@controller 表现层
//上述四个是相同的意思,只是用下面的三个增强可读性

注解方式定义Bean的生命周期

注解方式的依赖注入

引用类型的注入

简单类型的注入

加载外部properties文件

第三方Bean的管理


第二种扫描式不太推荐

第三方Bean的依赖注入

Spring整合Mybatis


spring整合Junit

面向AOP编程

//pom.xml中的maven配置
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version>
</dependency>
//main方法
public class app {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao = ctx.getBean(BookDao.class);bookDao.update();}
}

dao层

//接口
public interface BookDao {public void save();public void update();
}
//实现类
@Repository
public class BookDaoImpl implements BookDao {@Overridepublic void save() {System.out.println(System.currentTimeMillis());//切面,用于对比System.out.println("book dao save...");}@Overridepublic void update() {System.out.println("book dao update...");}
}

aop层

//aop
@Component //表示一个Bean
@Aspect //添加此注解,下面的那些才能有用
public class MyAdvice {@Pointcut("execution(void com.cwnu.dao.BookDao.update())") //切入点,表示执行到update()方法private void pc(){}@Before("pc()") //表示在执行到update()方法之前执行method()方法,method()是切入方法public void method(){System.out.println(System.currentTimeMillis());}
}

config层

@Configuration //这是一个配置类
@ComponentScan("com.cwnu") //扫描包,在这个扫描路径下的Bean才能实现对象
@EnableAspectJAutoProxy //切面驱动,有这个注解才能使用面向AOP编程
public class SpringConfig {
}

SpingMvc

<!--依赖配置-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version>
</dependency>
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

controller

@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("user save..");return "{'name':'zhoujin'}";}
}

config

//SpringMvc配置
@Configuration
@ComponentScan("com.cwnu.controller")
public class SpringMvcConfig {
}
//Servlet容器,加载tomcat时候加载这个类
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class); //容器加载springmvc配置return ctx;}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}

乱码处理

对于post类请求,如果提交的数据有中文,可能会出现乱码,对此我们在ServletContainerInitConfig类里面添加过滤器

    //乱码处理@Override
protected Filter[] getServletFilters() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{filter};
}

传参

基本类型的传参

@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(@RequestParam("name") String name, @RequestParam("sex") Stringsex){System.out.println(name);System.out.println(sex);return name;
}

pojo对象的传参

@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){System.out.println(user);return user.toString();
}
//直接在请求路径后面添加pojo的属性,springmvc自动封装成对象

嵌套pojo对象的传参

日期类型

响应

很简单,不赘述

Rest风格

SSM整合

SpringConfig.java

@Configuration
@ComponentScan("com.cwnu.service")
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
public class SpringConfig {
}

Spring整合Mybatis

JdbcConfig.java

public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}
}

MybatisConfig.java

public class MybatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setTypeAliasesPackage("com.cwnu.domain");sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage("com.cwnu.dao");return mapperScannerConfigurer;}
}

Spring整合SpringMvc

ServletConfig.java

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}

SpringMvcConfig.java

@Configuration
@ComponentScan("com.cwnu.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/840484.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

131.0.6778.86版谷歌浏览器下载和对应的驱动

谷歌浏览器官方发布了 131.0.6778.85/.86 版谷歌浏览器下载,这是131版谷歌浏览器的第二个版本。 最新版本的 Google Chrome(版本 131.0.6778.86)已经解决了谷歌浏览器上周末导致某些网站上无法突出显示文本的问题。 131.0.6778.86版谷歌浏览器下载https://www.aliqing.com.…

CF987

A link由于它是由递减变成递增的,所以一定是中间一段连续的相同数不变,前面变,后面变,因为对于一个数来说原来这些数前面的数都大于等于它,而现在都要小于等于它,而原来后面的数都小于等于它,而现在都大于等于它了,那么它左右等于它的就可以不变,而不等于它的就一定要…

使用XBIM过程中出现的“未能加载文件或程序”

System.IO.FileNotFoundException:“未能加载文件或程序集“Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60”或它的某一个依赖项。系统找不到指定的文件。” //如何解决呢, 你需要到文件生成目录中查看Micr…

CF1506

感觉今天脑子特别不清醒AWAA.Strange Table CF原题链接 题目大意: 给出两种矩阵的排列方式:竖排\[\begin{matrix} 1 & 4 & 7 & 10 & 13 \\ 2 & 5 & 8 & 11 & 14 \\ 3 & 6 & 9 & 12 & 15 \\ \end{matrix} \] 横排\[\begin…

「算法」贪心与随机化

骗分三神:贪心,随机化,随机化贪心CSP-S2024 因为不会智障贪心而考崩溃错失一等的小伙不想再被别人看不起,故作此博客以总结解题技巧。 此外,为了增强骗分能力,我还总结了一下随机化算法的一些东西,以及随机化贪心的使用方法。贪心篇基础模型 邻位关系的处理方法 反悔堆随…

Lake Counting S

#include<iostream> #include<algorithm> #include<cstring> using namespace std;const int N = 100; int n, m; char g[N][N]; bool st[N][N];//存状态:淹过or没淹过 int res = 0; int dx[] = {1,1,1,0,0,-1,-1,-1};//八个方向 int dy[] = { -1,0,1,1,-1,…

k8s-cronjob

需求: 创建一个名为hello的CronJob,使用busybox镜像,设置每一分钟运行一次返回一次hello,并查看对应的打印信息。apiVersion: batch/v1beta1 kind: CronJob metadata:name: hello spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name:…

Bootstrap4动态模态窗口jquery插件

在线预览 下载 这是一款Bootstrap4动态模态窗口jquery插件。通过该jquery插件,可以动态生成bootstrap4的模态窗口,可以实现简单的弹出框,对话框,以及复杂结构的模态窗口。使用方法 在页面中引入jquery.min.js、bootstrap-show-modal.js文件,以及bootstrap4相关文件。<…

饼图程序-企业部门资产构成

import matplotlib.pyplot as pltimport matplotlib # 设置字体为系统中的中文字体(这里以SimHei为例,适用于Windows) matplotlib.rcParams[font.sans-serif] = [SimHei] # 解决负号显示问题 matplotlib.rcParams[axes.unicode_minus] = False # 数据 sizes = [54, 36, 10] …

2024-2025-1 20241411王思棋《计算机基础与程序设计》第九周学习总结

作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标 操作系统责任、内存与进程管理、分时系统、CPU调度文件、文件系统、文件保护、磁盘调度作业正…

2024-2025-1(20241321)《计算机基础与程序设计》第九周学习总结

这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(2024-2025-1计算机基础与程序设计第九周作业)这个作业的目标 <深刻学习C语言,反思一周学习,温故知新>作业正文 ... 本博客链接https://www.cn…

Elasticsearch Enterprise 8.16 (macOS, Linux, Windows) - 分布式搜索和分析引擎

Elasticsearch Enterprise 8.16 (macOS, Linux, Windows) - 分布式搜索和分析引擎Elasticsearch Enterprise 8.16 (macOS, Linux, Windows) - 分布式搜索和分析引擎 Elasticsearch、Kibana、Beats & Logstash 请访问原文链接:https://sysin.org/blog/elastic-8/ 查看最新版…