java第三阶段第二天--CureGuy

目录

1 、SpringBoot高级应用

1.1 、常规方式创建springboot项目

1.2 、环境分割

1.3 、热部署(在开发阶段有用)

2 、导入数据库

3 、lombok插件使用

4 、mybatis框架

4.1 、ORM思想

4.2 、常见的JDBC弊端

4.3 、Mybatis介绍

5 、mybatis案例分析

5.1 、导入依赖包

5.2 、测试DemoUser.java类:

5.3 、编辑config.xml文件

5.4 、创建Mapper接口

5.5 、编辑Mapper映射文件

5.6 、Mybatis关联映射文件

5.7 、Mybatis测试

5.8 、理论逻辑

5.9 、异常报错

5.10 、其他问题


1 、SpringBoot高级应用

1.1 、常规方式创建springboot项目

右键>new>module>spring初始化>改头换面finish

右键>new>module>maven>next>改头换面finish 

(两种最大区别在pom文件中有着不同的标签,maven的pom文件就很简洁需要添加依赖并更新)

新的项目只需要从spring那边复制除了坐标之外的配置文件即可。

1.2 、环境分割

情景说明:如果小汤经常返回于工地与公司,其中的服务器端口号经常的变化。

案例:

        1.开发 Dev:8080端口

        2.生产prod:9000端口

问题:由于配置文件数量众多,如果每次都修改则会带来很多不便,

解决方案:更改application.yml文件

#指定环境的默认配置
spring:
  profiles:
    active: dev
---
#为环境定义名称
server:
  port: 8080
spring:
  config:
    activate:
      on-profile: dev
#  可以使用---来实现环境分割   隔开相同的key
---
server:
  port: 9000
spring:
  config:
    activate:
      on-profile: prod

1.3 、热部署(在开发阶段有用)

在开发阶段需要频繁的修改配置文件/代码,需求要求将代码保存之后,程序会自动的编译,并且完成Tomcat服务的重启,个别idea版本可能不生效。

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

配置自动化编译

让热部署有效:快捷键:Ctrl + alt + shift + /     勾选重启项目

2 、导入数据库

现象:昨天数据库还可以正常使用,今天早上开机发现数据库连接不上?什么原因?

原因:有可能是你的windows的服务中的mysql服务没启动,如果未启动则手动启动即可

 

3 、lombok插件使用

1.引入jar包


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

2 、常用注解:

@Data//自动添加get set toString equals方法等
@Accessors(chain = true)//开启链式加载 重写set方法
@NoArgsConstructor//无参构造
@AllArgsConstructor//有参构造

3 、Lombok作用:

package com.jt.pojo;
//实体对象要求 :
//1.类名一般与表名关联
//2.属性名称一般与字段关联(方法公有属性私有)
//3.pojo的属性类型必须使用引用类型(包装类型)
//4.实体对象必须有get/set方法
//5.实体对象不要交给spring容器管理,实现序列化即可implements Serializable
//  原因:数据可能跨平台、跨服务器传输(数据在网络中传输必须序列化)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data//自动添加get set toString equals方法等
@Accessors(chain = true)//开启链式加载 重写set方法
@NoArgsConstructor//无参构造
@AllArgsConstructor//有参构造
public class DemoUser implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    //this 运行期有效 代表当前对象
//    public DemoUser SetId(Integer id){
//          this.id=id;
//          reture this;
//    }

    public  void add(){
        DemoUser user = new DemoUser();
        user.setId(100)
             .setName("aaa")
             .setAge(20)
             .setSex("女");
    }
}

4 、mybatis框架

4.1 、ORM思想

        对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

概括:用对象的方式操作数据库

衍生:

        1.对象应该与数据库中的表一一映射;

        2.对象的属性应该与表中的字段一一映射;

        3.其中的映射应该由程序自动完成,无需人为干预。

4.2 、常见的JDBC弊端

弊端:

1.无论如何执行都必须获取数据库链接,链接池 c3p0  druid HK;

2.操作sql语句时,步骤繁琐,不便于记忆;

3.资源必须手动关闭。

优点:操作数据库最快的方式就是JDBC,协议是TCP。

4.3 、Mybatis介绍

        MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集(mybatis在内部将jdbc封装)MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

持久化:计算机在计算时,数据都在内存中,如果出现断电的情况下数据会清空,所以要求将内存的数据保存到磁盘中

持久层:程序通过Dao/Mapper与数据库进行交互的层级代码(Controller层  Service层  Dao/Mapper层)具体操作。

小结:Mybatis是一个优秀的持久层框架,基于ORM设计思想实现了以对象的方式操作数据库。

了解:Mybatis的ORM并不完全,只完成了结果集映射,但是SQL需要自己手写,所以也称之为半自动化的ORM映射框架。

5 、mybatis案例分析

5.1 、导入依赖包

      <!--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>

5.2 、测试DemoUser.java类:

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;


}

5.3 、编辑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>

    <!--环境配置标签  default 默认加载的环境 只能写一个-->
    <environments default="development">

        <!--编辑开发环境-->
        <environment id="development">
<!--            事务管理器  利用jdbc控制事务-->
            <transactionManager type="JDBC"/>
<!--            mybatis采用数据库链接池的方式整合数据源-->
            <dataSource type="POOLED">
<!--                高版本的数据库驱动需要添加cj-->
                <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>

5.4 、创建Mapper接口

public interface DemoUserMapper {
  //查询所有的表数据
    public List<DemoUser> findAll();
}

5.5 、编辑Mapper映射文件

<?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映射文件的唯一标识,与接口对应-->
<!--xml映射文件  必须与 接口一对一绑定
namespace : 指定需要绑定的接口名称  不能重复

   -->
<mapper namespace="com.jt.mapper.UserMapper">
    <!--id 表示接口方法   需要与接口方法绑定
        resultType 返回对象的包路径   
方法:select  update delete  
    -->
    <select id="findAll" resultType="com.jt.pojo.DemoUser">
        select id,name,age,sex from demo_user
    </select>
</mapper>

5.6 、Mybatis关联映射文件

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

5.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的入门案例
@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);
    }
}

5.8 、理论逻辑

1. 加载指定的mybatis-config.xml核心配置文件  数据源配置 加载映射文件

2. 读取后交给SqlSessionAactoryBuilder

3. 建造SqlSessionAactory工厂

4. 生产SqlSession    是执行sql语句的最小单位

5. 获取UserMapper接口

6. 调用接口执行sql标签UserMapper.xml  注意:namespace接口 id方法 restfulType返回包路径

7. JDBC执行sql

8. 结果集映射>封装后的对象

9. 完成特定的业务处理

10. 关闭资源

5.9 、异常报错

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

报错说明4:Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is ‘mybatis/mappers/demoUserMapper.xml’. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘DemoUser’. Cause: java.lang.ClassNotFoundException: Cannot find class: DemoUser

解决方案4:问题可能是xml映射文件中的resultType的类型异常.

5.10 、其他问题

注意驱动问题

注意数据源的连接地址问题

注意数据库用户名密码问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值