MyBatis(环境配置+基本CRUD)

news2024/12/23 18:08:10

文章目录

    • 1.基本介绍
        • 1.为什么需要MyBatis?
        • 2.MyBatis介绍
        • 3.MyBatis工作示意图
        • 4.MyBatis的优势
    • 2.快速入门
        • 文件目录
        • 1.需求分析
        • 2.数据库表设计
        • 3.父子模块环境配置
          • 1.创建maven父项目
          • 2.删除父项目的src目录
          • 3.pom.xml文件
            • 文件解释
          • 4.创建子模块
            • 1.新建一个Module
            • 2.创建一个子模块
            • 3.子模块与父模块的pom.xml文件解析
        • 4.MyBatis配置
          • 1.pox.xml导入依赖
          • 2.mybatis-config.xml配置mybatis配置文件(名字任意,放在resources下)
          • 3.Monster.java映射表结构的bean
          • 4.Mapper的配置
            • 1.MonsterMapper.java操作Monster表的接口
            • 2.MonsterMapper.xml与MonsterMapper相对应的xml
          • 5.修改mybatis-config.xml配置要管理的Mapper.xml文件
          • 6.MyBatisUtils.java工具类获取SqlSession
          • 7.测试
            • 1.src下创建test目录并创建一个java文件夹
            • 2.MonsterMapperTest.java测试初始化
            • 3.报错找不到文件
          • 8.找不到文件解决方式
            • 1.在父模块的pom.xml文件中配置build项目时要拷贝的文件类型
            • 2.clean一下maven项目然后rebuild(不一定好使)
            • 3.切换maven路径
            • 4.再clean一下maven项目然后rebuild
            • 5.执行测试代码
    • 3.MyBatis的CRUD
        • 1.添加
          • 1.代码实例
          • 2.报错ssl问题
        • 2.返回自增长的id(适用于update和insert)
          • 1.修改MonsterMapper.xml
          • 2.修改测试代码
          • 3.结果展示
        • 3.删除
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置删除方法
          • 3.测试代码
        • 4.修改
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置修改方法
          • 3.测试代码
        • 5.配置类型别名mybatis-config.xml
        • 6.查询单条记录
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置查询方法
          • 3.测试代码
        • 7.查询多条记录
          • 1.MonsterMapper.java添加方法
          • 2.MonsterMapper.xml配置查询方法
          • 3.测试代码
    • 4.日志输出配置
        • 1.需求分析
        • 2.解决方案:日志输出
          • 1.mybatis-config.xml最前面配置日志
          • 2.结果展示
        • 3.本阶段完整配置文件
          • 1.MonsterMapper.xml
          • 2.mybatis-config.xml
          • 3.父模块pom.xml

1.基本介绍

1.为什么需要MyBatis?

image-20240301111438891

2.MyBatis介绍

image-20240301111843698

3.MyBatis工作示意图

image-20240301125616637

4.MyBatis的优势

image-20240301130054693

2.快速入门

文件目录

image-20240301193629499

1.需求分析

image-20240301130246382

2.数据库表设计
CREATE DATABASE mybatis
use mybatis

CREATE TABLE monster(
	`id` INT NOT NULL auto_increment,
	`age` INT NOT NULL,
	`birthday` DATE DEFAULT NULL,
	`email` VARCHAR(255) NOT NULL, 
	`gender` TINYINT NOT NULL,
	`name` VARCHAR(255) NOT NULL,
	`salary` DOUBLE NOT NULL,
	PRIMARY KEY (`id`)
)
3.父子模块环境配置
1.创建maven父项目

image-20240301132101162

2.删除父项目的src目录

image-20240301132431047

3.pom.xml文件
文件解释

image-20240301132955818

4.创建子模块
1.新建一个Module

image-20240301134544021

2.创建一个子模块
  • parent应该是上面的mybatis父模块
  • Archetype设置成最基础的配置

image-20240301134719950

3.子模块与父模块的pom.xml文件解析

image-20240301135913041

image-20240301140153077

4.MyBatis配置
1.pox.xml导入依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Archetype - mybatis</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!--如果设置scope为test,则只能在test包下使用-->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
2.mybatis-config.xml配置mybatis配置文件(名字任意,放在resources下)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.jdbc.Driver"/>
                <!--配置连接url-->
                <!--
                1.jdbc:mysql:协议
                2.127.0.0.1:3306:指定连接mysql的ip+端口
                3.mybatis:连接的db
                4.useSSL:使用安全连接
                5.&amp;:表示&
                6.useUnicode=true:使用unicode,防止编码错误
                7.characterEncoding=UTF-8:字符集使用utf-8
                -->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--<mappers>-->
    <!--    <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
    <!--</mappers>-->
</configuration>

3.Monster.java映射表结构的bean
  • 属性名与表的列名保持一致
  • 需要有无参构造器(反射使用)
package com.sun.entity;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Monster {
    private Integer id;
    private Integer age;
    private Date birthday;
    private String email;
    private Integer gender;
    private String name;
    private Double salary;

    //无参构造器
    public Monster() {
    }

    public Monster(Integer id, Integer age, Date birthday, String email, Integer gender, String name, Double salary) {
        this.id = id;
        this.age = age;
        this.birthday = birthday;
        this.email = email;
        this.gender = gender;
        this.name = name;
        this.salary = salary;
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", age=" + age +
                ", birthday=" + birthday +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", name='" + name + '\'' +
                ", salary=" + salary +
                '}';
    }
}

4.Mapper的配置
1.MonsterMapper.java操作Monster表的接口
package com.sun.mapper;

import com.sun.entity.Monster;

/**
 * 这个接口用于声明操作monster表的方法
 *
 * @author 孙显圣
 * @version 1.0
 */
public interface MonsterMapper {
    public void addMonster(Monster monster);
}

2.MonsterMapper.xml与MonsterMapper相对应的xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.MonsterMapper">
    <!--addMonster是接口的方法名,parameterType是接口的参数类型-->
    <insert id="addMonster" parameterType="com.sun.entity.Monster">
        <!--#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}是从传入的Monster对象中获取的-->
        INSERT INTO `monster`(`id`,`age`,`birthday`,`email`,`gender`,`name`,`salary`)
        VALUES(NULL, #{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    </insert>
</mapper>
5.修改mybatis-config.xml配置要管理的Mapper.xml文件
    <!--配置需要管理的Mapper.xml文件-->
    <mappers>
        <mapper resource="com/sun/mapper/MonsterMapper.xml"/>
    </mappers>

image-20240301160743861

6.MyBatisUtils.java工具类获取SqlSession
package com.util;

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 java.io.IOException;
import java.io.InputStream;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    //使用静态代码块初始化SqlSessionFactory
    static {
        try {
            //获取Mybatis配置文件的输入流
            String resource = "mybatis-config.xml";
            //默认是从类路径下获取资源,在maven中指的就是resources文件夹下,会映射到实际的工作目录
            InputStream resourceAsStream = Resources.getResourceAsStream(resource);
            //读取资源获取SessionFactory,可以理解为连接池
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //编写方法返回SqlSession
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

  • 注意这里的Resources不要选错了!

image-20240301161439766

7.测试
1.src下创建test目录并创建一个java文件夹

image-20240301162733504

2.MonsterMapperTest.java测试初始化
import com.sun.mapper.MonsterMapper;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MonsterMapperTest {
    //两个属性
    private SqlSession sqlSession;
    private MonsterMapper monsterMapper;

    //编写方法完成初始化
    @Before //标注了Before之后表示了在执行目标测试方法前会执行该方法
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        //获取到MonsterMapper对象
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }

    @Test
    public void t1() {
        System.out.println("t1");
    }

}

3.报错找不到文件

image-20240301164140989

image-20240301164219954

8.找不到文件解决方式
1.在父模块的pom.xml文件中配置build项目时要拷贝的文件类型
  <!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题-->
  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <!--在java文件夹下的多级目录下的xml文件-->
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <!--在resources文件夹下的多级目录下的xml文件和properties文件-->
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
2.clean一下maven项目然后rebuild(不一定好使)

3.切换maven路径

image-20240301170153831

4.再clean一下maven项目然后rebuild

成功!

image-20240301170243802

5.执行测试代码

可以看出返回的是一个针对接口的代理对象,所以底层是使用的代理对象来调用接口的方法

image-20240301170303814

3.MyBatis的CRUD

1.添加
1.代码实例
import com.sun.entity.Monster;
import com.sun.mapper.MonsterMapper;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class MonsterMapperTest {
    //两个属性
    private SqlSession sqlSession; //相当于连接
    private MonsterMapper monsterMapper;

    //编写方法完成初始化
    @Before //标注了Before之后表示了在执行目标测试方法前会执行该方法
    public void init() {
        //获取到sqlSession
        sqlSession = MyBatisUtils.getSqlSession();
        //获取到MonsterMapper对象
        monsterMapper = sqlSession.getMapper(MonsterMapper.class);
        System.out.println(monsterMapper.getClass());
    }

    //添加信息
    @Test
    public void add() {
        for (int i = 0; i < 2; i ++) {
            Monster monster = new Monster
                    (null, 10 + i, new Date(), "sun@qq.com", 0, "孙显圣", 10.0 + i);
            //代理对象执行接口的方法
            monsterMapper.addMonster(monster);
        }
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("成功");

    }

}

2.报错ssl问题

将mybatis-config.xml中的useSSL改成false

image-20240301173401047

2.返回自增长的id(适用于update和insert)
1.修改MonsterMapper.xml

image-20240301182943568

2.修改测试代码

image-20240301183117303

3.结果展示

image-20240301183132142

3.删除
1.MonsterMapper.java添加方法
    public void delMonster(Integer id);
2.MonsterMapper.xml配置删除方法
    <!--parameterType如果是java的数据类型可以直接简写-->
    <delete id="delMonster" parameterType="Integer">
        <!--这里可以直接使用形参名来取出形参-->
        DELETE FROM `monster` where id = #{id}
    </delete>
3.测试代码
    //删除指定id的信息
    @Test
    public void delMonster() {
        monsterMapper.delMonster(1);
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("删除成功");
    }
4.修改
1.MonsterMapper.java添加方法
    public void updateMonster(Monster monster);
2.MonsterMapper.xml配置修改方法
    <update id="updateMonster" parameterType="com.sun.entity.Monster" useGeneratedKeys="true" keyProperty="id">
        UPDATE `monster` SET
        `age` = #{age}, `birthday` = #{birthday},
        `email` = #{email}, `name` = #{name}, `salary` = #{salary}
        WHERE `id` = #{id}
    </update>
3.测试代码
    //修改信息
    @Test
    public void updateMonster() {
        Monster monster = new Monster
                (null, 10, new Date(), "sun@qq.com", 0, "孙显圣", 10.0);
        monsterMapper.updateMonster(monster);
        //如果是增删改还要提交一下事务
        if (sqlSession != null) {
            sqlSession.commit();
            //将连接放回连接池
            sqlSession.close();
        }
        System.out.println("修改成功");
    }
5.配置类型别名mybatis-config.xml
    <!--配置类型别名-->
    <typeAliases>
        <!--这样配置完了就可以直接使用Monster来表示Monster类型的全类名了-->
        <typeAlias type="com.sun.entity.Monster" alias="Monster"/>
    </typeAliases>
6.查询单条记录
1.MonsterMapper.java添加方法
    public Monster getMonsterById(Integer id);
2.MonsterMapper.xml配置查询方法
    <select id="getMonsterById" resultType="Monster">
        SELECT * FROM `monster` WHERE id = #{id}
    </select>
3.测试代码
    //查询单条记录
    @Test
    public void getMonsterById() {
        Monster monsterById = monsterMapper.getMonsterById(3);
        System.out.println(monsterById);
    }
7.查询多条记录
1.MonsterMapper.java添加方法
    public List<Monster> findAllMonster();
2.MonsterMapper.xml配置查询方法
    <!--注意:即使这里返回的是一个集合,返回类型要是集合中包含的类型,不需要是集合类型-->
    <select id="findAllMonster" resultType="Monster">
        SELECT * FROM `monster`
    </select>
3.测试代码
    //查询多条记录
    @Test
    public void findAllMonster() {
        List<Monster> allMonster = monsterMapper.findAllMonster();
        for (Monster monster : allMonster) {
            System.out.println(monster);
        }
    }

4.日志输出配置

1.需求分析

image-20240301192613753

2.解决方案:日志输出
1.mybatis-config.xml最前面配置日志
    <!--配置mybatis自带的日志,settings需要放到最前面-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
2.结果展示

image-20240301193144994

3.本阶段完整配置文件
1.MonsterMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定该xml文件和哪个接口对应-->
<mapper namespace="com.sun.mapper.MonsterMapper">
    <!--addMonster是接口的方法名,parameterType是接口的参数类型-->
    <insert id="addMonster" parameterType="com.sun.entity.Monster" useGeneratedKeys="true" keyProperty="id">
        <!--#{age}, #{birthday}, #{email} , #{gender}, #{name}, #{salary}是从传入的Monster对象中获取的-->
        INSERT INTO `monster`(`id`,`age`,`birthday`,`email`,`gender`,`name`,`salary`)
        VALUES(NULL, #{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
    </insert>
    <!--parameterType如果是java的数据类型可以直接简写-->
    <delete id="delMonster" parameterType="Integer">
        <!--这里可以直接使用形参名来取出形参-->
        DELETE FROM `monster` where id = #{id}
    </delete>
    <update id="updateMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">
        UPDATE `monster` SET
        `age` = #{age}, `birthday` = #{birthday},
        `email` = #{email}, `name` = #{name}, `salary` = #{salary}
        WHERE `id` = #{id}
    </update>
    <select id="getMonsterById" resultType="Monster">
        SELECT * FROM `monster` WHERE id = #{id}
    </select>
    <!--注意:即使这里返回的是一个集合,返回类型要是集合中包含的类型,不需要是集合类型-->
    <select id="findAllMonster" resultType="Monster">
        SELECT * FROM `monster`
    </select>
</mapper>
2.mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置mybatis自带的日志,settings需要放到最前面-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置类型别名-->
    <typeAliases>
        <!--这样配置完了就可以直接使用Monster来表示Monster类型的全类名了-->
        <typeAlias type="com.sun.entity.Monster" alias="Monster"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!--配置事务管理器-->
            <transactionManager type="JDBC"/>
            <!--配置数据源-->
            <dataSource type="POOLED">
                <!--配置驱动-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--配置连接url-->
                <!--
                1.jdbc:mysql:协议
                2.127.0.0.1:3306:指定连接mysql的ip+端口
                3.mybatis:连接的db
                4.useSSL:使用安全连接
                5.&amp;:表示&
                6.useUnicode=true:使用unicode,防止编码错误
                7.characterEncoding=UTF-8:字符集使用utf-8
                -->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置需要管理的Mapper.xml文件-->
    <mappers>
        <mapper resource="com/sun/mapper/MonsterMapper.xml"/>
    </mappers>
</configuration>

3.父模块pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Archetype - mybatis</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>mybatis_quickstart</module>
  </modules>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!--如果设置scope为test,则只能在test包下使用-->
      <scope>test</scope>
    </dependency>
  </dependencies>
  <!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题-->
  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <!--在java文件夹下的多级目录下的xml文件-->
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <!--在resources文件夹下的多级目录下的xml文件和properties文件-->
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>

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

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

相关文章

ffmpeg与sdl的个人笔记

说明 这里的ffmpeg基础知识和sdl基础知识仅提及与示例代码相关的知识点, 进阶可学习雷神的博客。 https://blog.csdn.net/leixiaohua1020 当然&#xff0c;如代码写的有问题或有更好的见解&#xff0c;欢迎指正&#xff01; 音视频基础知识 在学习音视频理论知识时&#xff…

学数据结构之前是否该把c语言吃透?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 我见过的第一个版本的数据…

vue+elementui(笔记)

vueelementui 表格 <div class"tableStyle"><el-table :data"pointsSettingsTableData" style"width: 70%" :stripe"true" size"mini"header-cell-class-name"headerClassName" :cell-style"{ tex…

合规基线:让安全大检查更顺利

前言 说起安全检查&#xff0c;安全从业人员可能都非常熟悉“安全标准”概念。所有企事业单位网络安全建设都需要满足来自于国家或监管单位的安全标准&#xff0c;如等保2.0、CIS安全标准等。安全标准&#xff0c;还有一个叫法就是“安全基线”。字典上对“基线”的解释是&…

AI视频教程下载:用ChatGPT做SEO的终极教程

ChatGPT是由OpenAI开发的一款尖端人工智能&#xff0c;它已经彻底改变了我们进行搜索引擎优化&#xff08;SEO&#xff09;的方式。其先进的语言处理能力使其成为增强网站内容、提高搜索引擎排名和显著提升在线可见性的宝贵工具。 这个全面的课程旨在为你提供使用ChatGPT进行SE…

算法必备数学基础:图论方法由浅入深实践与应用

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

简述 一个人的游戏叫孤独&#xff0c;一群人的游戏才是乐趣&#xff0c;随着电竞产业在国内的快速发展&#xff0c;游戏陪练行业也迅速成长&#xff0c;现在很多游戏玩家为了追求更高质量的游戏体验感&#xff0c;往往会在玩游戏的过程中找陪练&#xff0c;通过陪玩系统进行预…

MySQL随便聊----之MySQL的调控按钮-启动选项和系统变量

-------MySQL是怎么运行的 基本介绍 如果你用过手机&#xff0c;你的手机上一定有一个设置的功能&#xff0c;你可以选择设置手机的来电铃声、设置音量大小、设置解锁密码等等。假如没有这些设置功能&#xff0c;我们的生活将置于尴尬的境地&#xff0c;比如在图书馆里无法把手…

react项目发布后,浏览器源码泄露的解决方案

在使用create-react-app时&#xff0c;打包生产环境npm run build&#xff0c;浏览器打开后仍然是可以看到源码的。源码都没上传&#xff0c;为啥线上能看到源码 。 例&#xff1a;线上与服务器 线上与源码 react-scripts build和npm run build 有什么不同 react-scripts bui…

spring高级篇(五)

1、参数解析器 前篇提到过&#xff0c;参数解析器是HandlerAdapters中的组件&#xff0c;用于解析controller层方法中加了注解的参数信息。 有一个controller&#xff0c;方法的参数加上了各种注解&#xff1a; public class Controller {public void test(RequestParam("…

Redux Toolkit 中持久化路由配置数组的实践指南

要将路由配置数组保存到 Redux Toolkit 中并持久化,你可以按照以下步骤进行操作: 创建一个 Slice 来管理路由配置 在 Redux Toolkit 中,我们使用 createSlice 来创建一个 slice,用于管理路由配置的状态。 import { createSlice } from reduxjs/toolkit;const routesSlice c…

【重磅】史上最全企业数字化转型项目流程管理资料大合集下载(2.5G,1429份)

重磅分享&#xff0c;史上最全企业数字化转型项目流程管理资料大合集&#xff0c;共1429份。 一、项目管理实战工具大全&#xff08;甘特图、表格、项目阶段文档等527份&#xff09; 二、项目管理流程规范制度&#xff08;各类流程制度共86份&#xff09; 三、项目管理模板&…

编译Qt6.5.3LTS版本(Mac/Windows)的mysql驱动(附带编译后的全部文件)

文章目录 0 背景1 编译过程2 福利参考 0 背景 因为项目要用到对MYSQL数据库操作&#xff0c;所以需要连接到MYSQL数据库。但是连接需要MYSQL驱动&#xff0c;但是Qt本身不自带MYSQL驱动&#xff0c;需要自行编译。网上有很多qt之前版本的mysql驱动&#xff0c;但是没有找到qt6…

Python数据结构与算法(1):将序列分解为单独的变量

问题 现在有一个包含 N 个元素的元组或者是序列&#xff0c;怎样将它里面的值解压后同时赋值给 N 个变量&#xff1f; 解决方案 任何的序列&#xff08;或者是可迭代对象&#xff09;可以通过一个简单的赋值操作来分解为单独的变量。 唯一的要求就是变量的总数和结构必须与序…

【数据结构7-1-查找-线性-二分法-二叉树-哈希表】

目录 1 查找基本概念2 线性表的查找2.1 顺序查找2.2 二分法查找2.3 分块查找 3 树表的查询3.1 二叉排序树3.1.1 定义3.1.2 二叉树的建立、遍历、查找、增加、删除&#xff1a;3.1.3 代码实现&#xff1a; 3.2 平衡二叉树3.2.1 平横因子3.2.2 不平横树的调整-左旋3.2.3 不平横树…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号&#xff0c;且自动保留两位有效数字 输入&#xff1a;123 输出&#xff1a;123.00 输入&#xff1a;12345 输出&#xff1a;12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

[机器学习系列]深入解析K-Means聚类算法:理论、实践与优化

目录 一、KMeans (一)Kmeans简介 (二)Kmeans作用和优点 (三)Kmeans局限和缺点 (四)Kmeans步骤 (五)如何选取最佳的K值的三种方法 (六)手肘法和目标函数的变化两种确定K值方法的区别 (七)如何选取第一次迭代的K个类中心------KMeans方法 (八)KMeans的常用参数介绍 二、…

【C语言刷题系列】对数字添加逗号

目录 一、问题描述 二、解题思路 三、源代码 拓展&#xff1a; 个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 一、问题描述 二、解题思路 题目的要求&#xff0c;即对于一个较大的整数&#xff0c;每三位数字之间添加…

【go项目01_学习记录day01】

博客系统 1 vscode开发go项目插件推荐1.1 CtrlShiftP&#xff08;俗称万能键&#xff09; &#xff1a;打开命令面板。在打开的输入框内&#xff0c;可以输入任何命令。1.2 开发时&#xff0c;我们需要经常查阅 Go 语言官方文档&#xff0c;可惜因国内访问外网不稳定&#xff0…