mybatis-plus基础入门

1、启动类

@SpringBootApplication //2.springBoot最为重要的入口注解
public class SpringBootRun {
	/**
	 * 程序执行的过程:
	 * 	1.利用main方法执行springboot启动程序.
	 *  2.程序加载@SpringBootApplication
	 * 	  @Target(ElementType.TYPE) 当前注解对类有效  
		  @Retention(RetentionPolicy.RUNTIME)  在运行期改注解有效
          @Documented				相关文档信息
          @Inherited				可以被继承
          ---   上述的注解是元注解
		  
		  @SpringBootConfiguration  springBoot的主启动类就是一个配置类
		  @EnableAutoConfiguration	
		   		开箱即用:只要导入指定的jar包文件,则可以自动的实现配置!!!
		  		@AutoConfigurationPackage    //定义包扫描的路径信息  主启动类的包路径
		  									 以后写代码至少同包及子包中.
				@Import(AutoConfigurationImportSelector.class)  实现了开箱即用的功能
				总结: springBoot中选择器的配置.扫描pom.xml文件中的jar包文件.
					  之后将jar包文件中的配置予以执行.
				
					AutoConfigurationImportSelector implements 
						DeferredImportSelector, BeanClassLoaderAware,
						ResourceLoaderAware, BeanFactoryAware, 
						EnvironmentAware, Ordered
					说明: Aware是Spring框架从项目启动-到项目的效果的各个时期的接口.
				
				
		   了解: 加载第三方的类信息
		  @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		  @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(SpringBootRun.class, args);
	}

}

1.2、MsgController类

添加属性注入依赖–配置properties

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<optional>true</optional>
	</dependency>

MsgController

@RestController
@ConfigurationProperties(prefix="msg") //方法二
public class MsgController {

	/*方法一
	 * @Value 表示从spring容器中动态获取数据.
	 * 通过spel表达式动态取值
	 * @Value("${msg.username}") 
	 * private String username;		//用户名
	 * @Value("${msg.age}") 
	 * private Integer age;			//用户名
	 */
	/** //方法二@ConfigurationProperties(prefix="msg") 配合lombok的@data注解
	 * 批量为属性赋值,必须配合set方法才能赋值
	 */
	private String  username;	//用户名
	private Integer age;
	

	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

	@RequestMapping("/getMsg")
	public String getMsg() {
		//String str="springBoot测试方法";
		return "返回结果:"+username+"+"+age;
	}
}

热部署

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

2.1、MsgController2

配置getMsg2
main/resources/properties/msg.propertiies中添加代码

msg.username2=凹凸曼打奥特曼
msg.age2=18

MsgController2

@RestController
//默认条件下 使用ISO-8859-1的编码格式,所以中文乱码
@PropertySource(value="classpath:/properties/msg.propertiies",encoding="UTF-8")
public class MsgController2 {
	@Value("${msg.username2}") 
	private String  username;	//用户名
	@Value("${msg.age2}") 
	private Integer age;
	
	@RequestMapping("/getMsg2")
	public String getMsg() {
		//String str="springBoot测试方法";
		return "返回结果:"+username+"+"+age;
	}
}

2.2、yml配置

# 语法:   1. key-value结构     2.key和value之间使用:(空格)进行分割 
#         2.YML配置文件有层级结构

spring:
 profiles:
  active: test  
  #指定默认的环境策略
---  
spring:
 profiles: prod
 
server:
 port: 8090
 servlet:
    context-path: /			#项目发布路径信息 默认条件下 /根目录
     # tomcat服务器进行发布 默认发布路径地址webapps目录下
 #指定用户配置文件信息
msg:    
 username:  小黑
 age: 30
--- #环境分隔
spring:
 profiles: test
 
server:
 port: 80
 servlet:
    context-path: /test		 #项目发布路径信息 默认条件下 /根目录

#指定用户配置文件信息
msg:    
 username: 老舒
 age: 30

2、SpringBoot整合Mybatis入门案例

导入sql文件
在这里插入图片描述
在这里插入图片描述
或者手动导入如下:
打开cmd
命令: mysql -uroot -p*****
导入指令: source D:\jtdb.sql;

2.1、创建项目springBootDemo2

new 一个spring项目

2.2、添加配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- parent标签作用:管理所有被SpringBoot整合的jar版本的定义 springboot特点:开箱即用,
	映入jar包就可以添加相对应的功能定义了当前springboot2.3.1所有有关依赖的版本号信息 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.1.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<groupId>com.jt</groupId>
	<artifactId>springBootDemo2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springBootDemo2</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<!-- 指定插件版本 -->
		<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
		<!-- 跳过测试类打包 -->
		<skipTests>true</skipTests>
	</properties>

	<dependencies>
		<!-- 在webjar包的内部关联了所有被springMVC的jar包信息. 定义了当前依赖包的版本  
		所以只需要引入一个jar包,则可以关联整合所有的有关mvc的依赖包信息-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- 配置properties添加属性注入依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- 支持热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
		<!--引入插件lombok 自动的set/get/构造方法插件 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		
		<!-- SpringBoot整合Mybatis -->
		
		<!--引入数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!--springBoot数据库连接  -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!--spring整合mybatis 暂时 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

	</dependencies>
	<!-- 负责打包更新maven操作相关配置,必须配置 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

然后更新一下maven

2.3、添加application.yml

server:
  port: 80
  servlet:
    context-path: /
spring:
  datasource:
   #数据库驱动 高版本   com.mysql.cj.jdbc.Driver   
    #低版本                       com.mysql.jdbc.Driver   
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: ***

mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #添加映射文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

serverTimezone=GMT%2B8 东8区
useUnicode=true&characterEncoding=utf8 使用指定的字符集编码
&autoReconnect=true 数据库连接断开之后,是否自动重连
&allowMultiQueries=true 是否允许批量操作sql语句. 一般查询居多 允许

2.4、添加类

建立User

@Data
@Accessors(chain = true) //开启链式加载结构
public class User {
	//属性一般都与表字段对应
	private Integer id;
	private String name;
	private Integer age;
	private String sex;	
}

建立UserMapper

//@Mapper	//将接口交给Spring容器管理,并且为其创建代理对象-->在启动类设置了
public interface UserMapper {
	//1.查询所有的用户表记录
	@Select("select id,name,age,sex from user")
	List<User> findAll();
}

在启动类添加

//利用包扫描的形式 扫描指定包路径为接口创建代理对象 批量操作
@MapperScan("com.jt.mapper") //@mapper的包扫描类型

2.5、测试

@SpringBootTest	 //springBoot测试注解  开启了spring容器
public class TestMybatis {
	@Autowired
	private UserMapper userMapper;
	@Test
	public void findAll() {
		List<User> userList = userMapper.findAll();
		System.out.println(userList);
	}
}

3、mybatis-plus入门

CRUD

crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能

3.1、将application.yml中的mybatis 换成mybatis-plus

<!--spring整合mybatis 暂时 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.3.2</version>
</dependency>

换成

<!--spring整合mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.0</version>
		</dependency>

3.2、关联User表

@Data
@Accessors(chain = true) //开启链式加载结构
@TableName        //@TableName("user")与表名进行关联	如果名称一致,则可以不写(不分大小写)
public class User {
    //属性一般都与表字段对应
    @TableId(type= IdType.AUTO)	//主键说明(自增标识AUTO)
    private Integer id;
    //@TableField(value = "name")	//如果属性名称与字段一致(包含驼峰规则),则可以不写
    private String name;
    private Integer age;
    private String sex;

}

3.3、继承BaseMapper

如果泛型不引入,则数据库操作无法完成.

public interface UserMapper extends BaseMapper<User> {
//1.查询所有的用户表记录
	@Select("select id,name,age,sex from user")
	List<User> findAll();
}

3.4、添加日志

顺便把mybatis改成mybatis-plus,其他不用改

#Mybatis-plus整合
mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #添加映射文件(xml文件的依赖)
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
#添加日志
logging:
  level:
    #mybatis指定mapper接口   以debug的形式展现日志.
    com.jt.mapper: debug

3.5测试mybatis-plus

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

新增

	@Test
	public void insert() {
		User user =new User();
		user.setName("小小黑")
			.setAge(15)
			.setSex("女");
		userMapper.insert(user);
		System.out.println("入库成功");
	}
	/**
	 * 查询API说明
	 * 案例:查询id=53的用户信息
	 */
	@Test
	public void select01() {
		User user =userMapper.selectById(53);
		System.out.println(user);
	}
	

查询API说明
案例:查询name=“孙尚香” sex=“女” 的用户
queryWrapper:条件构造器 拼接where条件
逻辑运算符 : =(eq),>(gt),<(lt),>=(ge),<=(le)

	@Test
	public void select02() {
		//1、利用对象封装参数,实现数据查询
		User user =new User();
		user.setName("孙尚香")
			.setSex("女");
		//根据对象中不为null的元素拼接where条件,默认条件下使用and连接符
		QueryWrapper<User> queryWrapper =new QueryWrapper<>(user);
		List<User> userList =userMapper.selectList(queryWrapper);
		System.out.println(userList);
		
		//2利用条件构造器构建where条件
		QueryWrapper<User> queryWrapper2 =new QueryWrapper<>(user);
		queryWrapper2.eq("name", "孙尚香")
					.eq("sex", "女");
		List<User> userList2 =userMapper.selectList(queryWrapper2);
		System.out.println(userList2);
	}

查询用户age<18岁 或者 age>100岁

	@Test
	public void select03() {
		QueryWrapper<User> queryWrapper = new QueryWrapper<>();
		queryWrapper.lt("age", 18)
					.or()
					.gt("age", 100);
		List<User> userList =userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}

查询id=1,3,6的用户

	@Test
	public void select04() {
		//1、通过API进行封装
		List<Integer> list =new ArrayList<>();
		list.add(1);
		list.add(3);
		list.add(6);
		List<User> userList =userMapper.selectBatchIds(list);
		System.out.println(userList);
		//2、条件构造器进行封装
		QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
		queryWrapper.in("id", 1,3,6);
		List<User> userList1 = userMapper.selectList(queryWrapper);
		System.out.println(userList1);
	}
	@Test
	public void select05() {
		QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
		//queryWrapper.between("字段", "值1", "值2");
		//queryWrapper.like("naem", "精");			//包含精字  %精%
		//queryWrapper.likeRight("naem", "精");	//以精开头    精%
		//queryWrapper.likeLeft("naem", "精");		//以精结尾  %精
		//queryWrapper.groupBy("naem");			//分组查询
        //queryWrapper.orderByDesc("age");    //倒序
        //queryWrapper.orderByAsc("age");      //正序
		//queryWrapper.between("age", "1", "100"); //1~100岁之间
		//queryWrapper.lt("age", 18)			//小于18岁
								.or()							//或
								.gt("age", 100);		//大于100岁
// 逻辑运算符  : =(eq),>(gt),<(lt),>=(ge),<=(le)
		List<User> userList = userMapper.selectList(queryWrapper);
		System.out.println(userList);
	}
	

更多条件构造器
https://blog.csdn.net/SkyCloud_/article/details/108247234

4、mybatis-plus

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

4.1特性

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

4.2历史背景

问题1: 现在操作的数据库任然采用 sql语句的方式进行编辑. 操作sql的方式实质就是面对过程的操作方式.
需求: 由于传统的sql 开发效率低,并且无论多么简单的sql都需要程序员自己编辑.很繁琐(无趣).
想法: 能否以面向对象的方式操作数据库!!!

4.3JPA说明

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

核心理念: 以面向对象的方式操作数据库.

4.4MybatisPlus实现原理

核心:

  1. 表与对象建立关联关系
    对象名称 ---------> 表名
    对象的属性 -------> 数据表中的字段.
  2. 采用第三方接口 规范所有的单表操作规则.(封装思想)
  3. 将CURD接口方法,必须按照sql的规范转化为指定的sql语句.

理论依据:
userMapper.insert(user); //程序员只写到这里.
sql: insert into 表名(字段名…) values (属性值…);
按照用户的调用发方法,动态拼接sql.之后交给Mybatis去执行.
拼接sql:
insert into user表(字段A,字段B,字段C…) values (属性值A,属性B,属性C…);

lombok配置

引入插件lombok 自动的set/get/构造方法插件

	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
	</dependency>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
lombok的常用注解
1、如果要在Linux系统中运行java项目,不需要需要安装lombok插件
2、lombok:可以自动的生成get/set等方法.但是使用lombok时需要安装插件
3、lombok在程序编译期有效,当程序由.java文件编译为.class文件时,lombok插件开始工作.动态生成了get/set等方法. 而Linux中运行的项目直接.jar包文件里边包含了.class类型文件.所以不需要lombok插件再次编译即可运行.

注意

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

配置文件写法

1.YML文件写法 层级关系 空格 连接符:号 注意缩进.
2.pro文件 本身都是字符串不需要添加""号 注意字符集编码iso-8859-1 转化为utf-8 重新编辑.
负责打包更新maven操作相关配置,必须配置(springboot会自动配置)

属性赋值

目的:动态配置属性信息.
方式2:
取值前提: 先赋值,再取值
1.@value spel表达式
2@ConfigurationProperties(prefix = “msg”) 一般配合@data注解.
指定配置文件进行加载. @PropertySource(“classpath:/xxxxxxxx.properties”)

环境切换

spring.profiles: prod 定义环境名称
spring.profiles.active: prod 指定默认的环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值