SpringBoot
发布日期:2021-05-08 13:39:53 浏览次数:20 分类:精选文章

本文共 8531 字,大约阅读时间需要 28 分钟。

SpringBoot

项目的创建


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

———————————————————————————————————————————————————————

SpringBoot 整合数据源

使用默认的HikariCP

  1. 添加依赖
    右键项目的pom文件,spring→Edit Starters,再搜索jdbc添加MySQL DriverJDBC API依赖
    在这里插入图片描述
    在这里插入图片描述

  1. 配置连接池
    打开application.properties配置文件,添加如下的配置:
#spring datasource  连接池配置spring.datasource.url=jdbc:mysql:///数据库名?serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=916437

  1. 测试连接
@Autowired	private DataSource dataSource;	@Test	public void t1() throws Exception {		System.out.println("连接名:"+dataSource.getConnection().getClass().getSimpleName());	}

在这里插入图片描述

———————————————————————————————————————————————————————

SpringBoot 整合MyBatis

  1. 初始配置
    1.1 在pom文件下添加mybatis-spring-boot-starter依赖:
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.1

         1.2 在application.properties里添加myBatis的简易配置:

#spring mybatis	mybatis.configuration.default-statement-timeout=30	mybatis.configuration.map-underscore-to-camel-case=true

  1. 简单业务
    2.1 准备pojo
    在这里插入图片描述

         2.2 创建一个接口并用mybatis里的注解@Mapper把它交给spring容器管理,在其中可以写简单的sql语句的方法,复杂的动态sql就要用xml来处理

在这里插入图片描述

@Mapperpublic interface IMapper {	//查询所有的数据	@Select("select * from tb_goods")	List
queryAll();}

         2.3 测试运行接口IMapper的queryAll方法

@Autowired 	IMapper iMapper;	@Test	public void queryAll() {		List
queryAll = iMapper.queryAll(); for (Good good : queryAll) { System.out.println(good); } }

在这里插入图片描述


  1. 较复杂业务(当接口方法对应的映射语句相对比较复杂时,建议将映射语句写到对应映射文件
    3.1 在resource目录下创建mapper/good目录,然后在其目录添加GoodMapper.xml
    在这里插入图片描述
    GoodMapper.xml里添加基本配置

            在application.properties里对xml文件进行配置

#配置读取mybatis的操作sql语句方法的xml位置文件       mybatis.mapper-locations=classpath:/mapper/*/*.xml

            3.2 在IMapper接口里写个批量查询的方法( 按id查找 )

在这里插入图片描述


            3.3 在GoodMapper.xml里写一个批量查询的sql语句


            3.4 测试queryObjects方法

@Test	public void queryOBJ() {		List
queryObjects = iMapper.queryObjects(1,3); for (Good good : queryObjects) { System.out.println(good); } }

在这里插入图片描述


  1. 业务层接口及实现类
    4.1 创建一个接口以及其实现类
    在这里插入图片描述
    在这里插入图片描述
    将实现类交给spring管理:
@Servicepublic class GoodServiceImp implements GoodService{	@Autowired IMapper  imapper;//注入IMapper这个接口,	@Override				    //方便在实现GoodService接口的方法时调用IMapper的方法,因为这里设计是两个接口的方法都是一样的	public List
queryObjects(Integer... integers) { List
queryObjects = imapper.queryObjects(integers); return queryObjects; } }

            4.2 测试这个实现类的方法

在这里插入图片描述
在这里插入图片描述
———————————————————————————————————————————————————————

SpringBoot 整合WEB应用

  1. 添加依赖
    右键pom, spring→Edit Starters, 搜索web
    在这里插入图片描述
  2. 在src/main/resources目录下创建templates/page目录
    在这里插入图片描述
  3. 在application.properties里添加视图解析器配置
spring.thymeleaf.prefix=classpath:/templates/page/	spring.thymeleaf.suffix=.html
  1. 创建good的controller
    在这里插入图片描述
    在这里插入图片描述
  2. 在templates/page目录下创建接收方法queryObjects传过来的good集合并用thymeleaf的th遍历显示
    在这里插入图片描述
 			
Insert title here
序号 名字 标记 创建时间
  1. 启动项目
    在这里插入图片描述
    在这里插入图片描述
    这里新创建的项目端口号都是8080,若需修改端口号就在application.properties配置server.port=80

SpringBoot项目的启动过程

1. main方法执行				2. 加载主启动类3. 程序解析启动类身上的注解(自动化的配置[配置文件自动加载、包扫描])

@EnableAutoConfiguration //开启自动化的配置。引入依赖即可完成自动化的配置(开箱即用)。完成自动化的包扫描(比如@Controller、@Service、@Mapper等).SpringBoot程序比较智能,只需要添加某些jar包,一般以SpringBoot启动项开头命名居多。当程序启动时,可以自动化的部署启动。

总结:SpringBoot项目启动会执行main方法,在加载主启动类的时候就扫描到了@SpringBootApption注解。@SpringBootApption注解类上标有@EnableAutoConfiguration注解,
@EnableAutoConfiguration注解类上标有@AutoConfigurationPackage自动包扫描的注解


配置文件

1.默认配置文件:application.properties
properties中的配置文件没有层次感
properties中只能编辑k-v结构并且使用=连接
properties中默认编辑的都是字符串且默认采用ISO-8859-1编码,中文必然乱码
application.properties格式配置文件
2.YML配置文件:application.yml
k-v结构,使用 : 连接
有层次关系,缩进(空格、tab键)
添加value时注意空格
application.yml格式配置文件

读取配置文件注解中的属性

1.@PropertySource("classpath:/文件位置 ")
为指定配置文件位置进行加载配置文件
classpath:/ 表示项目中的src/main/resources目录
在这里插入图片描述

2.@Value
@Value单个获取指定文件中的属性并赋值
在这里插入图片描述
在这里插入图片描述

3.@ConfigurationProperties(prefix = “mysql”)
通过读取配置文件的前缀属性里有没有mysql开头的
然后拼接这个类的属性,通过get/set方法的支持为属性批量赋值为配置文件中对应属性的值

在这里插入图片描述

在这里插入图片描述


单个赋值的方式不能和批量赋值同时使用且批量复制的方式这个类的属性名必须和配置文件中对应的属性的后缀名一样,而单个赋值就没这个要求;批量赋值要求这个类必须有get/set方法,单个赋值就没有这个要求

jdbc:	driver: mysqlDriver	name: mysql#  批量赋值   这个类的属性就为driver、name  (@ConfigurationProperties)# 而单个赋值就这个类的属性随便起名  (@Value)

链式加载

原理:可以让对象连续调用方法

效果:
链式加载效果

方法一:
重写set方法,每个属性的set方法调用后都返回这个已经设置了值的对象
重写set方法
方法二:
使用Lombok里的@Accessors注解
Lombok的@Accessors

@RestController、@Controller、@ResponseBody

@RestController=@Controller+@ResponseBody

@Controller:将对象交给Spring容器管理
@ResponseBody:要求返回的是一个json字符串格式,在类上加这个注解则不会执行视图解析器跳转页面


ORM思想与JPA思想

JPA思想:
Java持久API,对象与关系表的映射关系,将运行期的实体对象持久化到数据库中。JPA以对象的方式操作数据库
ORM思想:
对象关系映射(ORM [ Object Relational Mapping ] )是通过描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另一种形式。

ORM思想是JPA思想的补充


MybatisPlus

  1. 引入mybatis-plus-boot-starter依赖,注释掉mybatis-spring-boot-starter依赖(mybatis-plus只是加入了一些增强,并没有修改mybatis)
  2. 开启驼峰命名
    在这里插入图片描述
  3. MybatisPlus会默认使用实体类的类名到数据中找对应的表。通过@TableName(“表名”)来指定,它实现了对象与表的关系映射,是mybatis-plus里的注解。映射规则是如果对象类的类名和对应的表名相同,可不用备注表名(不区分大小写)
  4. @TableId(type = IdType.AUTO) //主键自增
  5. @TableField(“sex”)用来关联表字段,若属性名和表字段名一致可省略这个注解(也包含驼峰规则)
  6. Mapper接口继承BaseMapper<对象>接口
  7. 单表操作几乎不写sql,以对象的方式操作数据库
方法 作用
gt >
eq =
lt <
ge >=
le <=
like 模糊查询
likeRight 关键字开头
likeLeft 关键字结尾
between(column,值1,值2) 区间查询column在值1到值2间的数据
orderByAsc(column) 按column升序
orderByDesc(column) 按column降序
条件构造器.isNull(column) 查询column为空的数据

实体类:

@Data@AllArgsConstructor@NoArgsConstructor@Accessors(chain = true)@TableName("user") public class User {   	@TableId(type = IdType.AUTO)	//定义主键,主键自增	private Integer id;//	@TableField("name")	private String name;//	@TableField("age")	private Integer age;//	@TableField("sex")关联表字段,若属性名和表字段名一致可省略这个注解(也包含驼峰规则)	private String sex;}

mapper:

//@Mapper   现在主启动类加了这个包的全类mapper扫描注解@MapperScan("com.jt.mapper")public interface UserMapper extends BaseMapper
{ }

直接在test测试类里测试mp的单表操作:

@SpringBootTestpublic class SpringBootApplicationTest {   	@Autowired	private UserMapper userMapper;		@Test	public void t1() {   		User user = userMapper.selectById(1);		System.out.println(user.toString());	}		@Test	public void t2() {   		User u=new User();		u.setAge(88).setName("小s").setSex("男");		Integer insert = userMapper.insert(u);		System.out.println(insert);	}		@Test	public void t3() {   		Integer insert = userMapper.deleteById(856);		System.out.println(insert);	}		/** 	 * Mybatis-plus的 BaseMapper接口里查询所有的方法selectList(null)	 * 这里selectList(null)的null就是表示没有where条件	 */	//查询sex为男,并且age>20	@Test	public void t4() {   		QueryWrapper
queryWrapper = new QueryWrapper<>();//条件构造器 queryWrapper.eq("sex", "男").gt("age", 20); List
u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //查询sex为男,或者age>20 @Test public void t5() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sex", "男").or().gt("age", 20); List
u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //多条件 //查询id为1到9的user in() @Test public void t6() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 1,2,3,4,5,6,7,8,9); List
u = userMapper.selectList(queryWrapper); u.forEach(i->System.out.println(i)); } //多条件 //查询id为1到9的user in() @Test public void t7() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 53,54,55); Integer u = userMapper.delete(queryWrapper); System.out.println(u); } //通过user实体搭配QueryWrapper条件构造器 @Test public void t8() { User u=new User(); u.setName("不知火舞"); QueryWrapper
queryWrapper = new QueryWrapper<>(u); List
selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like @Test public void t9() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.eq("sex", "男").like("name", "精"); List
selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like 以关键字开头 likeRight @Test public void t10() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("name", "小"); List
selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //模糊查询like 以关键字结尾 likeLeft @Test public void t11() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.likeLeft("name", "精"); List
selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //查询age在18到35之间数据,按照性别排序 @Test public void t12() { QueryWrapper
queryWrapper = new QueryWrapper<>(); queryWrapper.between("age", 18, 35).orderByAsc("id"); List
selectList = userMapper.selectList(queryWrapper); selectList.forEach(i->System.out.println(i)); } //修改id为12的数据,名字改为小艾,年龄改为55 @Test public void t13() { int updateById = userMapper.updateById(new User().setId(12).setName("小艾").setAge(55)); System.out.println(updateById); } }
上一篇:分布式系统
下一篇:对象的去重

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月30日 16时03分59秒