day05

Day05-01 知识点回顾


1.SpringBoot工程中的HikariCP应用

1)为什么使用连接池?(用空间换时间,提高数据库访问性能)
2)市面上常用连接池?(c3p0,dbcp,druid,hikaricp)
3)连接池的设计思想?(数据的存储结构,算法,线程安全)

4)Springboot工程中hikaricp入门应用
4.1)创建项目module
4.2)添加依赖(mysql,spring data jdbc)
4.3)连接配置(application.properties)
4.4)单元测试 (定义单元测试类,然后耦合DataSource接口,基于DataSource获取连接)

5)常见问题(FAQ)分析
5.1)为什么说建立连接和释放连接是一个耗时操作?(TCP->3次握手,四次挥手)
5.2)Java中连接池的规范是什么?(DataSource)
5.3)从HikariCP中获取连接的过程?(DataSource->HikariPool->ConcurrentBag->CopyOnWriteArrayList->…)

6)BuG分析
6.1)NPE (访问属性或方法的对象为空)
6.2)SqlException
6.3)UnkownHostException (检查url)

7)基于HikariCP实现一个JDBC 应用?
7.1)构建GoodsDao接口及方法(List<Map<String,Object>>findGoods方法
7.2)构建GoodsDao接口实现类GoodsDaoImpl并重写findGoods方法
7.3)在findGoods方法内部基于JDBC API访问数据库数据
7.3.1)从DataSource获取连接Connection
7.3.2)创建Statement对象
7.3.3)发送SQL
7.3.4)处理结果集ResultSet
7.3.5)释放资源
7.4优化FindGoods方法内部结果映射过程(通过ResultSetMetaData中数据让代码更加灵活)

2. SpringBoot工程中的MyBatis应用

1)是什么?(持久层框架,半成品-只解决了数据的持久化问题)
2)为什么选择它?(开源,简单,功能强大,灵活,稳定,…)
3)应用场景?(互联网软件应用都倾向于使用mybatis)

4)SpringBoot工程中的初始环境搭建
4.1)创建项目module并添加依赖(mysql,spring data jdbc,mybatis)
4.2)初始配置(application.properties->url,username,password,mapper-locations)
4.3)单元测试(初始化环境测试,检查是否可以获取mybatis中的会话对象-SqlSession)

5)FAQ?
5.1)MyBatis框架实现与数据库交互的入口对象?SqlSession
5.2)SqlSession对象是如何创建的?SqlSessionFactory
5.3)你了解哪些具体的SqlSession对象呢?(DefaultSqlSession,SqlSessionTemplate)


Day05-02 SpringBoot 工程中mybatis业务实现

1.业务分析

从商品库中基于mybatis提取商品信息,并在单元测试中进行数据输出.

2.业务API设计

1)Goods类(pojo-封装商品信息)
2)GoodsDao接口 (定义商品数据的访问规范)
3)GoodsDao接口的实现类GoodsDaoImpl (实现商品数据的访问规范)
4)GoodsDaoTest单元测试类 (测试商品数据的操作)

3.业务时序访问设计

GoodsDaoTest(testFindGoods)->GoodsDaoImpl(findGoods)->SqlSession->DB

4.商品查询业务具体落地实现?

第一步:定义Goods类型并添加相关属性以及set/get/toString方法
第二步:定义GoodsDao接口并添加findGoods方法(返回值类型为List)
第三步:定义GoodsDaoImpl实现类以及Sql映射(GoodsMapper.xml)
第四步:定义GoodsDaoTests单元测试类,基于单元testFindGoods单元测试方法进行数据测试

FAQ?

1)映射文件路径的配置是固定吗?(路径以classpath作为前缀是固定写法)
2)会话过程中使用的SqlSession对象是你创建吗?(不是,@Autowired)
3)基于SqlSession会话过程中的使用的字符串statement如何理解?(key=namespace+"."+element Id)
4)你了解mybatis框架底层的MappedStatement对象吗?(用于封装Sql映射的一个pojo对象)

Bug?

1)IllegalArgumentException (Mapped Statement Collections does not contains …)

5.MyBatis框架为我们的接口创建实现类?

在GoodsDao接口上添加@Mapper注解或者在启动类上添加
@MapperScan(“dao接口所在包”)

FAQ?

1)@Mapper注解的作用是什么?
描述数据逻辑层接口,告诉mybatis框架这个接口的实现类,由mybatis创建,
并将其实现类的对象交给spring管理,Spring会为他管理的这个bean起个名字
,默认为接口名,然后首字母小写。

2)MyBatis为我们的Dao接口创建的实现类及其方法内部做了什么?

a)获取sqlSession对象
b)获取sql映射的key信息(namespace,elementId)
c)基于statement获取sql映射信息(底层是存储在了MappedStatement对象中)
d)基于sqlsession以及sql实现与数据库的会话。

3)数据层接口(XxxDao)可以有多个实现类吗?(可以,但是需要时注入那个需要我们进行设计)

Bug?

1.BindingException (mybatis绑定异常)

6.定义商品业务对象在其实现中进行日志的记录?

第一步:定义GoodsService接口及方法(List findGoods())
第二步:定义GoodsService实现类GoodsServiceImpl并重写方法进行日志记录
第三步:定义GoodsService单元测试类不目标业务方法进行单元测试

FAQ?

1)业务类中使用的日志API是谁?(org.slf4j.Logger)
2)日志API的应用中使用到了什么设计模式?(门面模式)
3)你了解哪些日志的级别吗?(trace,debug,info,error)
4)你知道日志输出时底层为什么要定义日志级别吗?(便于对日志行为进行打开,关闭操作)
5)日志输出时"{}"作用是什么?(占位符,类似sql中的?)
6)日志可以记录到文件吗?如何配置?(可以,logging.file.path)
7)为什么要将日志的记录放到商品业务逻辑对象中?(日志记录本身就属于一个业务)

Bug?

1)NoSuchBeanDefinition (这里出现了GoodsServiceImpl类找不到的现象)


homework

1.总结
1)整合mybatis的过程以及FAQ,BUG
2)掌握业务逻辑层对象的定义及日志记录的实现
2.预习Spring MVC在Spring工程中的实现
https://segmentfault.com/a/1190000025178018

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值