【MyBatis】| MyBatis查询语句专题(核心知识)

news2024/10/10 10:22:42

目录

一:MyBatis查询语句专题

1. 返回Car对象

2. 返回List<Car>

3. 返回Map

4. 返回List<Map>

5. 返回Map<String,Map>

6. resultMap结果映射

7. 返回总记录条数


一:MyBatis查询语句专题

前期准备:

模块名:mybatis-008-select

打包⽅式:jar

引⼊依赖:mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。

引⼊配置⽂件:jdbc.properties、mybatis-config.xml、logback.xml

创建pojo类:com.bjpowernode.mybatis.pojo.Car

创建Mapper接⼝:com.bjpowernode.mybatis.mapper.CarMapper

创建Mapper接⼝对应的映射⽂件:com/powernode/mybatis/mapper/CarMapper.xml

创建单元测试:com.bjpowernode.mybatis.test.CarMapperTest

拷⻉⼯具类:com.bjpowernode.mybatis.utils.SqlSessionUtils 

1. 返回Car对象

查询结果,返回的对象是一个Car对象!

三兄弟之一:CarMapper接口,编写方法

在接口中定义抽象方法,通过id查询,返回的是一个Car对象

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Car;

public interface CarMapper {
    // 根据id进行查询,返回的是Car
    Car selectById(Long id);
}

三兄弟之二:CarMapper.xml文件,编写sql语句

①namespace指定的一定是接口的包名,select的id一定是方法的方法名!

②select * from  t_car where id = #{id};这样查询肯定会有问题,前面已经接触过,除了id和brand字段,其它字段都为空;因为数据库表中的字段名与Car对象的字段名不相同!

③怎么解决?使用as对字段进行重名!

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectById" resultType="Car">
        <!--select * from  t_car where id = #{id};-->
        select
            id,
            car_num as carNum,
            brand,
            guide_price as guidePrice,
            produce_time as produceTime,
            car_type as carType
        from  t_car where id = #{id};
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class CarMapperTest {
    @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Car car = mapper.selectById(1L);
        System.out.println(car);
        sqlSession.close();
    }
}

2. 返回List<Car>

查询结果,返回的对象是多个Car对象,这就需要一个List集合进行存储!

三兄弟之一:CarMapper接口,编写方法

在接口中定义抽象方法,查询所有的Car,返回的是多个Car对象,使用List集合接收。

注:或者进行模糊查询,返回的也是多个Car对象。

注:如果明知道返回的是多个对象,但是就用一个POJO类Car来接收,会报TooManyResultsException异常:表示期望的结果是返回一条数据,但是实际的SQL语句在执行的时候,返回的记录不是一条、是多条。

注:如果知道返回的数据是一个Car对象,但是我们用一个List集合进行接收,这是没问题的

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Car;

public interface CarMapper {
    // 获取所有的Car,返回一个List集合
    List<Car> selectAll();
}

三兄弟之二:CarMapper.xml文件,编写sql语句

没有where查询条件,查询的是所有数据库表中的结果

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectById" resultType="Car">
        select
            id,
            car_num as carNum,
            brand,
            guide_price as guidePrice,
            produce_time as produceTime,
            car_type as carType
        from  t_car;
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

查询所有,返回的是一个List集合,遍历这个集合打印即可

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class CarMapperTest {
    @Test
    public void testSelectAll(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAll();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }
}

3. 返回Map

当返回的数据,没有合适的实体类对应的话,可以采⽤Map集合接收;数据库中的字段名做key,数据库中的字段值做value。 查询如果可以保证只有⼀条数据,则返回⼀个Map集合即可。 例如:

三兄弟之一:CarMapper接口,编写方法

根据id进行查询返回的是一个Map集合,Map集合的key肯定是一个String类型;Map集合的value肯定是一个Object,因为具体的类型都不相同

package com.bjpowernode.mybatis.mapper;

public interface CarMapper {
    // 根据id返回汽车信息,将汽车信息放到Map集合
    Map<String, Object> selectByIdReturnMap(Long id);
}

三兄弟之二:CarMapper.xml文件,编写sql语句

注:这里主要就是resultType属性的值怎么写?我们使用Map集合进行接收,所以就使用:java.util.Map,当然也可以使用MyBatis内置的别名map。

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectByIdReturnMap" resultType="map">
        select *  from  t_car where id = #{id};
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class CarMapperTest {
    @Test
    public void testSelectByIdReturnMap(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Map<String, Object> map = mapper.selectByIdReturnMap(1L);
        System.out.println(map);
        sqlSession.close();
    }
}

4. 返回List<Map>

如果返回的数据,没有合适的实体类对应,并且查询结果条数⼤于等于1条数据,则可以返回⼀个存储Map集合的List集合:List<Map>,实际上就等同于List<Car>。

 三兄弟之一:CarMapper接口,编写方法

上面是查询返回一条结果,使用Map集合接收即可;现在是查询所有,返回的是一个存放Map集合的List集合。

package com.bjpowernode.mybatis.mapper;

public interface CarMapper {
    // 查询所有的Car信息,返回的是一个存放Map集合的List集合
    List<Map<String,Object>> selectAllReturnListMap();
}

三兄弟之二:CarMapper.xml文件,编写sql语句

注:这里主要就是resultType属性的值还是填写List集合的里面元素Map集合

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectAllReturnListMap" resultType="map">
        select *  from  t_car;
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class CarMapperTest {
    @Test
    public void testSelectAllReturnListMap(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Map<String, Object>> maps = mapper.selectAllReturnListMap();
        maps.forEach(map-> System.out.println(map));
        sqlSession.close();
    }
}

5. 返回Map<String,Map>

返回List<Map>的时候,取数据并不好取,假如取id是3的元素,需要遍历整个集合;所以我们可以返回一个大Map集合的方式:Map<String,Map>;拿Car的id做key,Map集合做value,以后取出对应的Map集合时更⽅便。

 三兄弟之一:CarMapper接口,编写方法

①上面的方式,如果取出某个数据,需要遍历整个集合,所以我们采用另一种方式存储:

拿Car的id做key,Map集合做value,再放到一个大Map集合当中!

②使用这种方式需要一个注解:@MapKey("id"),表示将每个数据查询结果的id作为整个大Map集合的key

package com.bjpowernode.mybatis.mapper;

public interface CarMapper {
    // 查询所有的Car,返回一个大Map集合
    @MapKey("id") 
    Map<Long,Map<String,Object>> selectAllReturnMapMap();
}

三兄弟之二:CarMapper.xml文件,编写sql语句

注:这里resultType属性的值还是填写大Map集合的里面元素小Map集合

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectAllReturnMapMap" resultType="map">
        select *  from  t_car;
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

注:取出来的数据就是查询出所有的数据放到一个大Map集合当中

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class CarMapperTest {
    @Test
    @Test
    public void testSelectAllReturnMapMap(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Map<Long, Map<String, Object>> doubleMap = mapper.selectAllReturnMapMap();
        System.out.println(doubleMap);
        sqlSession.close();
    }
}

6. resultMap结果映射

查询结果的列名和java对象的属性名对应不上怎么办?

①第⼀种⽅式:as 给列起别名,前面一直在用的方法。

②第⼆种⽅式:使⽤resultMap进⾏结果映射。

③第三种⽅式:是否开启驼峰命名⾃动映射。 

(1)使⽤resultMap进⾏结果映射

 三兄弟之一:CarMapper接口,编写方法

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;
import java.util.*;

public interface CarMapper {
    // 查询所有的Car信息,使用resultMap标签进行结果映射
    List<Car> selectAllByResultMap(); 
}

三兄弟之二:CarMapper.xml文件,编写sql语句

①前面都是使用as进行重命名,并且需要把每个字段都写出来,比较麻烦。

②现在专门定义一个结果映射,在这个结果映射当中指定数据库表的字段名和Java类的属性名的对应关系。

③结果映射resultMap有两个参数:

一个参数是id,指定resultMap的唯一标识,这个id将来在select标签中使用。

一个参数是type,用来指定POJO类的类名。

④在resultMap下还有一个子标签result;首先对于有主键的需要配一个id,不是必须的,但可以增加效率;下面使用result子标签的property属性和column属性分别指定POJO类的属性名和数据库表中的字段表之间的映射关系。

⑤也可以给当前标签配置上javaType和jdbcType属性,非必须要,但是可以增加效率,因为减少了MyBatis自动推断。

⑥select标签使用了resultMap属性,原来的resultType属性就不需要指定了。

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <!--这里的car就是com.bjpowernode.mybatis.pojo.Car,使用了内置的别名-->
    <resultMap id="CarResultMap" type="car">
        <!--数据库表中有主键,建议配一个id,可以提高效率-->
        <id property="id" column="id" />

        <!--property后面填写POJO类的属性名,column后面填写数据库表中的字段名-->
        <result property="carNum" column="car_num" />
        <!--如果property和column是一样的,可以省略-->
        <!-- <result property="brand" column="brand" />-->
        <result property="guidePrice" column="guide_price" />
        <result property="produceTime" column="produce_time" />
        <!--当然也可以指定javaType和jdbcType属性,减少自动推断,效率可能更高-->
        <result property="carType" column="car_type" javaType="string" jdbcType="VARCHAR" />
    </resultMap>
    <!--select标签的resultMap属性用来指定使用哪个结果映射,后面跟的是resultMap的id-->
    <select id="selectAllByResultMap" resultMap="CarResultMap">
        select * from t_car;
    </select>
</mapper>

三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

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

public class CarMapperTest {
    @Test
    public void testSelectAllByResultMap(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAllByResultMap();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }
}

(2)是否开启驼峰命名⾃动映射(配置settings)

前提:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。

①Java命名规范:⾸字⺟⼩写,后⾯每个单词⾸字⺟⼤写,遵循驼峰命名⽅式。

②SQL命名规范:全部⼩写,单词之间采⽤下划线分割。

⽐如以下的对应关系:

如何启⽤该功能,在核心配置文件mybatis-config.xml中进⾏配置:

<!--放在properties标签后⾯-->
<settings>
 <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

 三兄弟之一:CarMapper接口,编写方法

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;
import java.util.*;

public interface CarMapper {
    // 查询所有Car,启⽤驼峰命名⾃动映射
    List<Car> selectAllByMapUnderscoreToCamelCase();
}

三兄弟之二:CarMapper.xml文件,编写sql语句

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectAllByMapUnderscoreToCamelCase" resultType="car">
        select * from t_car;
    </select>
</mapper>

 三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

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

public class CarMapperTest {
    @Test
    public void testSelectAllByMapUnderscoreToCamelCase(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAllByMapUnderscoreToCamelCase();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }
}

7. 返回总记录条数

需求:查询总记录条数

  三兄弟之一:CarMapper接口,编写方法

方法的返回类型定义成Long或者Integer都可以,这里就使用Long

package com.bjpowernode.mybatis.mapper;

import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.MapKey;
import java.util.*;

public interface CarMapper {
    // 获取总记录条数
    Long selectTotal();
}

三兄弟之二:CarMapper.xml文件,编写sql语句

注:前面我们返回的类型是Long,所以这里resultType的指定类型也是long(别名)

<?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">

<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
    <select id="selectTotal" resultType="long">
        select count(*) from t_car;
    </select>
</mapper>

 三兄弟之三:CarMappeTest类,用来编写测试类

package com.bjpowernode.mybatis.test;

import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

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

public class CarMapperTest {
   @Test
    public void testSelectTotal(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Long total = mapper.selectTotal();
        System.out.println("总记录条数"+total);
        sqlSession.close();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么计算机需要操作系统?

当计算机只运行一个程序时&#xff0c;只需将所有的资源(CPU、内存、磁盘等)分配给这一个程序就行&#xff1b;当计算机同时运行2个或以上程序时&#xff0c;操作系统就需要充当一下角色&#xff1a; 资源分配器资源隔离与秩序维护者细节屏蔽者 一. 资源分配器 计算机的硬件…

Springboot整合第三方技术及整合案例

Springboot整合第三方技术一、Springboot整合Junit1、步骤2、classes属性二、整合Mybatis1、步骤2、常见问题三、整合Mybatis-plus1、步骤2、常见配置四、整合Druid1、步骤五、整合案例-数据层&#xff08;基础的CRUD&#xff09;1、创建springboot项目手工导入starter坐标2、配…

【正点原子FPGA连载】第二十六章gpio子系统简介 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十六章gpio子…

NVDLA Xilinx FPGA Mapping

Lei WangLeiWang1999要当世界第一&#xff01;78357联系我常用的链接1. 1. 硬件系统设计概述1.1. 1.1 RTL 生成1.2. 1.2 IP Package1.2.1. 1.2.1 csb2apb1.2.2. 1.2.2 关闭 Clock Gating1.2.3. 1.2.3 IP Package1.3. 1.3 Block Design1.4. 1.4 Generate Bit HDF1.5. 1.5 Sanity…

java基础一JVM之JRE、JDK、解释器、编译器详解

1.JVM、JRE和JDK区别 1.JVM&#xff08; Java Virtual Machine &#xff09;&#xff1a; Java虚拟机&#xff0c;它是整个 Java 实现跨平台的最核心的部分&#xff0c;所有的 Java 程序会首先被编译为 .class 的类文件&#xff0c;这种类文件可以在虚拟机上执行&#xff0c;…

3.10-动态规划-01背包问题

问题描述&#xff0c;给定n种物品和一个背包。物品 i 的重量是 wi &#xff0c;其价值为 vi &#xff0c;背包的容量为 c &#xff0c;问应该如何选择装入背包中的物品&#xff0c;使得装入背包的物品总价值最大&#xff1f; 写在前面 dp数组的含义--dp[i][j]表述容量为j 已经…

【计算机体系结构-03】ISA (Instruction Set Architecture) 指令集架构特性

1. 指令的类型 上一篇文章里主要介绍了几种机器模型&#xff0c;有机器模型后需要知道计算机有什么样的基本指令&#xff0c;接下来就来看看指令都有哪些类型。 [注]&#xff1a;以下指令主要为 MIPS 指令。 类型指令数据传输LD、ST、MFC1、MTC1、MFC0、MTC0计算ADD、SUB、AN…

Vue3和Vue2的slot-scope插槽用法

目录 &#x1f9e8;&#x1f9e8;&#x1f9e8;第一种插槽&#xff08;匿名插槽&#xff09; &#x1f9e8;&#x1f9e8;&#x1f9e8;第二种插槽&#xff08;具名插槽&#xff09;以及插槽简写 具名插槽的使用 &#x1f9e8;&#x1f9e8;&#x1f9e8;第三种插槽(作用域插…

使用HTTP代理后,网速反而变慢是什么原因?

如今越来越多的人利用HTTP代理开展业务&#xff0c;但在实际使用时&#xff0c;经常会有用户发现使用了HTTP代理后&#xff0c;网速非但没有变快&#xff0c;反而还更慢了。我们今天就来说说&#xff0c;这是什么原因造成的&#xff0c;从根本入手对于我们能更有利的解决问题。…

2.Spring IOC

目录 一.如何进行注册 二、如何进行注入 三、扫描注解的原理 反射文件操作 四、什么是IOC/DI&#xff1f; 五、演示使用Spring开发的案例&#xff1a;用户管理|登陆、注册 五、常见错误总结 1、注解使用Repository 2、UserController的构造方法注入&#xff1a; 3、…

【FreeRTOS】第一章:介绍

FreeRTOS是什么&#xff1f; Free和RTOS,Free就是免费的、自由的意思&#xff0c;RTOS 全称是 Real Time Operating System。中文名就是实时操作系统。可以看出FreeROTS 就是一个免费的 RTOS 类系统。这里要注意&#xff0c;RTOS 不是指某一个确定的系统&#xff0c;而是指一类…

联想电脑安装ubuntu18.04双系统超详细教程(23年最新教程,99%成功率)

文章目录前言电脑配置制作系统盘安装ubuntu系统更新显卡驱动安装wifi驱动完成前言 ubtuntu的长期支持版本现在应该已经出道21.04版本了&#xff0c;如果你对于版本没有要求的话&#xff0c;建议直接安装最新版ubuntu&#xff0c;因为新版的系统驱动都会进行更新&#xff0c;也…

自学 Java 怎么入门?

玩Java多年的老司机带你上车全面系统学习Java&#xff0c;并且还能教你如何学习才能在今年拿到一份不错的offer。 说到系统全面&#xff0c;就是以目前绝大部分公司招聘要求的知识内容为基准&#xff0c;毕竟我们学习Java都是为了高薪工作&#xff0c;《史记》中说”天下熙熙皆…

2.【SpringBoot源码】SpringBoot核心启动流程

目录 一、简介 二、创建SpringApplication对象 1)、推导出当前启动的项目的类型 2)、设置Initializer初始化器 3)、初始化Listener监听器 4)、反推出main方法所在的Class对象 三、运行SpringApplication#run(java.lang.String...)方法 1)、获取运行监听器 2)、发布…

unity使用对象池实现冲锋留下的残影效果

目录 效果展示 实现思路 残影代码 对象池代码 控制冲刺产生残影 CD冷却图标 效果展示 实现思路 对象池&#xff0c;有想要用的物体时可以从池子里取&#xff0c;用完再放回去。 因为在生成残影再销毁&#xff0c;这个过程中创建和销毁都需要耗费大量资源&#xff0c;因此…

shell 条件测试详解

目录 shell条件测试 一&#xff0c;条件测试的基本语法 1&#xff0c;test 2&#xff0c;[ ] 3&#xff0c;[[ ]] 二&#xff0c;文件测试表达式 1&#xff0c;判断目录是否存在&#xff1a; 2&#xff0c;判断文件file1是否有写的权限&#xff0c;结果为有 3&#xf…

重学MySQL基础(一)

文章目录重学MySQL基础&#xff08;一&#xff09;MySQL 连接管理MySQL字符编码InnoDB 记录存储结构InnoDB 表的主键生成策略&#xff1a;InnoDB 数据页结构页目录页的效验和索引事务报错记录在MySQL中创建函数时出现这种错误恶补SQL语句SQL中的条件语句SQL中的字符串函数SQL中…

python调用go语言踩坑记录

目录 基本操作 1 在go文件中加注释&#xff0c;设置为导出方法,导出C依赖 2 导出so文件&#xff08;mac或者linux下只需要so&#xff09; 3 进行调用 报错记录 踩坑1 关于结构体 2 cannot use (_Cfunc_CString)("12345") (value of type *_Ctype_char) as ty…

spring中事务失效场景

文章目录spring中事务失效场景一、权限访问问题二、方法用final修饰三、无事务嵌套有事务的方法四、没有被spring管理五、设计的表不支持事务六、没有开启事务七、错误的事务传播八、自己捕获了异常九、手动抛出别的异常十、自定义回滚异常spring中事务失效场景 一、权限访问问…

软件研发管理经验总结 - 事务管理

软件研发管理经验总结 - 事务管理 相关系列文章 软件产品研发管理经验总结-管理细分 软件研发管理经验总结 - 事务管理 目录软件研发管理经验总结 - 事务管理一、概述二、事务管理过程1、制定开发计划2、启动会议3、阅读前一天的日报4、例会/早会5、调整计划6、协调资源7、日报…