@Bean 基础声明
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。
IDEA 生成返回值对象快捷键 :快捷键ctrl+alt+v
IDEA快速生成get、set等方法: 快捷键alt+insert快速进入生成方法界面
bean:存放数据1、存放来自于数据库的数据。2、存放来自客户端的数据(表单提交),存数据的中介作用
dao:data access object:数据访问对象,主要做的事情就是对数据库单表进行增删改操作,查的有可能是多表管理查询
service: 对应界面上的操作,增删改查,至于这个业务涉及到几个dao,就调用几个dao
servlet:1、接受用户请求,进行处理(doget/dopost)调用service,得到数据
2、做出响应(HTML):通过PrintWriter out = response.getWriter();通过out输出HTML代码
pojo(Plain Ordinary Java Object):普通的Java对象,其实就是简单的JavaBean实体类。对应数据库里的某一张表,pojo里的每一个属性都和该表中的字段一 一对应。
vo(value object):值对象,又称表现层对象,对应展示界面的数据对象。比如一个前台展示的数据列表,这个列表中的姓名和用户名分别是存在于两个表中的数据,此时数据显示时查询语句用到了多表查询sql,查询出来的数据包含了两个表的字段,此时使用一个JavaBean实体类无法存储返回结果中两个表的数据字段,因此将这两个表中使用到的字段或属性重新封装为一个新的JavaBean,这个JavaBean就叫做vo。通俗来说,vo就是一个自定义的、多个表的属性或字段的集合。
entity(实体类):
A .就是属性类,通常定义在model层里面
B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段。
好处:
1.对对象实体的封装,体现OO思想。
2.属性可以对字段定义和状态进行判断和过滤
3.把相关信息用一个实体类封装后,我们在程序中可以把实体类作为参数传递,更加方便。
C. 说白了就是为了让程序员在对数据库操作的时候不用写SQL语句
D. 就是一个数据库表生成一个类
这样做对数据库操作起来方便
编写代码较少 提高效率 可以使程序员专注逻辑关系
E. 实体类就是把对某一个表的操作全写在一个类中.
List特点:元素有放入顺序,元素可重复 ,list支持for循环,也就是通过下标来遍历,也可以用迭代器
Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set的Object必须定义equals()方法 ,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:List可以动态增长,查找元素效率低,插入删除元素效率高。
array:长度固定,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
持久层,又叫数据访问层。是和数据库直接打交道的层。所有增删改查的操作全在这个层里
持久层的工作:就是把数据或者信息保存到存储设备中.
持久层的意义:把操作存储备的工作封装起来以便于代码的复用.持久化的主要的应用是将内存中的对象存储在关系的数据库中或者存储在磁盘中.XML数据文件汇总.
JDBC 就是一种持久化机制.文件IO也是一种持久化机制.
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
基于Ant路径匹配规则AntPathMatcher
SpringBoot 常用的几种ApplicationListener监听器
springboot 监听器
Spring Boot中使用监听器
过滤器的实现基于回调函数
拦截器基于Java的反射机制【动态代理】实现。
springboot 集成 swagger 以及swagger 常用注解
SpringBoot 使用 Future 实现多任务并行
asnyc – springboot
Future & Callable 使线程具有返回值的功能,其中future.get() 个是阻塞方法,通过调用所有future的get()来判断线程是否全部结束。
package com.wzl.xman.servicea.service.impl;
import com.wzl.xman.servicea.service.ThreadBizService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Service
public class ThreadBizServiceImpl implements ThreadBizService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private final static ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 2000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(500));
@Override
public void threadBizMethod03(String groupName) {
logger.info(groupName + "==threadBizMethod Start==");
List<Future> futures = new ArrayList<Future>();
for (int i = 1; i <= 10; i++) {
MyCallable runnable = new MyCallable(groupName, i * 1000);
futures.add(executor.submit(runnable));
}
try {
for (Future<?> future : futures) {
String result = (String) future.get();//阻塞方法,获取线程返回结果
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
logger.info(groupName + "==threadBizMethod End==");
}
}
/**
* 线程处理类(带返回结果的)
*/
class MyCallable implements Callable<String> {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private long millis;
private String groupName;
public MyCallable(String groupName, long millis) {
this.groupName = groupName;
this.millis = millis;
}
@Override
public String call() throws Exception {
try {
logger.info(groupName + "开始处理业务!" + millis);
Thread.sleep(millis);
logger.info(groupName + "处理业务结束!" + millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
return groupName + "=" + millis;
}
}
1.处理全局异常
@ControllerAdvice 配合 @ExceptionHandler 实现全局异常处理
@ControllerAdvice//拦截所有controller
@ControllerAdvice(“com.lsl.mylsl”)//拦截com.lsl.mylsl包及子包下的controller
@ControllerAdvice(basePackages = “com.lsl.mylsl”)//同上
@ControllerAdvice(basePackages = {“com.lsl.mylsl”,“com.lsl.mjx”})//拦截多个不同包下的controller
@ControllerAdvice(annotations={CustomAnnotation.class})//如果自定义一个注解@CustomAnnotation,拦截有这个注解的controoler
@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常,比如这样:@ExceptionHandler(NumberFormatException.class),此时注解的参数是NumberFormatException.class,表示只有方法抛出NumberFormatException时,才会调用该方法。
MyBatis Generate的使用:批量生成实体类,数据库接口类和mapper
Shiro
自定义Realm之继承AuthorizingRealm