diff --git "a/55 \346\235\250\346\227\255\344\270\234/20231226 \346\263\250\350\247\243\345\274\200\345\217\221.md" "b/55 \346\235\250\346\227\255\344\270\234/20231226 \346\263\250\350\247\243\345\274\200\345\217\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..1113298423f6e062bd77b3cb9c7f8f29ebb06777 --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20231226 \346\263\250\350\247\243\345\274\200\345\217\221.md" @@ -0,0 +1,412 @@ +# 1.笔记 + +```java +package com.mock.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration // 声明这是一个配置类,用来代替xml配置文件 +@ComponentScan({"com.mock.dao", "com.mock.service"}) // 扫描导入Bean,建立连接,一般通过包名扫描 +@Import({JdbcConfig.class, MybatisConfig.class}) // 导入通过第三方配置类产生的Bean文件 +public class SpringConfig { +} + + +------------------------------------------------------------------------------------------------------------ +package com.mock.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; + +import javax.sql.DataSource; +@PropertySource("classpath:jdbc.properties") // 导入外部文件 加classpath: +public class JdbcConfig { + @Value("${jdbc.driver}") // 简单类型注入值 + private String driver; + @Value("${jdbc.url}") + private String url; + @Value("${jdbc.username}") + private String username; + @Value("${mock.password}") + private String password; + @Bean // 写一个方法,返回值就是要用到的Bean,用@Bean来声明这是一个Bean + public DataSource dataSource(){ + DruidDataSource dataSource = new DruidDataSource(); // druid 数据连接池 + dataSource.setDriverClassName(driver); + dataSource.setUrl(url); + dataSource.setUsername(username); + dataSource.setPassword(password); + return dataSource; + } +} + + +------------------------------------------------------------------------------------------------------------ + + +package com.mock.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ // 复杂类型用形参导入,前提是要有@Bean + SqlSessionFactoryBean sslb = new SqlSessionFactoryBean(); + sslb.setTypeAliasesPackage("com.mock.domain"); // 设置别名 + sslb.setDataSource(dataSource); + return sslb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mock.dao"); // 映射文件所在的包 + return msc; + } +} + + +------------------------------------------------------------------------------------------------------------ + + +package com.mock.dao; + +import com.mock.domain.Brand; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface BookDao { + @Select("select id, brand_name brandName, company_name companyName, ordered, description, status from tb_brand;") + List findAll(); + List selAll(); +} + + +------------------------------------------------------------------------------------------------------------ + +package com.mock.service.impl; + +import com.mock.config.SpringConfig; +import com.mock.dao.BookDao; +//import com.mock.dao.impl.BookDaoImpl; +import com.mock.domain.Brand; +import com.mock.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Controller; + +import java.util.Arrays; +import java.util.List; + +//@Component // 声明这是一个Bean,通用 +@Service // 同样是声明一个Bean,表示这是一个业务层 (负责业务逻辑) +public class BookServiceImpl implements BookService { +// @Autowired +// private BookDao bookDao; + @Override + public void save() { + // 通过配置文件,获取Ioc容器 + ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); + BookDao bean = ctx.getBean(BookDao.class); // 获取Bean的常用方式 +// List brandList = bookDao.findAll(); + List brandList = bean.selAll(); + System.out.println(brandList); + } +} + + + +------------------------------------------------------------------------------------------------------------ + +package com.mock; + +import com.mock.config.SpringConfig; +import com.mock.service.BookService; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) // +@ContextConfiguration(classes= SpringConfig.class) +public class Test { + @Autowired // 自动装配注入依赖 + private BookService bookService; + @org.junit.Test + public void testIoc(){ +// ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); +// BookService bookService = ctx.getBean(BookService.class); + bookService.save(); + } +} + + + + +@Repository // 声明这是一个数据层的Bean,负责数据库有关操作 +@Controller // 声明这是一个表现层的Bean,负责显示 + +``` + +# 2.作业 + +```xml + + + 4.0.0 + + com.mock + Day06 + 1.0-SNAPSHOT + + + + junit + junit + 4.13.2 + test + + + + com.mysql + mysql-connector-j + 8.2.0 + + + + org.mybatis + mybatis + 3.5.15 + + + + + + org.slf4j + slf4j-api + 1.7.20 + + + + ch.qos.logback + logback-classic + 1.2.3 + + + + ch.qos.logback + logback-core + 1.2.3 + + + + org.springframework + spring-context + 5.3.29 + + + + com.alibaba + druid + 1.1.23 + + + + org.mybatis + mybatis-spring + 2.0.5 + + + + + org.springframework + spring-jdbc + 5.2.25.RELEASE + + + + org.springframework + spring-test + 5.2.25.RELEASE + + + + + + +``` + + + + + +## JdbcConfig.java + +```java +package com.mock.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; + +@PropertySource("classpath:jdbc.properties") +//@Repository +public class JdbcConfig { + @Value("${jdbc.driver}") + private String driver; + @Value("${jdbc.url}") + private String url; + @Value("${jdbc.username}") + private String username; + @Value("${mock.password}") + private String password; + + @Bean + public DataSource dataSource() { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setDriverClassName(driver); + dataSource.setUrl(url); + dataSource.setUsername(username); + dataSource.setPassword(password); + return dataSource; + } +} + +``` + +## MybatisConfig.java + +```java +package com.mock.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ + SqlSessionFactoryBean sslb = new SqlSessionFactoryBean(); + sslb.setTypeAliasesPackage("com.mock.domain"); + sslb.setDataSource(dataSource); + return sslb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mock.dao"); + return msc; + } +} + +``` + +## SpringConfig.java + +```java +package com.mock.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@ComponentScan({"com.mock.dao", "com.mock.service"}) +//@PropertySource() +@Import({JdbcConfig.class, MybatisConfig.class}) +public class SpringConfig { +} + +``` + +## BrandServiceImpl.java + +```java +package com.mock.service.impl; + +import com.mock.config.SpringConfig; +import com.mock.dao.BookDao; +//import com.mock.dao.impl.BookDaoImpl; +import com.mock.domain.Brand; +import com.mock.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Controller; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; + +//@Component +@Service +public class BookServiceImpl implements BookService { +// @Autowired +// private BookDao bookDao; + @Override + public void save() { + ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); + BookDao bean = ctx.getBean(BookDao.class); +// List brandList = bookDao.findAll(); + List brandList = bean.selAll(); + System.out.println(brandList); + } +} + +``` + +## Test.java + +```java +package com.mock; + +import com.mock.config.SpringConfig; +import com.mock.service.BookService; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes= SpringConfig.class) +public class Test { + @Autowired + private BookService bookService; + @org.junit.Test + public void testIoc(){ + bookService.save(); + } +} + +``` \ No newline at end of file diff --git "a/55 \346\235\250\346\227\255\344\270\234/20231226.md" "b/55 \346\235\250\346\227\255\344\270\234/20231226.md" new file mode 100644 index 0000000000000000000000000000000000000000..fddb435e13cbd865a5d2e91ac747f51296f4fec0 --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20231226.md" @@ -0,0 +1,255 @@ +```java +package com.mdd.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class JdbcConfig { + @Bean + public DataSource DataSource(){ + DruidDataSource ds = new DruidDataSource(); + ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); + ds.setUrl("jdbc:mysql:///aaa?useSSL=false"); + ds.setUsername("root"); + ds.setPassword("123456"); + return ds; + } +} + + + +``` + +```java +package com.mdd.config; + +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.config.MapperScannerBeanDefinitionParser; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + ssfb.setDataSource(dataSource); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} +package com.mdd.config; + +``` + +```java +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.config.MapperScannerBeanDefinitionParser; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + ssfb.setDataSource(dataSource); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} + +``` + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@ComponentScan("com.mdd") +@Import({MybatisConfig.class, JdbcConfig.class}) +public class SpringConfig { +} + + + +package com.mdd.domain; + +public class Brand { + private Integer id; + private String brandName; + private String companyName; + private Integer ordered; + private String description; + private Integer status; + @Override + public String toString() { + return "Brand{" + + "id=" + id + + ", brandName='" + brandName + '\'' + + ", companyName='" + companyName + '\'' + + ", ordered=" + ordered + + ", description='" + description + '\'' + + ", status=" + status + + '}'; + } + + public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) { + this.id = id; + this.brandName = brandName; + this.companyName = companyName; + this.ordered = ordered; + this.description = description; + this.status = status; + } + + public Brand() { + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public Integer getOrdered() { + return ordered; + } + + public void setOrdered(Integer ordered) { + this.ordered = ordered; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + +} + +``` + +```java + + +package com.mdd.mapper; + +import com.mdd.domain.Brand; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface BrandMapper { +@Select("select brand_name brandName, company_name companyName, ordered, description, status from tb_brand;") +List findAll(); +} + +``` + + + +```java +package com.mdd.service.impl; + +import com.mdd.domain.Brand; +import com.mdd.mapper.BrandMapper; +import com.mdd.service.BrandService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BrandServiceImpl implements BrandService { +@Autowired +private BrandMapper brandMapper; +@Override +public void sean() { +System.out.println("业务开始跑起来。。。。"); +List list = brandMapper.findAll(); +System.out.println(list); +} +} + +``` + + + +```java +package com.mdd.service; + +public interface BrandService { +public void sean(); +} + +``` + + + +```java +import com.mdd.config.SpringConfig; +import com.mdd.domain.Brand; +import com.mdd.mapper.BrandMapper; +import com.mdd.service.impl.BrandServiceImpl; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import java.util.List; + +public class App { +public static void main(String[] args) { +AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); +BrandServiceImpl service = ctx.getBean(BrandServiceImpl.class); +service.sean(); + +} +} + +``` diff --git "a/55 \346\235\250\346\227\255\344\270\234/20231228.md" "b/55 \346\235\250\346\227\255\344\270\234/20231228.md" new file mode 100644 index 0000000000000000000000000000000000000000..4f0f867f5d1a0d06359d8b30be4485a90e708b0c --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20231228.md" @@ -0,0 +1,270 @@ + + +```java +1. `@Component`:用于标记类为 Spring 管理的组件,会被自动创建和管理。 +2. `@Controller`:用于标记类为 MVC 其中的控制器组件。 +3. `@Service`:用于标记类为服务层组件。 +4. `@Repository`:用于标记类为数据访问层组件(DAO)。 +5. `@Autowired`:用于自动装配依赖,通过类型进行匹配注入。 +6. `@Qualifier`:结合 `@Autowired` 使用,通过指定名称解决依赖注入的歧义性。 +7. `@Value`:用于给变量注入值。 +8. `@Configuration`:用于声明配置类,替代 XML 配置文件。 +9. `@Bean`:用于声明 Spring 管理的 Bean。 +10. @Scope:用于指定 Bean 的作用域。 +``` + + + +```java +package com.mdd.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class JdbcConfig { + @Bean + public DataSource DataSource(){ + DruidDataSource ds = new DruidDataSource(); + ds.setDriverClassName("com.mysql.cj.jdbc.Driver"); + ds.setUrl("jdbc:mysql:///aaa?useSSL=false"); + ds.setUsername("root"); + ds.setPassword("123456"); + return ds; + } +} + +``` + +```java +package com.mdd.config; + +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.config.MapperScannerBeanDefinitionParser; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + ssfb.setDataSource(dataSource); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} +package com.mdd.config; + +``` + +```java +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.config.MapperScannerBeanDefinitionParser; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); + ssfb.setTypeAliasesPackage("com.mdd.domain"); + ssfb.setDataSource(dataSource); + return ssfb; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer msc = new MapperScannerConfigurer(); + msc.setBasePackage("com.mdd.mapper"); + return msc; + } +} + +``` + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@ComponentScan("com.mdd") +@Import({MybatisConfig.class, JdbcConfig.class}) +public class SpringConfig { +} + + + +package com.mdd.domain; + +public class Brand { + private Integer id; + private String brandName; + private String companyName; + private Integer ordered; + private String description; + private Integer status; + @Override + public String toString() { + return "Brand{" + + "id=" + id + + ", brandName='" + brandName + '\'' + + ", companyName='" + companyName + '\'' + + ", ordered=" + ordered + + ", description='" + description + '\'' + + ", status=" + status + + '}'; + } + + public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) { + this.id = id; + this.brandName = brandName; + this.companyName = companyName; + this.ordered = ordered; + this.description = description; + this.status = status; + } + + public Brand() { + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBrandName() { + return brandName; + } + + public void setBrandName(String brandName) { + this.brandName = brandName; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public Integer getOrdered() { + return ordered; + } + + public void setOrdered(Integer ordered) { + this.ordered = ordered; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + +} + +``` + +```java + + +package com.mdd.mapper; + +import com.mdd.domain.Brand; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface BrandMapper { +@Select("select brand_name brandName, company_name companyName, ordered, description, status from tb_brand;") +List findAll(); +} + +``` + + + +```java +package com.mdd.service.impl; + +import com.mdd.domain.Brand; +import com.mdd.mapper.BrandMapper; +import com.mdd.service.BrandService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BrandServiceImpl implements BrandService { +@Autowired +private BrandMapper brandMapper; +@Override +public void sean() { +System.out.println("业务开始跑起来。。。。"); +List list = brandMapper.findAll(); +System.out.println(list); +} +} + +``` + + + +```java +package com.mdd.service; + +public interface BrandService { +public void sean(); +} + +``` + + + +```java +import com.mdd.config.SpringConfig; +import com.mdd.domain.Brand; +import com.mdd.mapper.BrandMapper; +import com.mdd.service.impl.BrandServiceImpl; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import java.util.List; + +public class App { +public static void main(String[] args) { +AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); +BrandServiceImpl service = ctx.getBean(BrandServiceImpl.class); +service.sean(); + +} +} + +``` diff --git "a/55 \346\235\250\346\227\255\344\270\234/20231229 SpringMVC\345\205\245\351\227\250.md" "b/55 \346\235\250\346\227\255\344\270\234/20231229 SpringMVC\345\205\245\351\227\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..243e08038d9223b8315cae06d0ffc9b73b88cc18 --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20231229 SpringMVC\345\205\245\351\227\250.md" @@ -0,0 +1,20 @@ +# 笔记 + +## SpringMVC入门 + +1. `@Component`:用于标记类为 Spring 管理的组件,会被自动创建和管理。 +2. `@Controller`:用于标记类为 MVC 其中的控制器组件。 +3. `@RestController`:是 `@Controller` 和 `@ResponseBody` 的组合注解,用于标记类为 RESTful 风格的控制器。 +4. `@Service`:用于标记类为服务层组件。 +5. `@Repository`:用于标记类为数据访问层组件(DAO)。 +6. `@Autowired`:用于自动装配依赖,通过类型进行匹配注入。 +7. `@Qualifier`:结合 `@Autowired` 使用,通过指定名称解决依赖注入的歧义性。 +8. `@Value`:用于给变量注入值。 +9. `@Configuration`:用于声明配置类,替代 XML 配置文件。 +10. `@Bean`:用于声明 Spring 管理的 Bean。 +11. `@Scope`:用于指定 Bean 的作用域。 +12. `@RequestMapping`:用于映射请求路径到控制器方法。 +13. `@PathVariable`:用于获取 URL 中的参数。 +14. `@RequestParam`:用于获取请求参数。 +15. `@ResponseBody`:用于指示方法返回值直接作为响应体。 +16. `@RequestBody`:用于将请求体内容绑定到方法参数。 \ No newline at end of file diff --git "a/55 \346\235\250\346\227\255\344\270\234/20240102 SpringMVC\345\205\245\351\227\2502.md" "b/55 \346\235\250\346\227\255\344\270\234/20240102 SpringMVC\345\205\245\351\227\2502.md" new file mode 100644 index 0000000000000000000000000000000000000000..75034cdd69b0efdbadf682aca25e9971064cad03 --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20240102 SpringMVC\345\205\245\351\227\2502.md" @@ -0,0 +1,124 @@ +# 笔记 + +```Java +//SpringMVC技术与Servlet技术功能等同,均属于web层开发技术和spring纯注解开发一样要定义一个配置类; +// @Controller 类注解用于设定SpringMVC的核心控制器bean +//@RequestMapping 方法注解或类注解用于设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀 +@RequestMapping("/save") +public void save(){ + System.out.println("user save ..."); +} +//@ResponseBody 方法注解或类注解 用于设置当前控制器方法或整个类下面的方法的返回值就是当前返回值 无需解析成页面 +@RequestMapping("/save") +@ResponseBody +public String save(){ + System.out.println("user save ..."); + return "{'info':'springmvc'}"; +} +//同时需要加载Tomcat服务器 Tomcat需要一个控制类 继承 实现方法 旧方法繁杂 推荐使用新方法 +public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{ + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + protected String[] getServletMappings() { + return new String[]{"/"}; + } + protected Class[] getRootConfigClasses() { + return new Class[]{SpringConfig.class}; + } +} +//请求参数包括简单参数 集合/数组类型 POJO类型参数 直接当做形参 +public String save(String name,String[] name,...){ + System.out.println("user save ..."); + return "{'info':'springmvc'}"; +} +//@RequestParam 形参注解绑定请求参数与处理器方法形参间的关系 如 传参的名字和形参无法对应这时需要使用该注解进行映射,集合类型会被当做处理方法 也需要该注解定义集合类型就是个参数 无需解析(集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系)annotation.Componen +``` + +# 作业 + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.mdd") +public class SpringMvcConfig { +} + + +package com.mdd.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; +//让Tomcat容器加载这个webConfig +public class webConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[0]; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + + +package com.mdd.controller; +import com.mdd.domain.Book; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.List; + +@Controller +@RequestMapping("/book") //所有方法的路径都带/book前缀 +@ResponseBody //所有方法,都直接返回结果 +public class BookController { + @RequestMapping("/find") + //@ResponseBody + //@RequestParam 形参注解,解决请求参数与形参不一样的情况 + public String findBook(@RequestParam("name") String bookName, String price){ + System.out.println("开始调用业务层,再调用数据层,找到了一本书===》"+bookName); + System.out.println("它的价格是"+price); + return "Find a book, its name:"+bookName+";its price:"+price; + } + @RequestMapping("/delete") + //@ResponseBody + public String deleteById (Integer id){ + return "delete a book by id:"+id; + } +// @RequestMapping("/findBook") +// public String findBook(Book book){ +// System.out.println("开始调用业务层,再调用数据层,找到了一本书===》"+book.getBookName()); +// System.out.println("它的价格是"+book.getPrice()); +// return "Find a book, its name:"+book.getBookName()+";its price:"+book.getPrice(); +// } + @RequestMapping("/findBook") + public String findBook(Book book){ + System.out.println(book); + return "Find a book,:"+book.toString(); + } + @RequestMapping("/hobby") + public String array(String[] hobby){ + System.out.println(hobby); + return "Find a Son,:"+ Arrays.toString(hobby); + } + @RequestMapping(value = "/list",produces = "text/html;charset=utf-8") + public String list(@RequestParam List list){ + System.out.println(list); + return "Find a full,:"+ list; + } +} +``` \ No newline at end of file diff --git "a/55 \346\235\250\346\227\255\344\270\234/20240104 Rest\351\243\216\346\240\274.md" "b/55 \346\235\250\346\227\255\344\270\234/20240104 Rest\351\243\216\346\240\274.md" new file mode 100644 index 0000000000000000000000000000000000000000..4a91f6b448404eb668b66f572cfbdae3529bc21a --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20240104 Rest\351\243\216\346\240\274.md" @@ -0,0 +1,161 @@ +# 笔记 + +## rest风格 + +```md +1.REST风格是什么? +Restful是一种软件架构风格、设计风格,通过url路径的方式和请求方式的配合进行参数传递以及完成不同的CRUD操作,使不同的请求方式和不同的操作进行了一个匹配统一。 + +2.REST请求方法设定 +Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下: + +请求方式 请求目的 +GET 用于获取资源 +POST 用于新建资源 +PUT 用于更新资源 +DELETE 用于删除资源 +``` + +# 作业 + +```java +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@Configuration +@ComponentScan("com.mdd") +@EnableWebMvc //开启json数据类型自动转换 +public class SpringMvcConfig { +} + + +package com.mdd.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[0]; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} + +package com.mdd.controller; + +import com.mdd.domain.User; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.Date; +import java.util.List; + +@Controller +public class UserController { + @RequestMapping("/save") + @ResponseBody + public String save(@RequestBody List name){ + //@RequestBody 请求体注解 + //数组形式和集合形式的数据基本相同 + System.out.println("成功接受了json形式的数据"+ name); + return "ok"; + } + @RequestMapping("/user") + @ResponseBody + public User userJson(@RequestBody User user){ + System.out.println("接收到一个user对象"+user); + return user; + } + + @RequestMapping("/userList") + @ResponseBody + public List userListJson(@RequestBody List users){ + System.out.println("接收到一个user对象数组"+users); + return users; + } + + @RequestMapping("/sendDate") + @ResponseBody + public String userJson(Date date,@DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date date2){ + System.out.println("接收到一个日期"+date); + System.out.println("接收到一个新日期"+date1); + System.out.println("接收到另一个新日期"+date2); + return "ok"; + } +} + + +package com.mdd.controller; + +import com.mdd.domain.Book; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +//@Controller +//@ResponseBody +@RestController +@RequestMapping(value = "/books") + +public class BookController { + //books 查询所有 + //@RequestMapping(method = RequestMethod.GET) + @GetMapping + public List getBooks(){ + ArrayList books = new ArrayList<>(); + books.add(new Book("三毛的书","666")); + books.add(new Book("四毛的书","666")); + books.add(new Book("五毛的书","666")); + books.add(new Book("六毛的书","666")); + return books; + } + //books 添加书本 + //@RequestMapping(method = RequestMethod.PUT) + @PostMapping + public Book addBooks(@RequestBody Book book){ + //手动模拟一个书本的集合 + System.out.println("接收到一个书本对象"+book); + System.out.println("保存成功"); + return book; + } + //books 修改书本 + @PutMapping + public Book editBooks(@RequestBody Book book){ + //手动模拟一个书本的集合 + System.out.println("接收到一个书本对象"+book); + book.setPassword("12345678"); + System.out.println("修改为"+book); + System.out.println("已修改成功"); + return book; + } + //books/1 查询id为1的书本 + @GetMapping("/{id}") + public Book getBooks(@PathVariable Integer id){ + System.out.println("接收到一个书本的ID"+id); + return new Book(id,"你猜是谁的书","66666"); + } + //books/1 删除id为1的书本 + @DeleteMapping("/{id}") + public String deleteBooks(@PathVariable Integer id){ + System.out.println("接收到一个书本的ID"+id); + return "delete ok"; + } +} +``` \ No newline at end of file diff --git "a/55 \346\235\250\346\227\255\344\270\234/20240105 SSM\346\225\264\345\220\210.md" "b/55 \346\235\250\346\227\255\344\270\234/20240105 SSM\346\225\264\345\220\210.md" new file mode 100644 index 0000000000000000000000000000000000000000..01e3e3e258294163786e1c5cf6de0e3b2eee31a2 --- /dev/null +++ "b/55 \346\235\250\346\227\255\344\270\234/20240105 SSM\346\225\264\345\220\210.md" @@ -0,0 +1,374 @@ +# 笔记 + +```md +1.REST风格是什么? +Restful是一种软件架构风格、设计风格,通过url路径的方式和请求方式的配合进行参数传递以及完成不同的CRUD操作,使不同的请求方式和不同的操作进行了一个匹配统一。 + +2.REST请求方法设定 +Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下: + +请求方式 请求目的 +GET 用于获取资源 +POST 用于新建资源 +PUT 用于更新资源 +DELETE 用于删除资源 +``` + +# 作业 + +```java +// 配置类 +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@ComponentScan({"com.mdd.service","com.mdd.mapper"}) +@PropertySource({"classpath:JDBC.properties"}) +@Import({JdbcConfig.class, MybatisConfig.class}) +public class SpringConfig { +} +package com.mdd.config; + +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class MybatisConfig { + @Bean + public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ + SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); + bean.setDataSource(dataSource); + bean.setTypeAliasesPackage("com.mdd.pojo"); + return bean; + } + @Bean + public MapperScannerConfigurer mapperScannerConfigurer(){ + MapperScannerConfigurer mapper = new MapperScannerConfigurer(); + mapper.setBasePackage("com.mdd.mapper"); + return mapper; + } +} +package com.mdd.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; + +import javax.sql.DataSource; + +public class JdbcConfig { + @Value("${jdbc.driver}") + private String driver; + @Value("${jdbc.localUrl}") + private String url; + @Value("${jdbc.username}") + private String userName; + @Value("${jdbc.classroomPassword}") + private String password1; + @Value("${jdbc.homePassword}") + private String password2; + @Bean + public DataSource dataSource(){ + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUsername(userName); + dataSource.setPassword(password2); + dataSource.setUrl(url); + dataSource.setDriverClassName(driver); + return dataSource; + } +} +package com.mdd.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@Configuration +@ComponentScan("com.mdd.controller") +@EnableWebMvc +public class SpringMvcConfig { +} +package com.mdd.config; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer { + @Override + protected Class[] getRootConfigClasses() { + return new Class[]{SpringConfig.class}; + } + + @Override + protected Class[] getServletConfigClasses() { + return new Class[]{SpringMvcConfig.class}; + } + + @Override + protected String[] getServletMappings() { + return new String[]{"/"}; + } +} +//实体类 +package com.mdd.pojo; + +public class Book { + private Integer id; + private String bookName; + private String author; + private String publisher; + + public String toString() { + return "Book{" + + "id=" + id + + ", bookName='" + bookName + '\'' + + ", author='" + author + '\'' + + ", publisher='" + publisher + '\'' + + '}'; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getBookName() { + return bookName; + } + + public void setBookName(String bookName) { + this.bookName = bookName; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + public Book() { + } + + public Book(Integer id, String bookName, String author, String publisher) { + this.id = id; + this.bookName = bookName; + this.author = author; + this.publisher = publisher; + } +} +package com.mdd.pojo; + +public class Result { + private Integer code; + private String msg; + private Object data; + + public static Result success(Integer code,Object data){ + Result result =new Result(); + result.setCode(code); + result.setData(data); + return result; + } + public static Result success(Integer code,String msg){ + Result result = new Result(); + result.setCode(code); + result.setMsg(msg); + return result; + } + public static Result failure(Integer code,String msg){ + Result result =new Result(); + result.setCode(code); + result.setMsg(msg); + return result; + } + + public String toString() { + return "Result{" + + "code=" + code + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public Result() { + } + + public Result(Integer code, String msg, Object data) { + this.code = code; + this.msg = msg; + this.data = data; + } +} +//表现层 +package com.mdd.controller; + +import com.mdd.pojo.Book; +import com.mdd.pojo.Result; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/books") +public class BookController { + @Autowired + private BookService bookService; + @GetMapping + public Result books(){ + List books = bookService.getAllBook(); + if (books!=null) return Result.success(200,books); + else return Result.failure(404,"查询失败,无数据"); + } + @GetMapping("/{id}") + public Result book(@PathVariable Integer id){ + Book book = bookService.getBook(id); + if (book!=null){ + return Result.success(200,book); + }else { + return Result.failure(404,"无法查询到和该ID对应的数据"); + } + } + @PostMapping + public Result update(@RequestBody Book book){ + Integer i = bookService.updateBook(book); + if (i>0) return Result.success(200,"更新成功"); + else return Result.failure(404,"更新失败"); + } + @PutMapping + public Result addBook(@RequestBody Book book){ + Integer i = bookService.addBook(book); + if (i>0) return Result.success(200,"新增成功"); + else return Result.failure(404,"新增失败"); + } + @DeleteMapping("/{id}") + public Result delBook(@PathVariable Integer id){ + Integer i = bookService.delBook(id); + if (i>0) return Result.success(200,"删除成功"); + else return Result.failure(404,"删除失败"); + } +} +//业务层 +package com.mdd.service; + +import com.mdd.pojo.Book; + +import java.util.List; + +public interface BookService { + List getAllBook(); + + Book getBook(Integer id); + + Integer updateBook(Book book); + + Integer addBook(Book book); + + Integer delBook(Integer id); +} +package com.mdd.service.Impl; + +import com.mdd.mapper.BookMapper; +import com.mdd.pojo.Book; +import com.mdd.service.BookService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BookServiceImpl implements BookService { + @Autowired + private BookMapper bookMapper; + public List getAllBook() { + List books = bookMapper.getAllBook(); + return books; + } + + public Book getBook(Integer id) { + return bookMapper.getBook(id); + } + + public Integer updateBook(Book book) { + return bookMapper.updateBook(book); + } + + public Integer addBook(Book book) { + return bookMapper.addBook(book); + } + + public Integer delBook(Integer id) { + return bookMapper.delBook(id); + } +} +//mapper映射接口(数据层) +package com.mdd.mapper; + +import com.mdd.pojo.Book; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +public interface BookMapper { + @Insert("insert into tb_book (book_name, author, publisher) values (#{bookName}, #{author}, #{publisher}) ") + Integer addBook(Book book); + + @Update("update tb_book set book_name = #{bookName},author=#{author},publisher=#{publisher} where id=#{id}") + Integer updateBook(Book book); + + @Select("select id, book_name as bookName, author, publisher from tb_book order by id desc;") + List getAllBook(); + + @Select("select id, book_name as bookName, author, publisher from tb_book where id = #{id};") + Book getBook(Integer id); + + @Delete("delete from tb_book where id= #{id};") + Integer delBook(Integer id); +} +``` \ No newline at end of file