Java - stage3 - day02 - 环境分割、热部署、lombok、Mybatis

1. SpringBoot高级用法

1.1 常规方式创建Spring项目

1.1.1 创建maven工程

在这里插入图片描述

1.1.2 编辑pom.xml配置文件

复制除坐标外的配置内容

1.1.3 编写启动文件 RunApp

1.2 环境分割

1.2.1 需求说明

情景说明:经常往返公司和项目基地,其中的服务器端口经常变化
案例:
1. 开发环境dev: 8080端口
2. 生产环境prod:9000端口
问题:由于配置文件数量众多,每次修改不方便,所以可以采用环境分割

# 指定环境的默认配置
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服务的重启

1.3.2 导入jar包

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

1.3.3 IDEA环境配置

  1. 配置自动编译
  2. 让热部署有效
    快捷键 ctrl + alt + shift + / , Registry
    在这里插入图片描述

在这里插入图片描述

1.4 数据库导入

1.4.1 数据库连接问题排查

1.4.2 导入数据库

1.5 lombok 说明

1.5.1 创建pojo对象

package com.jt.pojo;
import java.io.Serializable;
/**
 * 实体对象要求:
 * 1.类名一般与表名关联
 * 2.属性名称一般与字段关联
 * 3.pojo种的属性类型必须为引用类型(包装类型)
 * 4.实体对象必须有get/set方法
 * 5.一般实体对象需要实现序列化接口
 *    原因:数据可能跨平台(跨服务器)传输,数据在网络中传输时,必须序列化
 * 6.pojo类不需要交给容器管理,所以不需要加@Component注解
 */
public class DemoUser implements Serializable {
    private Integer id;
    private String  name;
    private Integer age;
    private String  sex;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "DemoUser{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

1.5.2 lombok插件说明

lombok可以为POJO实体对象,动态的生成get/set/toString/hashcode/equals等方法,无需程序员手动编辑

1.5.3 导入jar包

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

1.5.4 常用注解

  1. @Data
    动态生成get/set/toString/equals
  2. @Accessors(chain = true)
    开启链式加载,重写set方法
  3. @NoArgsConstructor
    无参构造
  4. @AllArgsConstructor
    有参构造
@Data
@Accessors(chain = true)    //开启链式调用
@AllArgsConstructor
@NoArgsConstructor
public class DemoUser implements Serializable {
    private Integer id;
    private String  name;
    private Integer age;
    private String  sex;

    //方法测试
    public void add() {
        DemoUser demoUser = new DemoUser();
        demoUser.setAge(10).setId(100).setName("aaa").setSex("女");
    }
}

2 Mybatis

2.1 ORM思想

ORM(Object Relational Mapping)对象关系映射
概括:用对象的方式操作数据库
衍生:
1. 对象应该与数据库中的表一一映射
2. 对象中的属性应该与表中的字段一一映射
3. 其中的映射应该由程序自动完成,无需人为干预

2.2 常规JDBC弊端

2.3 Mybatis

2.3.1 Mybatis介绍

持久层框架,支持自定义SQL、存储过程以及高级映射,可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录
持久层:程序通过Dao/Mapper 与数据库进行交互的层级代码(Controller层 Service层 Dao/Mapper层)具体操作
小结:Mybatis时一个优秀的持久层框架,基于ORM设计思想实现了以对象的方式操作数据库
了解:Mybatis的ORM并不完全,只完成了结果集映射,但是SQL需要自己手写,所以也称之为半自动化的ORM映射框架

2.4 Mybatis入门案例

2.4.1 添加jar包

<!--mybatis依赖包-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<!--jdbc依赖包-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

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 version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>

    <!--环境配置标签-->
    <environments default="development">

        <!--编辑开发环境-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;allowMultiQueries=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--Mybatis加载Mapper映射文件-->
    <mappers>
        <mapper resource="mybatis/mappers/UserMapper.xml"/>
    </mappers>
</configuration>

2.4.4 构建持久层接口

说明:在 com.jt.mapper 中创建DemoUesrMapper类

package com.jt.mapper;

import com.jt.pojo.DemoUser;

import java.util.List;

/**
 * 说明:
 *      1.根据面向接口开发的思想需要定义一个Mapper接口
 *      2.在接口中可以写接口方法,谁用谁去实现!!!
 *      3.Mybatis中的实现类以xml文件的形式存在
 */
public interface DemoUserMapper {

    //1.查询所有的表数据
    public List<DemoUser> findAll();
}

2.4.5 构建mapper接口实现类的配置文件

创建demoUserMapper.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是mybaits映射文件的唯一标识,与接口对应-->
<mapper namespace="com.jt.mapper.DemoUserMapper">
    <!--id 表示接口方法
        resultType 返回值结果类型
        规则:SQL语句不要添加多余的;号 Oracle数据库不能添加;号
    -->
    <select id="findAll" resultType="com.jt.pojo.DemoUser">
        select id,name,age,sex from demo_user
    </select>
</mapper>

2.4.6 Mybatis关联映射文件

  1. mapper 映射文件是有顺序的,位置不要随便切换
  2. 通过 resource 加载指定的 xml 映射文件
<!--Mybatis加载Mapper映射文件-->
<mappers>
    <mapper resource="mybatis/mappers/demoUserMapper.xml"/>
</mappers>

2.4.7 Mybatis实现数据查询

package com.jt;

import com.jt.mapper.DemoUserMapper;
import com.jt.pojo.DemoUser;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMybatis {

    /**
     * 业务说明:实现mybatis入门案例
     * 步骤:
     *      1.动态生成SqlSessionFactory
     */
    @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<DemoUser> userList = demoUserMapper.findAll();
        System.out.println(userList);
    }
}

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映射文件的路径是否正确.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值