–>CTRL+I:重写接口的方法
–>CTRL+E:选择IDEA页面
–>submit提交表单 阻止同步提交–>return false;
–>内联表单 需要将table包含在内部
–>ajax中遍历集合两种方法:
jq对象.each(function(index,element){
index:表示遍历元素的索引,默认从0开始;
element:遍历元素的对象;
});
for (var i=1;i<数组.length ;i++ ) {
}
–>全局查询快捷键?
CTRL+shift+f;
–>数据库当前时间函数:
NOW()
–>sql中的数据出现隐式转换时会出现–索引失效–全表扫描?
当int–>String时会出现索引失效,造成全表扫描
当string–>int时不会处出现.
建议:查询数据时,转换为相应格式数据后再查询sql;
–>Linux grep和find的区别?
grep是查找匹配条件的行,find是搜索匹配条件的文件。
–>response应用
操作响应行:协议/版本状态码
状态码: 200 404 500 302 304
APl: response.setStatus(302)
操作响应头: key:value
常用: refresh, location, content-type,content-disposition
定时刷新: response,setHeader(refresh,“4;url”);
重定向: location
设置响应数据类型和编码: content-type
文件下载: content-dispositione
操作响应体:
1、字符数据: getwriteroO.ritn(“aa”);
2、字节数据: getOutputStream();
–>:Cookie 分类:
1、会话级Sll:浏览器关闭后销毁(默认):
2、持久化Cookie:设罝最大存活时间 cookie.setMaxAge( 60S ):
–>下载业务逻辑:两个头+两个流(流拷贝)
【两个头】
1. 设置响应头:Content-Disposition 告诉浏览器以附件的形式来处理文件;
2. 设置响应头: response.setContentType(mimeType) 告诉浏览器下载的文件的类型;
【两个流】
1. 将文件读取到流里边: FileInputStream fin = new FileInputStream(file);
2. 将流写给浏览器:response.getOutputStream().write(arr,0,len);
–>ctrl+shift+t:在接口中使用后,会快速生成单元测试
需要切换为junit4,提前导入依赖
–>Mapper接口的动态代理实现,需要遵循以下规范:
1. 映射文件中的命名空间(名称空间)与Mapper接口的全路径一致
2. 映射文件中的statement的Id与Mapper接口的方法名保持一致
3. 映射文件中的statement的ResultType必须和mapper接口方法的返回类型一致(即使不采用动态代理,也要一致)
4. 映射文件中的statement的parameterType必须和mapper接口方法的参数类型一致(不一定,该参数可省略)
–>sqlSession.getMapper(UserMapper.class)方法会通过动态代理生成一个代理的实现类
–>思考:接口中是否可以有重载的方法?
注意:由于使用的是接口方式进行查询(动态代理),而其它要求映射文件中的statement的Id与Mapper接口的方法名保持一致。
而statement的id由于是唯一的不能重复,因此也就意味着接口中的方法也不能重名,那也就是说不能有重载的方法了。
–>通过properties引入外部资源文件之后,就可以通过${xxx}的方式使用资源文件里的参数了,不可使用#{xxx}。
–>mybatis中 insert:编写插入语句
id:插入语句的唯一标识
parameterType:插入语句的参数类型,可以省略。
useGeneratedKeys:开启主键自增回显,将自增长的主键值回显到形参中(即封装到User对象中)
keyColumn:数据库中主键的字段名称
keyProperty:pojo中主键对应的属性
–>※面试题(#、KaTeX parse error: Expected 'EOF', got '#' at position 35: …中,参数传递有2种方式,一种是#̲{}另一种是{},两者有着很大的区别:
#{}实现的是sql语句的预处理参数,之后执行sql中用?号代替,使用时不需要关注数据类型, mybatis自动实现数据类型的转换。并且可以防止SQL注入。
$0实现是sql语句的直接拼接,不做数据类型转换,需要自行判断数据类型。不能防止SQL注入
是不是$0就没用了呢?不是的,有些情況下就必须使用$0,举个例子:
在分表存储的情況下,我们从哪张表查询是不确定的,也就是说sql语句不能写死,表名是动态的,查询条件是固定的,这样:SELECT* FROM ${tableName} WHERE id = #{id}
总结:
#{}占位符,用于参数传递。
${}用于sql拼接。
–>Spring的核心
IoC(Inversion of Control 控制反转): 将对象创建权利交给Spring工厂进行管理。
AOP(Aspect Oriented Programming 面向切面编程),基于动态代理的功能增强方式。
–>自定义的类可以使用注解,否则,只能在容器中注册
–>spring的注解@
@Component:相当于在xml中配置了一个bean,除了表现层,业务层,持久层之外的都是用这个配置bean
@Controller:用于表现层的衍生注解
@Service:用于业务层的衍生注解
@Repository:用于持久层的衍生注解
注:前四个作用一样
相当于xml中set注入或p标签注入或构造器注入
@AutoWired:自动按照类型注入.当使用注解注入属性时,set方法可以省略只能注入其他bean类型;
@Qualifired(value=“xxx”):value可以不写在自动按照类型注入基础之上,再按照bean的id注入;
给字段注入时不能独自使用,必须和@Qualifired一起使用;
单独使用时:在方法的参数位置,其ioc容器中找有没有bean符合参数要求,找到就赋值
@Resource(name=“xxx”):和上述两个结合效果一样,但是不支持jdk1.9版本,故舍弃
@Value(value=“xxx”):注入基本类型和String类型的数据;value用于指定值;
@Configuration:声明一个配置类
@ComponentScan:配置注解扫描的包
@Import(value={jdbcConfig.class}):引入其他类到配置类中
@PropertySource:加载外部资源文件
@Bean:将方法返回的对象装配到容器中
new AnnotationConfigApplicationContext(配置类.class):获取容器
@RunWith(value = SpringJUnit4ClassRunner.class):整合spring和junit,替换新的运行器使其可以初始化spring容器
@ContextConfiguration:value属性:配置xml文件路径;class属性:配置配置类;
@PostContruct:初始化
@PreDestory:销毁
@Scope:单双例
–>注解使用:2步
开启注解扫描–>在类上使用注解