一、什么是框架技术?
1. 为什么需要框架技术?
如何更快更好地写简历?
-
使用word简历模板
使用模板有什么好处呢?
-
不用考虑布局、排版等,提高效率
-
可专心在简历内容上
-
结构统一,便于人事阅读
-
新手也可以做出专业的简历
2. 什么是框架技术?
框架技术
-
是一个应用程序的半成品
-
提供可重用的公共结构
-
按一定规则组织的一组组件
框架的优势
-
不用再考虑公共问题
-
专心在业务实现上
-
结构统一,易于学习、维护
-
新手也可写出好程序
3. 主流框架技术介绍
-
Struts2
-
MVC设计模式的实现
-
拦截器
-
可变和可重用的标签
-
-
Hibernate
-
ORM,简化数据库操作
-
DAO层
-
-
Spring
-
依赖注入容器 / AOP实现
-
声明式事务
-
简化Java EE应用
-
黏合剂,将大家组装到一起
-
-
Spring MVC
-
结构最清晰的MVC Model2实现
-
高度可配置,支持多种视图技术
-
定制化开发
-
-
MyBatis
-
半自动化的ORM实现
-
DAO层
-
动态SQL
-
小巧灵活、简单易学
-
二、持久化与 ORM
1. 持久化
持久化: 是程序数据在瞬时状态和持久状态间转换的过程
2. ORM (Object Relation Mapping)
ORM(Object Relational Mapping)
-
编写程序的时候,以面向对象的方式处理数据
-
保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
-
在持久化对象上执行基本的增、删、改、查操作
-
对持久化对象提供一种查询语言或者API
-
对象关系映射工具
-
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
ORM 本质:
-
将实体类和表对应起来;
-
将类属性和表字段对应起来;
-
自动完成对象和记录的转换。
3. MyBatis 简介
-
MyBatis前身是iBatis,本是Apache的一个开源的项目 官方网站:mybatis
-
MyBatis 是一个 ORM 框架
-
实体类和SQL语句之间建立映射关系
-
-
特点
-
基于SQL语法,简单易学
-
能了解底层封装过程
-
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
-
方便程序代码调试
-
三、什么是 MyBatis-Plus ?
MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:MyBatis-Plus
基本架构
1. 入门案例
-
准备数据库和数据。本例我们使用
webDVD
库 -
创建
SpringBoot
项目,选择功能:-
Lombok
-
Spring Web
-
MySQL Driver
-
MybatisPlus
-
-
修改
application.yml
配置数据源spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/webdvd?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username: root password: 123
-
MybatisPlus
配置(分页)@Configuration @MapperScan("com.by.mybatisplus01.dao") public class MybatisPlusConfig { /** * 添加分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加 //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType return interceptor; } }
-
添加实体类
@Data @AllArgsConstructor public class Dvd { private Integer id; private String name; private Integer state; private Date lendDate; private Integer count; }
-
添加
dao
接口package com.by.mybatisplus01.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.by.mybatisplus01.entity.Dvd; public interface DvdMapper extends BaseMapper<Dvd> { }
注: 对!接口是空的,只需继承
BaseMapper
即可。 -
测试。增删改查操作
package com.by.mybatisplus01; import com.by.mybatisplus01.dao.DvdMapper; import com.by.mybatisplus01.entity.Dvd; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.util.*; @SpringBootTest class MybatisPlus01ApplicationTests { @Resource private DvdMapper dvdMapper; // @Test public void test01_findAll(){ List<Dvd> list = dvdMapper.selectList(null); list.forEach(System.out::println); } // @Test public void test02_get(){ Dvd dvd = dvdMapper.selectById(10); System.out.println(dvd); } // @Test public void test03_insert(){ Dvd dvd = new Dvd(null, "教父I", 0, new Date(), 0); int r = dvdMapper.insert(dvd); System.out.println(r); System.out.println(dvd); } // @Test public void test04_update(){ // 只修改非空字段 Dvd dvd = new Dvd(41, null, null, null, 100); int r = dvdMapper.updateById(dvd); System.out.println(r); System.out.println(dvd); } // @Test public void test05_delete(){ int r = dvdMapper.deleteById(41); System.out.println(r); } // 根据条件查询记录 // @Test public void test06_selectOne(){ Map<String, Object> cond = new HashMap<>(); cond.put("state", 1); // key 是列名 List<Dvd> list = dvdMapper.selectByMap(cond); list.forEach(System.out::println); } // 根据 id 批量查询 // @Test public void test07_selectByIds(){ List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(3); ids.add(40); List<Dvd> list = dvdMapper.selectBatchIds(ids); list.forEach(System.out::println); } }