1.Spring
(1)IOC(Inversion of Control)
以前是通过new对象,然后赋值
现在是通过在spring ioc容器中配置,然后直接获取
SpringIOC容器:创建对象,给对象的属性赋值。
容器:是一个服务器软件,一个框架(spring)
spring中一个bean一个对象
使用注解定义bean
@Component细化:
dao层注解:@Repository
service层注解:@Service
控制器层注解:@Controller
(2)AOP
切面:例如,一个aMethod()方法就算一个切面,它横切到多个业务之中。
切入点:例如,调用add()就算一个切点。
扫描器会将指定的包中的@Component @Service @Respository @Controller修饰的类产生的对象,增加到IOC容器中
2.MyBatis
MyBatis可以简化JDBC操作,实现数据的持久化。(访问数据库,对表中的数据执行增删改查。)
ORM:对象关系映射表(如:一个person对象对应一个person表),MyBatis是ORM的一个实现。ORM可以使开发人员像操作对象一样,操作数据库表。
为了将对象和表一一对应起来,需要一个mapper文件。
开发MyBatis程序步骤:
- 配置MyBatis,conf.xml:配置数据库信息和需要加载的映射文件
<dataSource type="POOLED">
<!--配置数据库信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test2"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
- 类-表
- 映射文件xxxMapper.xml :写sql语句增删改查标签<select> 和 缓存等
- 测试类
做的项目:
- MyBatisProject1 最基本的方式CRUD
- MyBatisProject2 动态代理的方式CRUD
知识点
- MyBatis自带一些常见的类型处理器
int–>number - 自定义MyBatis类型处理器
java -->数据库(jdbc类型) - 三种类型(数据库、JDBC,java)具体可以看,Mybatis配置Mapping, JavaType和JDBCType的对应关系。
- 关联查询(MyBatis框架中只有:一对一,一对多)
实现方式:resultMap
<!--使用MyBatis 提供的 resultMap 实现一对一 -->
<select id="queryPersonByIdWithOO" resultMap="person_card_map" parameterType="int">
select p.*,c.* from person p inner join personcard c
on p.cardid = c.cardid
where p.stuno = #{id}
</select>
<resultMap type="person" id="person_card_map">
<!--分为主键id 和 非主键 result-->
<id property="id" column="stuno" />
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex" javaType="boolean" jdbcType="INTEGER"/>
<result property="grade" column="grade"/>
<!--一对一时,对象成员使用association映射;javaType指定该属性的类型-->
<association property="card" javaType="PersonCard">
<id property="cardId" column="cardid"/>
<result property="cardInfo" column="cardinfo"/>
</association>
</resultMap>
- 日志:log4j
(1)导入Loganj包;(2)开启日志,在conf.xml文件中开启;
(3)编写配置日志输出文件;
log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
日志级别:debug < info < warn < error
如果设置为info,则只显示 info及以上级别的信息;
建议:在开发时设置debug,在运行时设置为info或以上。
可以通过日志信息,详细的阅读mybatis执行情况(观察mybatis实际执行sql语句 以及SQL中的参数 和返回结果)
- 延迟加载
如果不采用延迟加载,就是立即加载,查询时会 - 查询缓存
(1)一级缓存(有SqlSession对象【内存的对象】就可以操作数据库了)
一级缓存:同一个SqlSession对象,MyBatis默认开启一级缓存,如果用同样的SqlSession对象查询相同的数据,则只会在第一次查询时向数据库发送SQL语句,并将查询的结果放入到SqlSession中(作为缓存),后续再次查询该对象时,则直接从缓存中查询该对象即可(即省略了数据库的访问)
(2)二级缓存
java中序列化(将内存的东西放到硬盘中需要序列化),二级缓存是在硬盘里面。
commit()操作会清理缓存
2.SpringMVC
注释:@RequestMapping(“xxx”) 表示拦截xxx请求
映射是去匹配@RequestMapping注解,可以和方法名、类名不一致。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@Autowired 给Controller注入一个属性(根据类型注入)
@Qualifier(" ") 给Controller注入一个属性(根据名字注入)
通过method指定 请求方式(get 、post、delete、put)
@PathVariable()用于接受请求时传过来的参数值
SpringBoot
@Override是伪代码,表示重写。(当然不写@Override也可以),不过写上有如下好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。
@ConfigurationProperties注释表示从yml文件或者properties文件中批量注入对象属性。
@Value表示单个注入值
@PropertySource:加载不是默认路径下的properities配置文件
@ImportResource
spring boot自动装配/自动配置
spring等配置文件 默认会被spring boot自动配置好
如果要自己编写spring等配置文件,要使用@ImportResource才能识别路径(不推荐)
@Configuration:表示该类是一个配置类
@Bean:表示将该方法(一个类)注入到容器中