1.IDEA环境配置
字体控制大小
2.自动提示设置
3.设置方法提示
4.字符集的设置
5.自动编译
6.maven的配置
settings.xml里的文件设置
D:allmavenallscarepository -->nexus-aliyun * Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public repo2 Mirror from Maven Repo2 http://repo2.maven.org/maven2/ central maven-default-http-blocker external:http:* Pseudo repository to mirror external repositories initially using HTTP. http://0.0.0.0/ true
local repository的地址,一定要与这个相同,要不然永远maven报错
local repository里的地址,按照setting.xml里地址来写。切记
自已经常出这个小错,在创建新项目或者仓库时,
1.6.1Maven配置
1.配置本地仓库
D:allmavenallscarepository -->
3.配置私服镜像
aliyun aliyun for maven * https://maven.aliyun.com/repository/public
3.
- maven中jdk配置(eclipse中配置 选做)
jdk-1.8 true1.8 1.8 1.8 1.8
1.7安装Lombok
1.7 Lombok作用
自动生成实体对象方法:Get/Set/toString/无参构造有参构造/equals/hashcode...
2.springboot的环境调度
默认地址: https://start.spring.io
阿里云地址: https://start.aliyun.com
其中的默认地址: https://start.spring.io与阿里云地址: https://start.aliyun.com所下载的
pom里的写法也不一样
默认地址: https://start.spring.io里新创建的
阿里云地址: https://start.aliyun.com
2.5.2Maven项目的打包方式
1.默认条件是jar 包
2.web项目可以打成 war包
3.还可以打成pom 如果该项目是父级就是pom包
子集包的版本号可以到父级里面云看,
2.4关于POM.xml文件说明
2.4.1 SpringBoot原生POM.xml文件4.0.0 org.springframework.boot spring-boot-starter-parent2.5.4 com.example springboot_pom0.0.1-SNAPSHOT springboot_pom springboot_pom 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-maven-plugin
2.4.2 阿里云项目pom.xml配置
2.5 关于pom.xml标签说明 2.5.1 关于坐标的说明4.0.0 com.jt springboot_demo10.0.1-SNAPSHOT springboot_demo1 springboot_demo1 1.8 UTF-8 UTF-8 2.4.1 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin2.4.1 com.jt.SpringbootDemo1Application repackage repackage
说明: 该坐标在本地仓库中是唯一标识符.是当前项目打包/被依赖的唯一路径.
com.jt
springboot_demo1
0.0.1-SNAPSHOT
springboot_demo1
springboot_demo1
2.5.3 父级项目定义
通过dependencyManagement标签统一定义父级工程,在其中定义了springBoot项目所有兼容的版本信息.
所以依赖项中不需要添加版本号,也可以正常依赖jar包文件
org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import
2.5.4依赖相关
扩展: 如果项目中依赖第三方jar包文件报错! 如何处理?
问题说明: 有时根据坐标下载jar包文件时,可能由于网络问题,导致jar包下载不完整.
解决方案: 根据第三方的坐标,查找到本地仓库的位置,之后删除 重新下载.
思想: “开箱即用” 是springBoot设计的核心 越来越简单!!!
什么是启动项: SpringBoot为整合第三方框架,写了启动项的jar包文件,其中官方已经将所有的配置信息/需要依赖的jar包文件提前测试并且定义.
2.5.5 maven依赖的传递性org.springframework.boot spring-boot-starter-web
说明: maven中的jar包是有依赖的传递性
例如: A项目依赖B.jar包, B.jar依赖C.jar. 在项目中,只需要添加B.jar.则B/C.jar都会自动添加.
实际应用: 如图web.jar包中依赖了很多其它的第三方jar包文件.
mavenjar包查询网址: https://mvnrepository.com/
依赖项的相关说明:
2.本地仓库文件说明:
步骤:
1. 当maven开始解析项目的POM.xml文件时,根据依赖的坐标,找到指定的jar包文件.之后添加该依赖.
2. 之后扫描当前文件中的 xxx.pom文件.
3. 扫描pom.xml文件中的依赖信息dependency
4. 根据dependency的坐标 重复执行上述的操作.直到所有的依赖都添加完成.
需求: 网络数据传输,一般都需要进行加密处理.maven中采用SHA1数字签名的加密算法,保证数据传递的有效性!!!
说明: maven数据传递有效性原理图
2.5.7.1 SHA1介绍:
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为**40个十六进制数**。
关键字: 数字证书.
2.5.7.2 关于Hash说明
问题1: 常见hashcode值 有多少位16进制数组成??? 8位
问题2: 8位16进制数,有多少种排列组合? 2^32种
00000000-FFFFFFFF
问题3: 相同数据进行hash(算法相同),问题: 值是否相同? 必定相同
问题4: 不同数据进行hash(算法相同),问题: 值是否相同? 可能相同 hash碰撞
问题5: 一个数据1kb, 一个数据ITB 问: hash计算的速度谁快? “一样快” hash本质
# 1.pro文件语法 # 数据结构类型: key=value 特别注意不要有空格. # 字符集编码: 程序读取文件时,默认采用ISO-8859-1编码 # 弊端: 所有的key都必须写完整,不能缩进3.1.2 YML文件说明
# YML文件的语法 # 1.数据结构 key-value结构 # 2.写法: key:(空格)value # 3.层级代码结构,注意缩进 # 4.字符集 文件读取时,默认采用UTF-8编码 可以写中文 server: port: 80803.2 动态为属性赋值 3.2.1 需求说明
说明: 有时将数据写死,不方便后续扩展,需要为属性动态赋值.
解决方案: 有些数据是后台特有的.一般可以将数据写到配置文件中,之后为属性动态赋值
3.2.2 编辑YML配置文件
# YML文件的语法 # 1.数据结构 key-value结构 # 2.写法: key:(空格)value # 3.层级代码结构,注意缩进 !!!!! # 4.字符集 文件读取时,默认采用UTF-8编码 可以写中文 # 规则: 命名时最好指定前缀. server: port: 8080 mysql: username: root password: root3.2.3 动态为属性赋值
package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JDBCController {
//${key} Spring提供的springel表达式 简称为:spel表达式
//语法: 从spring容器内部获取key,动态为属性赋值.
@Value("${mysql.username}")
String username; // = "root|";
@Value("${mysql.password}")
String password; // = "root";
@RequestMapping("/getMsg")
public String getMsg(){
return "你好数据库:"+ username +password;
}
}
3.3 利用properties文件为属性赋值
3.3.1 需求说明
YML文件是SpringBoot的核心配置文件,一般主要用来整合其它第三方框架.属于系统配置文件.如果将大量的业务数据写到系统配置文件中. 耦合性高. 所以将业务数据最好放到pro文件中.
3.3.2 编辑pro配置文件
#默认ISO-8859-1 中文必定乱码 mysql.username2=mysql数据库 mysql.password2=你猜猜3.3.3 pro为属性赋值
说明: 通过注解为属性赋值,可以指定字符集
package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@PropertySource(value="classpath:/mysql.properties",encoding = "UTF-8")
public class JDBCController {
@Value("${mysql.username2}")
private String username2;
@Value("${mysql.password2}")
private String password2;
@RequestMapping("/getMsg2")
public String getMsg2(){
return "你好数据库:"+ username2 +password2;
}
}
1.2.环境分割
1. SpringBoot高级用法 1.1 常规方式创建SpringBoot项目 1.1.1 创建maven工程 1.1.2 编辑pom.xml文件说明: 新项目只需要复制 除了坐标之外的配置文件
4.0.0 com.jt springboot_demo21.0-SNAPSHOT 1.8 UTF-8 UTF-8 2.4.1 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.apache.maven.plugins maven-compiler-plugin3.8.1 1.8 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin2.4.1 com.jt.SpringbootDemo1Application repackage repackage
即可.
1.2 环境分割
1.2.1 需求说明
情景说明: 如果小李经常往返于 公司和项目基地,其中的服务器端口号经常的变化.
案例:
1. 开发 dev: 8080端口
2. 生产 prod: 9000端口
问题: 由于配置文件数量众多,如果每次修改则带来了诸多不便.所以可以采用环境分割
1.2.2 编辑YML配置文件
编辑配置文件时,注意缩进
#指定环境的默认配置
spring:
profiles:
active: dev
---
#为环境定义名称
server:
port: 8080
spring:
config:
activate:
on-profile: dev
# 采用---的方式实现环境分割
---
server:
port: 9000
spring:
config:
activate:
on-profile: prod
1.3 热部署
1.3.1 需求说明
在开发阶段 需要频繁的修改配置文件/代码. 需求要求将代码保存之后,程序自动的编译,并且完成tomcat服务的重启. 个别IDEA版本可能不生效.
1.3.2 导入jar包
org.springframework.boot
spring-boot-devtools
1.3.3 IDEA环境配置(选做)
- 配置自动编译
2.让热部署有效
快捷键: ctrl + alt + shift + /
勾选自动重启
1.4 数据库导入 1.4.1 关于数据库链接问题说明现象: 昨天数据库还可以正常使用,今天早晨开机 发现数据库链接不上? 什么原因??
原因: 有可能是windows中的服务没有启动导致的!
如图: 如果数据库的服务项没有启动,则启动即可.
现象: 昨天数据库还可以正常使用,今天早晨开机 发现数据库链接不上? 什么原因??
原因: 有可能是windows中的服务没有启动导致的!
如图: 如果数据库的服务项没有启动,则启动即可.
选择数据库之后,导入,并且刷新数据库.
1.5 lombok说明 1.5.1 创建POJO对象package com.jt.pojo;
import org.springframework.stereotype.Component;
import java.io.Serializable;
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
1.5.2 lombok插件说明
lombok可以为POJO实体对象,动态的生成get/set/toString/hashcode/equals等方法.无需程序员手动编辑.
1.5.3 导入jar包1.5.4 常用注解org.projectlombok lombok
package com.jt.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@Data //动态生成get/set/toString/equals等方法
@Accessors(chain = true) //开启链式加载 重写set方法
@NoArgsConstructor //无参构造
@AllArgsConstructor //有参构造
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
//this 运行期有效 代表当前对象
//方法测试
public void add(){
DemoUser user = new DemoUser();
user.setId(100)
.setName("aaaa")
.setAge(18)
.setSex("女");
}
}
2. Mybatis
2.1 ORM思想
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
概括: 用对象的方式操作数据库
衍生:
1. 对象应该与数据库中的表一一映射.
2. 对象中的属性应该与表中的字段一一映射.
3. 其中的映射应该由程序自动完成.无需人为干预.
2.2 常规JDBC的弊端
//利用jdbc,完成新增的功能
private static void method2() throws Exception{
//1,注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2,获取数据库的连接
//数据传输协议 数据库的ip 端口号 数据库名
String url = "jdbc:mysql://localhost:3306/cgb2107";
Connection c = DriverManager.getConnection(url,"root","root");
//3,获取传输器
Statement s = c.createStatement();
//4,利用传输器执行 增删改的SQL
//executeUpdate()用来执行增删改的SQL,只返回影响行数
int rows = s.executeUpdate(
"INSERT INTO emp(ename,job) VALUES('rose','副总')");
//5,释放资源
//r.close();//结果集
s.close();//传输器
c.close();//连接
}
弊端:
1. 无论如何执行都必须获取数据库链接. 链接池 c3p0 druid HK链接池
2. 操作sql语句时,步骤繁琐. 不便于学习记忆.
3. 资源必须手动关闭.
优点:
操作数据库最快的方式就是JDBC. 协议 TCP
2.3 Mybatis
2.3.1 Mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。(mybatis在内部将JDBC封装).
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
知识整理:
1.持久化 : 计算机在计算时,数据都在内存中.如果断电则数据清空,所以要求将内存数据保存到磁盘中. 概念.
2.持久层: 程序通过Dao/Mapper 与数据库进行交互的层级代码 (Controller层 Service层 Dao/Mapper层) 具体操作.
小结: Mybatis是一个优秀的持久层框架,基于ORM设计思想,实现了以对象的方式操作数据库.
了解: Mybatis的ORM并不完全,只完成了结果集映射,但是Sql需要自己手写.所以也称之为半自动化的ORM映射框架.
2.3.2 Mybatis特点
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql。 [2]
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.0
mysql
mysql-connector-java
2.4.2 编辑POJO对象
package com.jt.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class DemoUser implements Serializable {
private Integer id;
private String name;
private Integer age;
private String sex;
}
2.4.3 编辑mybatis-config.xml
根据官网描述,准备xml配置文件. 注意文件路径.
2.4.4 构建持久层接口说明: 在com.jt.mapper中构建mapper接口
public interface DemoUserMapper {
//1.查询所有的表数据
public List findAll();
}
2.4.5 构建mapper接口的实现类的xml配置文件
2.4.6 Mybatis关联映射文件
说明: 在mybatis-config.xml文件中添加 mappers标签.添加指定的映射文件
2.4.7 Mybatis实现数据查询
@Test
public void demo1() throws IOException {
//指定配置文件地址
String resource = "mybatis/mybatis-config.xml";
//通过IO流 加载指定的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//动态生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession 类比 数据库链接
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取Mapper接口
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
//获取数据
List userList = demoUserMapper.findAll();
System.out.println(userList);
//关闭链接
sqlSession.close();
}
2.4.8 Mybatis调用流程
2.5 Mybatis常见报错
2.5.1 BindingException异常说明
报错说明1:
org.apache.ibatis.binding.BindingException: Type interface com.jt.mapper.UserMapper is not known to the MapperRegistry.
解决方案1:
检查namespace命名是否与接口一致
报错说明2:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jt.mapper.UserMapper.findAll
解决方案2:
检查xml映射文件中的ID是否与接口方法一致.
报错说明3:
The error may exist in mybatis/mappers/UserMapper2.xml
解决方案3:
检查mybatis核心文件加载mapper映射文件的路径是否正确.
报错说明4:
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is ‘mybatis/mappers/demoUserMapper.xml’. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘DemoUser’. Cause: java.lang.ClassNotFoundException: Cannot find class: DemoUser
解决方案4:
问题可能是xml映射文件中的resultType的类型异常.
2.6 根据ID查询数据
2.6.1 编辑业务接口
public interface DemoUserMapper {
//1.查询所有的表数据
public List findAll();
DemoUser findOne(int id);
}
2.6.2 编辑xml映射文件
2.6.3 编辑测试API
@Test
public void testFindOne() throws IOException {
//指定配置文件地址
String resource = "mybatis/mybatis-config.xml";
//通过IO流 加载指定的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//动态生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口
DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
int id = 1;
DemoUser demoUser = demoUserMapper.findOne(id);
System.out.println(demoUser);
//关闭链接
sqlSession.close();
}
3 补充知识
3.1 驱动问题
报错提示: 显示启动问题.
驱动问题: 项目中使用的驱动 8.0版本
Mysql数据库: 使用5.5版本及以上的!!!
MariadbDB数据库: 要求10及以上
如果不想重新安装数据库,则降低驱动的版本
说明:
1.注意数据源链接地址
2.注意数据库用户名和密码



