spring框架学习

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程序步骤:

  1. 配置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>
  1. 类-表
  2. 映射文件xxxMapper.xml :写sql语句增删改查标签<select> 和 缓存等
  3. 测试类

做的项目:

  1. MyBatisProject1 最基本的方式CRUD
  2. MyBatisProject2 动态代理的方式CRUD

知识点

  1. MyBatis自带一些常见的类型处理器
    int–>number
  2. 自定义MyBatis类型处理器
    java -->数据库(jdbc类型)
  3. 三种类型(数据库、JDBC,java)具体可以看,Mybatis配置Mapping, JavaType和JDBCType的对应关系
  4. 关联查询(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>
  1. 日志: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. 延迟加载
    如果不采用延迟加载,就是立即加载,查询时会
  2. 查询缓存
    (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:表示将该方法(一个类)注入到容器中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值