Springboot demo1项目(一)
2022-09-06 10:19:21
1. 注解有什么用?
注解里面不用写方法变量什么的,只起一个标注的作用,不是具体代码,标识类或方法等需要执行的任务
在编译期间或者运行期间读取程序,通过反射机制去判断及读取相应操作,当程序运行时需要反射机制去获取哪些方法、类、变量等添加了该注解。
自定义注解:
- 添加一个方法注解InitMethod
- 添加一个方法注解InitMethod
1 | package cn.bdqn.demo1; |
- 写一个InitDemo类使用方法注解
1 | package cn.bdqn.demo1; |
- 在Test类中遍历InitDemo类中所有方法参考:https://www.bilibili.com/video/BV1Py4y1Y77P/?spm_id_from=333.788.recommend_more_video.5&vd_source=e18fd054c638dd62bfe0ba010156eb06
1
2
3
4
5
6
7
8
9
10
11
12package cn.bdqn.demo1;
import java.lang.reflect.Method;
public class Test{
public static void main(String[]args) throws Exception{
Class clazz=Class.forName("cn.bdqn.demo1.InitDemo");//拿到InitDemo类
Method[] methods=clazz.getMethods();//遍历InitDemo类中所有方法
if(methods!=null){
for(Methodmethod:methods){
Boolean isInitMethod=method.isAnnotationPresent(InitMethod.class);//isAnnotationPresent判断是否拥有某一个注解,并返回布尔类型
if(isInitMethod){
method.invoke(clazz.getConstructor(null).newInstance(null),null);
}}}}}
2. 程序中所用到的注解
- main方法:
- @SpringBootApplication:申明让Springboot自动给程序进行必要的配置,这个配置等同于:(@Configuration 、@EnableAutoConfiguration 、 @ComponentScan) 三个配置;
- @MapperScan(value = “cn.bdqn.demo1.mapper”):指定要扫描的Mapper类的包的路径;
- controller层中:
- @Controller :用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),
一般这个注解在类中,通常方法需要配合注解@RequestMapping - @Resource:与@Autowired 用法 用法相似,也是做依赖注入的,从容器中自动获取bean。但还是有一定的区别;
- @RequestMapping(“/list”):提供路由信息,负责URL到Controller中的具体函数的映射
- @GetMapping(“/updatePage/{id}”):get请求,等价于@RequestMapping(value=”/updatePage/{id}”,method=RequestMethod.GET)
- @PostMapping(“/update”):post请求,等价于@RequestMapping(value=”/update”,method=RequestMethod.POST)
- @PathVariable:在@RequestMapping注解方法中获取URL变量
1
2
3
4@RequestMapping(value="/hello/{id}/{name}",method= RequestMethod.GET)
publicString sayHello(@PathVariable("id") Integer id,@PathVariable("name") String name){
return"id:"+id+" name:"+name;
}
- @Controller :用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),
- service层中:
- @Service:一般用于修饰service层的组件;
- @Override:重写父类;
- mapper层/dao层:
- @Mapper:使用@Mapper注解要定义成一个接口interface;不用写mapper映射文件(xml);为这个接口生成一个实现类,让别的类进行引用;如果有多个类的话,可以使用@MapperScan进行注解,一次性注解多个包;
- @Select(“select * from user”):选择数据库中的数据
- @Insert(“ insert into user( username,password ) values (#{username},#{password}) “):插入数据库中的数据
- @Delete(“ delete from user where id= #{id} “):删除数据库中的数据
- @Select(“select * from user where id= #{1} “):按id选择数据库中的数据
- @Update(“update user set username=#{username},password=#{password} where id=#{id} “):更新数据库中的数据
参考:https://blog.csdn.net/fenlin88l/article/details/89466723
https://blog.csdn.net/weixin_40753536/article/details/81285046
3. Model层
1 | @RequestMapping("/list")//路径 |
- Model是一个接口,包含addAttribute方法,其实现类是ExtendedModelMap。ExtendedModelMap继承了ModelMap类,ModelMap类实现了Map接口。
- 在控制器中,数据会存放到Model对象中,当需要生成HTML的时候,模板引擎会根据名字来定位数据。从广义上来说,Model指的是MVC中的M,即Model(模型)。从狭义上讲,Model就是个key-value集合。
- 往Model里放数据还有另外一种方式,使用ModelAndView。正如它的名字一样,ModelAndView将Model和视图名绑定在一起,作为请求处理方法的返回值。
参考:https://fookwood.com/spring-boot-tutorial-9-model
4. Integer和int的区别
基本数据类型: boolean,char,byte,short,int,long,float,double
封装类类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
4.1 基本使用对比
- Integer是int的封装类;int是基本数据类型;
- Integer变量必须实例化后才能使用;int变量不需要;
- Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;
- Integer的默认值是null;int的默认值是0。
4.2 深入对比
- 由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)
1
2
3Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false - Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为封装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
1
2
3Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true - 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。因为非new生成的Integer变量指向的是静态常量池中cache数组中存储的指向了堆中的Integer对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的对象引用(地址)不同
1
2
3Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false - 对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
1
2
3
4
5
6
7Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false - 自动装箱和拆箱
- 自动装箱:将基本数据类型重新转化为对象
// 声明一个Integer对象,用到了自动的装箱:解析为:1
2Integer num = Integer.valueOf(9);
Integer num = 9; - 自动拆箱:将对象重新转化为基本数据类型,因为对象时不能直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
/ /声明一个Integer对象
Integer num = 9;
// 进行计算时隐含的有自动拆箱
System.out.print(num--);
- 自动装箱:将基本数据类型重新转化为对象
参考:https://blog.csdn.net/chenliguan/article/details/53888018
5. HttpServletRequest和HttpServletReponse
HttpServletRequest对象专门用于封装 HTTP 请求消息,简称 request 对象。
HttpServletReponse 对象用于封装 HTTP 响应信息。