添加属性注入依赖–配置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>配置getMsg2 main/resources/properties/msg.propertiies中添加代码
msg.username2=凹凸曼打奥特曼 msg.age2=18MsgController2
@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; } }导入sql文件 或者手动导入如下: 打开cmd 命令: mysql -uroot -p***** 导入指令: source D:\jtdb.sql;
new 一个spring项目
然后更新一下maven
serverTimezone=GMT%2B8 东8区 useUnicode=true&characterEncoding=utf8 使用指定的字符集编码 &autoReconnect=true 数据库连接断开之后,是否自动重连 &allowMultiQueries=true 是否允许批量操作sql语句. 一般查询居多 允许
建立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的包扫描类型crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能
换成
<!--spring整合mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency>如果泛型不引入,则数据库操作无法完成.
public interface UserMapper extends BaseMapper<User> { //1.查询所有的用户表记录 @Select("select id,name,age,sex from user") List<User> findAll(); }顺便把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新增
@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
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
问题1: 现在操作的数据库任然采用 sql语句的方式进行编辑. 操作sql的方式实质就是面对过程的操作方式. 需求: 由于传统的sql 开发效率低,并且无论多么简单的sql都需要程序员自己编辑.很繁琐(无趣). 想法: 能否以面向对象的方式操作数据库!!!
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
核心理念: 以面向对象的方式操作数据库.
核心:
表与对象建立关联关系 对象名称 ---------> 表名 对象的属性 -------> 数据表中的字段.采用第三方接口 规范所有的单表操作规则.(封装思想)将CURD接口方法,必须按照sql的规范转化为指定的sql语句.理论依据: userMapper.insert(user); //程序员只写到这里. sql: insert into 表名(字段名…) values (属性值…); 按照用户的调用发方法,动态拼接sql.之后交给Mybatis去执行. 拼接sql: insert into user表(字段A,字段B,字段C…) values (属性值A,属性B,属性C…);
引入插件lombok 自动的set/get/构造方法插件
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>1、如果要在Linux系统中运行java项目,不需要需要安装lombok插件 2、lombok:可以自动的生成get/set等方法.但是使用lombok时需要安装插件 3、lombok在程序编译期有效,当程序由.java文件编译为.class文件时,lombok插件开始工作.动态生成了get/set等方法. 而Linux中运行的项目直接.jar包文件里边包含了.class类型文件.所以不需要lombok插件再次编译即可运行.
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 指定默认的环境