Mybatis(四):自定义映射resultMap

news2024/10/1 7:45:20

自定义映射resultMap

  • 前言
    • 一、处理字段和属性的映射关系
      • 问题:
      • 方案一:使用别名
      • 方案二:在`mybatis-config.xml`中设置`mapUnderscoreToCamelCase`
      • 方案三:在映射文件中设置`redultMap`
    • 二、多对一映射处理
      • 问题:
      • 方案一:级联方式处理映射关系
      • 方案二:使用association处理映射关系
      • 方案三:分步查询
    • 三、一对多映射处理
      • 方案一:collection
      • 方案二:分步查询



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

Emp.java

public class Emp {
    private Integer eid;
    private String empName;
    private Integer age;
    private String sex;
    private String email;
    ...
    }

数据库表:t_emp
在这里插入图片描述

一、处理字段和属性的映射关系

若字段名和实体类中的属性名不一致,但是字段名符合数据库的规则(使用_),实体类中的属性名符合Java的规则(使用驼峰),此时也可通过以下三种方式处理字段名和实体类中的属性的映射关系

⭕ 方式一:可以通过为字段起别名的方式,保证和实体类中的属性名保持一致

⭕ 方式二:可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,可以在查询表中数据时,自动将_类型的字段名转换为驼峰

例如:字段名user_name,设置了mapUnderscoreToCamelCase,此时字段名就会转换为userName

⭕ 方式三:在映射文件中设置redultMap

问题:

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
          select * from t_emp;         
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='null', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='null', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='null', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='null', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='null', age=45, sex='女', email='123@qq.com'}
         */
    }
    /**
    empName所有的值都为null:因为数据库表中的字段名为emp_name,而实体类中此字段名
    对应的属性名为empname,所以字段名emp_name和属性名empname不一致,导致映射文件
    里无法获取到传递过来的参数

方案一:使用别名

⭕ 代码演示:

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
         select eid,emp_name empname,age,sex,email from t_emp;      
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

方案二:在mybatis-config.xml中设置mapUnderscoreToCamelCase

⭕ 代码演示:

<!--设置MyBatis的全局配置-->
    <settings>
        <!--将_自动映射为驼峰,emp_name:empName-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

EmpMapper

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xml

<select id="getAllEmp" resultType="emp">
          select * from t_emp;         
</select>

ResultTest

/**
     * @description:查询所有用户的信息
     * @author: Hey
     * @date: 2022/7/3 23:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

方案三:在映射文件中设置redultMap

resultMap:设置自定义映射关系

  1. id:唯一标识,不能重复
  2. type:设置映射关系中的实体类类型
  3. 子标签:
    3.1 id:设置主键的映射关系
    3.2 result:设置普通字段的映射关系
    3.3 属性:
    property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
    column:设置映射关系中的字段名,必须是sql语句查询出的字段名

⭕ 代码演示:

EmpMapper.java

/**
     * @description:查询所有的员工信息
     * @author: Hey
     * @date: 2022/7/3 23:38
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getAllEmp();

EmpMapper.xm

<resultMap id="empTest" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
    </resultMap>

    <select id="getAllEmp" resultMap="empTest">
          select * from t_emp;

    </select>

ResultTest

@Test
    public void testGetAllEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        List<Emp> list = mapper.getAllEmp();
        list.forEach(emp -> System.out.println(emp));
        /**
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}
         * Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * Emp{eid=5, empName='暖羊羊', age=45, sex='女', email='123@qq.com'}
         */
    }

二、多对一映射处理

问题:

查询员工信息以及员工所对应的部门信息

Emp.java

public class Emp {
    private Integer eid;
    private String empName;
    private Integer age;
    private String sex;
    private String email;
    private Dept dept;
    ...
    }

Dept.java

public class Dept {
    private Integer did;
    private String deptName;
    private List<Emp> emps;
    ...
    }

方案一:级联方式处理映射关系

EmpMapper

/**
  * @description:获取指定员工的信息(包括部门)
  * @author: Hey
  * @date: 2022/7/4 8:58
  * @param: [id]
  * @return: com.ir.mybatis.pojo.Emp
  **/
    Emp getAllEmpAndDept(@Param("eid") Integer eid);

EmpMapper.xml

<resultMap id="title1" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="dept.did" column="did"></result>
        <result property="dept.deptName" column="dept_name"></result>
</resultMap>
    <select id="getAllEmpAndDept" resultMap="title1">
        select * from t_emp left join t_dept on t_emp.did = t_dept .did where t_emp.eid = #{eid}
    </select>

ResultTest

/**
     * @description:获取指定员工的信息(包括部门)
     * @author: Hey
     * @date: 2022/7/4 8:56
     * @param: []
     * @return: void
     **/
    @Test
    public void getAllEmpAndDept(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        Emp emp = mapper.getAllEmpAndDept(2);
        System.out.println(emp);//Emp{eid=2, empName='美羊羊', age=32, sex='女', email='123@qq.com'}

    }

方案二:使用association处理映射关系

EmpMapper

/**
  * @description:获取指定员工的信息(包括部门)
  * @author: Hey
  * @date: 2022/7/4 8:58
  * @param: [id]
  * @return: com.ir.mybatis.pojo.Emp
  **/
    Emp getAllEmpAndDept(@Param("eid") Integer eid);

EmpMapper.xml

   <resultMap id="title1" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
       <!--
            association:处理多对一的映射关系
            property:需要处理多对的映射关系的属性名
            javaType:该属性的类型
            过程:通过javaType,运用反射,确定其所有属性,再将column一一准确赋值
            给指定的属性,这样就得出了一个实体类对象,再将这个对象赋值给property
            中的对象名
        -->

        <association property="dept" javaType="Dept">
            <id property="did" column="did"></id>
            <result property="deptName" column="dept_name"></result>
        </association>
    </resultMap>

    <select id="getAllEmpAndDept" resultMap="title1">
        select * from t_emp left join t_dept on t_emp.did = t_dept .did where t_emp.eid = #{eid}
    </select>

ResultTest

/**
     * @description:获取指定员工的信息(包括部门)
     * @author: Hey
     * @date: 2022/7/4 8:56
     * @param: []
     * @return: void
     **/
    @Test
    public void getAllEmpAndDept(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        Emp emp = mapper.getAllEmpAndDept(3);
        System.out.println(emp);//Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}

    }

方案三:分步查询

⭕ 分步查询的优点:
可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。
否则,每个属性会按需加载,此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。

此时可通过associationcollection中的fetchType属性设置当前的分步查询是否使用延迟加载,fetchType="lazy(延迟加载)|eager(立即加载)"

mybatis-config.xml

 <!--设置MyBatis的全局配置-->
    <settings>
        <!--将_自动映射为驼峰,emp_name:empName-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
         <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>

    </settings>

EmpMapper

/**
     * @description:通过分步查询查询员工以及员工所对应的部门信息
     *              分步查询第一步:查询员工信息
     * @author: Hey 
     * @date: 2022/7/4 9:41
     * @param: [eid]
     * @return: com.ir.mybatis.pojo.Emp
     **/
    Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);

EmpMapper.xml

<resultMap id="empAndDeptByStepResultMap" type="Emp">
        <id property="eid" column="eid"></id>
        <result property="empName" column="emp_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <!--
            select:设置分步查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名)
            column:设置分布查询的条件:根据员工的部门的did去查询该员工所属部门的信息
            fetchType:当开启了全局的延迟加载之后,可通过此属性手动控制延迟加载的效果
            fetchType="lazy|eager":lazy表示延迟加载,eager表示立即加载

        -->
        <association property="dept"
                     select="com.ir.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
                     column="did"
                     >
        </association>
</resultMap>
    <!--Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);-->
    <select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">
        select * from t_emp where eid = #{eid}
    </select>

DeptMapper

/**
     * @description:通过分步查询查询部门以及部门中所有的员工信息
     *              分步查询第二步:根据did查询员工信息
     * @author: Hey 
     * @date: 2022/7/4 9:42
     * @param: [did]
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);

DeptMapper.xml

 <!--Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);-->
    <select id="getEmpAndDeptByStepTwo" resultType="Dept">
        select * from t_dept where did = #{did}
    </select>

ResultTest

/**
     * @description:通过分步查询查询部门以及部门中所有的员工信息
     * @author: Hey 
     * @date: 2022/7/4 9:53
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetEmpAndDeptByStep(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        Emp emp = mapper.getEmpAndDeptByStepOne(3);
        System.out.println(emp);//Emp{eid=3, empName='懒洋洋', age=34, sex='男', email='123@qq.com'}

    }

三、一对多映射处理

方案一:collection

DeptMapper

 /**
     * @description:获取部门以及部门中所有的员工信息
     * @author: Hey
     * @date: 2022/7/4 10:46
     * @param: [did]
     * @return: com.ir.mybatis.pojo.Dept
     **/
    Dept getDeptAndEmp(@Param("did") Integer did);

DeptMapper.xml

<resultMap id="deptAndEmpResultMap" type="Dept">
        <id property="did" column="did"></id>
        <result property="deptName" column="dept_name"></result>
        <!--
            collection:处理一对多的映射关系
            ofType:表示该属性所对应的集合中存储数据的类型
        -->
        <collection property="emps" ofType="Emp">
            <id property="eid" column="eid"></id>
            <result property="empName" column="emp_name"></result>
            <result property="age" column="age"></result>
            <result property="sex" column="sex"></result>
            <result property="email" column="email"></result>
        </collection>
    </resultMap>
    <!--Dept getDeptAndEmp(@Param("did") Integer did);-->
    <select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">
        select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did = #{did}
    </select>

ResultTest

 /**
     * @description:获取部门以及部门中所有的员工信息
     * @author: Hey
     * @date: 2022/7/4 10:54
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetDeptAndEmp(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmp(1);
        System.out.println(dept);
        /**
         * Dept{
         * did=1, deptName='A',
         * emps=[
         * Emp{eid=1, empName='喜羊羊', age=34, sex='男', email='123@qq.com'},
         * Emp{eid=4, empName='沸羊羊', age=23, sex='男', email='123@qq.com'}
         * ]
         * }
         */
    }

方案二:分步查询

DeptMapper

 /**
     * @description:通过分步查询查询部门以及部门中所有的员工信息
     *              分步查询第一步:查询部门信息
     * @author: Hey
     * @date: 2022/7/4 12:31
     * @param: [did]
     * @return: com.ir.mybatis.pojo.Dept
     **/
    Dept getDeptAndEmpByStepOne(@Param("did") Integer did);

DeptMapper.xml

 <resultMap id="deptAndEmpByStepResultMap" type="Dept">
        <id property="did" column="did"></id>
        <result property="deptName" column="dept_name"></result>
        <collection property="emps"
                    select="com.ir.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"
                    column="did" fetchType="eager">

        </collection>
    </resultMap>
    
    <select id="getDeptAndEmpByStepOne" resultType="deptAndEmpByStepResultMap">
        select * from t_dept where did = #{did}
    </select>

EmpMapper

/**
     * @description:通过分步查询查询部门以及部门中所有的员工信息
     *              分步查询第二步:根据did查询员工信息
     * @author: Hey
     * @date: 2022/7/4 12:36
     * @param: [did]
     * @return: java.util.List<com.ir.mybatis.pojo.Emp>
     **/
    List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);

EmpMapper.xml

<select id="getDeptAndEmpByStepTwo"  resultType="Emp">
      select * from t_emp where did = #{did}
    </select>

ResultTest

/**
     * @description:通过分步查询查询部门以及部门中所有的员工信息
     * @author: Hey
     * @date: 2022/7/4 12:40
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetDeptAndEmpByStep(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmpByStepOne(1);
        System.out.println(dept.getDeptName());
    }

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

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

相关文章

Windows10系统安装Redis教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、下载Redis二、安装或解压三、基本配置设置四、启动四、Redis详细配置前言 由于工作中的项目需要用到Redis&#xff0c;那么记录一下Windows11系统安装Redis…

微服务学习-SpringCloud -Nacos (服务注册源码学习)

文章目录源码版本及下载服务注册核心流程图&#xff08;看不清请双击打开大图&#xff09;源码详解客户端注册源码服务端注册源码源码版本及下载 此次源码版本为1.4.1&#xff0c;2.x版本在服务请求时使用了grpc的方式&#xff0c;所以先以1.4.1版本学习&#xff0c;后续再看2…

uni-app--》如何实现网上购物小程序(中上)?

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

Jenkins终极部署详细版

&#xff08;一&#xff09;首先你需要配置好虚拟机的JDK环境和Maven环境 1、配置JDK环境 &#xff08;1&#xff09;上传安装包&#xff0c;然后解压 &#xff08;2&#xff09;修改Linux环境变量 具体参考&#xff1a; https://blog.csdn.net/u010227042/article/details/1…

腾讯云轻量应用服务器可以修改镜像,但有限制!

腾讯云轻量应用服务器镜像可以更换或修改吗&#xff1f;可以&#xff01;镜像可以修改&#xff0c;镜像是指轻量服务器的预装操作系统&#xff0c;轻量服务器创建成功后镜像也是可以更换的&#xff0c;如下图&#xff1a; 腾讯云轻量应用服务器镜像可以修改 目录 轻量服务器修…

自适应模糊PID控制算法

一、自适应模糊PID控制 自适应模糊PID控制将模糊控制与传统PID控制相结合&#xff0c;将两种控制方式进行结合&#xff0c;取长补短&#xff0c;对传统的算法进行优化&#xff0c;形成一种新的控制算法&#xff0c;自适应模糊PID控制可以用于很多场景&#xff0c;比如温度控制&…

stm32下载代码到单片机上需要调节BOOT为什么模式

一、BOOT模式选择图解 二、BOOT模式介绍 所谓启动&#xff0c;一般来说就是指下好程序后&#xff0c;重启芯片时&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态&#xff0c;来选择在复位后的启动模式。 A. Mai…

【读书笔记】《MySQL技术NM InnoDB存储引擎》第一章 MySQL体系结构和存储引擎

文章目录第一章 MySQL体系结构和存储引擎前言1.1 定义数据库和实例1.2MySQL体系结构1.3MySQL存储引擎1.3.1InnoDB存储引擎1.3.2MyISAM存储引擎1.3.3NDB存储引擎1.3.4 Memory存储引擎1.3.5其他存储引擎1.4各存储引擎之间的比较1.5连接MySQL1.5.1 TCP/IP1.5.2命名管道和共享内存1…

np.concatenate函数和np.append函数用于数组拼接

一&#xff1a;np.concatenate() 函数介绍&#xff1a;np.concatenate((a, b), axis0)参数意思&#xff1a;a和b都为数组&#xff0c;axis可以选择大小&#xff0c;axis0 按照行拼接。axis1 按照列拼接。 对于一维数组&#xff0c;情况如下&#xff1a; import numpy as np a…

客户关系管理系统的设计与实现(论文+源码)_kaic

摘 要 近些年来&#xff0c;由于信息科技的不断进步&#xff0c;网络也越来越深入到了各行各业中&#xff0c;信息量呈现的方式各种各样。我们所处的时代社会不管在经济体制、方式&#xff0c;或是在居民消费构成上都产生了巨大的变化&#xff0c;然而现代科技不仅仅为人们生…

fastadmin弹窗添加二级类别

在程序开发中,经常遇上有一、二级表格情况,例如ask和answer,一个ask中,就有很多个answer,如果在后台中分两个列表很容易实现,但很不直观,现通过代码,实现在ask列表中,每个item添加一个查看answer按钮,点击该按钮弹窗显示对应的answer列表,在该弹窗中实现增删改查操作…

什么是MVCC?MVCC解决了什么问题?MVCC的实现原理?

1.什么是MVCC&#xff1f; MVCC全称是【Multi-Version ConCurrency Control】&#xff0c;即多版本控制协议。 多版本控制&#xff08;Multiversion Concurrency Control&#xff09;: 指的是一种提高并发的技术。最早的数据库系统&#xff0c;只有读读之间可以并发&#xff…

LNMP架构部署

目录一、安装 Nginx 服务1、安装依赖包2、创建运行用户3、编译安装4、优化路径5、添加 Nginx 系统服务二、安装 MySQL 服务1、安装Mysql环境依赖包2、创建运行用户3、编译安装4、修改mysql 配置文件5、更改mysql安装目录和配置文件的属主属组6、设置路径环境变量7、初始化数据库…

15.网络爬虫—selenium验证码破解

网络爬虫—selenium验证码破解一selenium验证码破解二破解平台打码平台超级鹰文识别基于人工智能的定制化识别平台 —图灵三英文数字验证码破解selenium破解验证码快捷登录古诗文网四滑动验证码破解selenium滑动验证码破解网易网盾测试案例五总结六后记前言&#xff1a; &#…

鲁祥老师吉他课学习笔记

鲁祥老师吉他课学习笔记 导语 参考教材&#xff1a; 《吉他入门经典教程》李国标 《弹指之间》潘尚文 《吉他教本》好连得出版社 《吉他教程》杰瑞吉他学校 《伯克利现代吉他教程》 《吉他考级教程》英国RSL其中的原声吉他和电吉他教程 《一个月电吉他新手养成计划》宫胁俊郎 …

C51 - LCD12864

LCD128641> 项目概述2> LCD12864参数2.1> LCD硬件原理框图2.2> 工作原理2.2> 6800接口引脚功能2.3> 6800接口时序3> 硬件设计4> 程序设计4.1> 初始化4.2 > 清屏4.3> 显示ASCII码4.4> 显示图片5> 复盘总结1> 项目概述 51单片机驱动LC…

用不了chatgpt,试试Claude-Claude注册教程

Claude是一款人工智能聊天机器人,由 Anthropic 公司开发。说到Anthropic公司就有意思了&#xff0c;Anthropic成立于2021年&#xff0c;其联合创始人Dario Amodei曾经担任OpenAI 研究副总裁&#xff0c;后来因为对OpenAI变成了CloseAI&#xff0c;心存不满&#xff0c;因此就自…

App 抓包提示网络异常怎么破?

背景 当你测试App的时候&#xff0c;想要通过Fiddler/Charles等工具抓包看下https请求的数据情况&#xff0c;发现大部分的App都提示网络异常/无数据等等信息。以“贝壳找房”为例&#xff1a; Fiddler中看到的请求是这样的&#xff1a; 你可能开始找证书的问题&#xff1a;是…

【MySQL】(2)数据类型

文章目录数据类型分类数值类型文本、二进制类型日期和时间类型String 类型数据类型分类 MySQL 支持多种数据类型&#xff0c;大致可分为数值类型&#xff0c;文本、二进制类型&#xff0c;时间日期&#xff0c;String类型。 数值类型 类型字节有符号范围无符号范围TINYINT1-1…

01 |「ChatGPT」简介

前言 ChatGPT 科普。 文章目录 前言一、ChatGPT 介绍1. ChatGPT 是什么2. ChatGPT 有哪些应用二、相关文献一、ChatGPT 介绍 登录网址:https://chat.openai.com/auth/login 1. ChatGPT 是什么 ChatGPT 是一个大型语言模型,由 OpenAl 公司训练,并基于 GPT-3.5 架构构建;它可…