欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot高级用法和MybatisPlus使用介绍

程序员文章站 2022-03-07 22:03:32
1.SpringBoot高级用法2.SpringBoot整合Mybatis3.SpringBoot整合MybatisPlus 对象方式操作数据库 单表操作不需要写sql...

1. SpringBoot高级用法

1.1 关于配置文件说明

1.1.1 properties文件说明

1.语法 1. key=value 结构
2.pro中的属性-值默认条件下都是String类型 不需要添加引号

1.1.2 YML文件说明

#语法
  # 1. 数据结构 key: value   使用:(空格)链接
  # 2. YML文件中有文件父子级结构 采用缩进的方式实现.
server:
  port: 8090

1.2 为属性赋值

1.2.1 业务需求

有时需要动态的获取属性的值,如果直接写到代码中需要重新打包编译,代码的耦合性较高.
能否利用配置文件的方式,动态的为属性赋值?

1.2.2 YML方式为属性赋值

1).编辑YML配置文件

#语法
  # 1. 数据结构 key: value   使用:(空格)链接
  # 2. YML文件中有文件父子级结构 采用缩进的方式实现.
server:
  port: 8090

# 为Redis设定属性和属性值
redis.host: 127.0.0.1
redis.port: 6379

2).为属性赋值

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 RedisController {

    /**
     * 当程序启动时,会自动的加载YML配置文件,将数据保存到Spring的内部.
     * 之后通过${key}(spel表达式)进行数据的取值.
     */
    @Value("${redis.host}")
    private String host;        // = "127.0.0.1";
    @Value("${redis.port}")
    private int port;           // = 6379;

    @RequestMapping("/getNode")
    public String getNode(){
        return host + ":" + port;
    }




}

1.2.3 指定配置文件为属性赋值

1).定义properties文件
SpringBoot高级用法和MybatisPlus使用介绍

2).编辑RedisController

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("classpath:/properties/redis.properties")
public class RedisController {

    /**
     * 当程序启动时,会自动的加载YML配置文件,将数据保存到Spring的内部.
     * 之后通过${key}(spel表达式)进行数据的取值.
     * 1.通过YML方式赋值
     *
     */
    @Value("${redis.host}")
    private String host;        // = "127.0.0.1";
    @Value("${redis.port}")
    private int port;           // = 6379;

    //2.通过pro方式赋值
    @Value("${redis2.host}")
    private String host2;
    @Value("${redis2.port}")
    private int port2;


    @RequestMapping("/getNode")
    public String getNode(){
        return "YML取值方式"+host + ":" + port+"| " +
                "pro取值方式:"+host2+":"+port2;
    }

}

1.2.4 如果YML和Properties属性重名以谁为准?

答: YML方式为准, 注意事项:属性最好不要重复.

1.3 环境切换

1.3.1 业务需求

如果小李进入外包公司,需要频繁切换不同的工作地点.由于公司的环境配置非常繁琐,每次切换小李都需要修改大量的配置文件,问: 能否优化?

1.3.1 实现多环境配置

#挑选执行环境   SpringCloud微服务配置 N多个YML配置文件 配置中心
spring:
  profiles:
    active : test

---   #环境分割线
#语法
  # 1. 数据结构 key: value   使用:(空格)链接
  # 2. YML文件中有文件父子级结构 采用缩进的方式实现.

#定义环境名称   2.4.0版本需要如下的格式
spring:
  config:
    activate:
      on-profile: test

server:
  port: 8090

# 为Redis设定属性和属性值
redis.host: 127.0.0.1
redis.port: 6379


# 通过---方式实现YML环境的分割
---
spring:
  profiles: prod   #2.4.0以下的写法

server:
  port: 9000

# 为Redis设定属性和属性值
redis.host: 192.168.1.1
redis.port: 7000


1.4 热部署配置

弊端: IDEA启动时特别耗费内存,如果配置了热部署,则卡上加卡 (自己决定)

1.4.1 添加jar包

<!--支持热部署 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

1.4.2 IDEA配置

组合键: ctrl + alt+shift + /
SpringBoot高级用法和MybatisPlus使用介绍

1.5 关于LOMBOK复习

1.5.1 添加jar包

		<!--引入插件lombok 自动的set/get/构造方法插件  -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

1.5.3 面试问题

问:如果项目需要在Linux系统中运行,问系统是否需要提前安装LomBok插件?
A.需要 B.不需要
答案: B 不需要
原因: LOMBOK插件在编译期有效. 由.java文件编译为.class文件时生效.
SpringBoot高级用法和MybatisPlus使用介绍

1.5 SpringBoot整合Mybatis

1.5.1 导入jar包

<!--添加数据库驱动包-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<!--springBoot整合jdbc-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!--springBoot整合mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.3</version>
		</dependency>

1.5.2 编辑YML配置文件

1).关于URL说明
serverTimezone=GMT%2B8& %2B=+ 设定时区
useUnicode=true&characterEncoding=utf8& 设定字符集编码格式
autoReconnect=true& 如果链接中断是否自动重连
allowMultiQueries=true 是否允许批量操作.

2).YML文件配置

server:
  port: 8090
  servlet:
    context-path: /     #项目根目录发布
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

# Spring整合Mybatis配置
mybatis:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

  
  

1.5.3 编辑Mapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 唯一确定Mapper接口的  一定不能重复-->
<mapper namespace="com.jt.mapper.UserMapper">

	<!--定义别名包 type-aliases-package: com.jt.pojo
	 	在程序执行时,如果定义了别名包则会自动的拼接路径
	 	resultType="com.jt.pojo.User"
	 	规则:	 1.如果根据别名找不到则根据自己的定义查询类型
	 -->
	<select id="findAll" resultType="User">
		select * from user
	</select>

	<!--
		开启驼峰映射规则的说明
		说明:属性user_id 根据驼峰命名规则应该叫userId
		例子:
			1.user表:     user_id user_name user_age
			2.User对象:   userId, userName  userAge    驼峰命名规则
		只要开启驼峰映射规则,则Mybatis会自动的完成映射.
		原理:
			user_id(字段) ~~~去除中间的"_"线之后首字母大写 userId
			将数据映射给属性userId(属性)

		注意事项:一旦开启驼峰映射规则,则必须按照要求来写.
	-->
</mapper>

1.5.4 入门案例测试

package com.jt;

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest //写测试类时如果需要从容器中动态的获取对象时使用
class SpringbootDemo2ApplicationTests {

	@Autowired
	private UserMapper userMapper;

	@Test
	public void testMybatis01(){
		List<User> userList = userMapper.findAll();
		System.out.println(userList);
	}

}

2.MybatisPlus

2.1 ORM思想介绍

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的ORM产品,而有些程序员更倾向于创建自己的ORM工具。
核心: 采用对象的方式操作数据库.

思考:
userMapper.insert(user对象) ~~~~~剩余的入库sql由框架自动完成!!!

2.2 MybatisPlus介绍

2.2.1 介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
SpringBoot高级用法和MybatisPlus使用介绍
SpringBoot高级用法和MybatisPlus使用介绍

2.2.2 引入jar包

		<!--SpringBoot整合MybatisPlus  mybatis和plus jar包冲突的-->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.2.0</version>
		</dependency>

2.2.3 编辑POJO对象

SpringBoot高级用法和MybatisPlus使用介绍

2.2.4 Mapper接口继承

SpringBoot高级用法和MybatisPlus使用介绍

2.2.5 修改YML配置

server:
  port: 8090
  servlet:
    context-path: /     #项目根目录发布
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

# Spring整合Mybatis-plus配置
mybatis-plus:
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

  
  

2.2.6 入门案例测试

SpringBoot高级用法和MybatisPlus使用介绍

2.3MybatisPlus工作原理

ORM: 以对象的方式操作数据表
Sql:
1. 数据库只能识别Sql语句. 不能识别对象
2. 如果每天都写特别简单的Sql 没有任何价值.

核心原理:
1. 利用注解去标识对象与表的映射关系 @TableName(“表名称”) 字段与属性的映射
2. 将公共的接口方法进行抽取,抽取到公共接口中,如果需要使用只需继承即可. 注意事项:泛型问题
3. 操作对象时需要有专门的API实现对象与Sql的转化.最终交给Mybatis去执行.
例子: userMapper.insert(user对象)
Sql : insert into 表名(字段1,字段2,字段3…) values(值1,值2,值3…)

2.4 MybatisPlus入门案例

2.4.1 添加日志打印

SpringBoot高级用法和MybatisPlus使用介绍

2.4.2 入门案例

package com.jt;

import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

@SpringBootTest //写测试类时如果需要从容器中动态的获取对象时使用
class SpringbootDemo2ApplicationTests {

	@Autowired
	private UserMapper userMapper;

	@Test
	public void testMybatis01(){
		List<User> userList = userMapper.findAll();
		System.out.println(userList);
	}

	@Test
	public void testSelectList(){
		//查询所有的数据
		List<User> userList = userMapper.selectList(null);
		System.out.println(userList);
	}

	/**
	 * 1.查询用户数据
	 * 1.1 根据id=51号数据
	 * Sql: select * from user where id=51
	 */
	@Test
	public void select01(){
		User user = userMapper.selectById(51) ; //根据主键查询
		System.out.println(user);
	}

	/**
	 * 2. name="王昭君"的用户
	 * Sql: select * from user where name="xxx"
	 * 条件构造器:主要作用动态拼接where条件的
	 * 特殊符号:
	 * 	1. = eq, 2. > gt  , 3. < lt
	 * 				>= ge      <=le
	 */
	@Test
	public void select02(){
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("name", "王昭君");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}

	/**
	 * 查询性别为男性,要求按照年龄降序排列
	 * Sql: select * from user where sex="男" order by age desc
	 */
	@Test
	public void select03(){
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("sex", "男")
					.orderByDesc("age");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}

	/**
	 * 查询name中包含 "精"用户,按照年龄升序排序
	 * Sql: select * from user where name like "%精%"  order by age asc
	 * 										   "%精"
	 * 										   "精%"
	 */
	@Test
	public void select04(){
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.like("name", "精")
				.orderByAsc("age");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}


	/**
	 * 查询age>=18 and age<100 and sex=男性用户
	 * 默认的逻辑运算符and
	 */
	@Test
	public void select05(){
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.between("age", 18, 100)
					.eq("sex", "男");
		/*queryWrapper.ge("age", 18)
				    .lt("age", 100)
					.eq("sex", "男");*/
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}

	/**
	 * 查询id= 1,3,5,6,7的用户
	 * 查询name="黑熊精/白龙驴/大乔"
	 */
	@Test
	public void select06(){
		Integer[] ids = {1,3,5,6,7};
		List idList = Arrays.asList(ids);	//转化时需要使用包装类型
		List<User> userList = userMapper.selectBatchIds(idList);
		System.out.println(userList);
		QueryWrapper queryWrapper = new QueryWrapper();
		queryWrapper.in("name", "黑熊精","白龙驴","大乔");
		List<User> userList2 = userMapper.selectList(queryWrapper);
		System.out.println(userList2);
	}

	/**
	 * 查询 id,name 全部用户信息
	 */
	@Test
	public void select07(){
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.select("id","name");
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);

		List<Map<String,Object>> userMap = userMapper.selectMaps(queryWrapper);
		System.out.println(userMap);
	}


	@Test
	public void insert(){
		User user = new User();
		user.setId(null).setName("嫦娥5号")
		    .setAge(5).setSex("女");
		userMapper.insert(user);
	}
}

本文地址:https://blog.csdn.net/qq_16804847/article/details/110111046

相关标签: 正课 java