当前位置: 首页 > news >正文

Java后端开发——Mybatis实验

文章目录

  • Java后端开发——Mybatis实验
    • 一、MyBatis入门程序
      • 1.创建工程
      • 2.引入相关依赖
      • 3.数据库准备
      • 4.编写数据库连接信息配置文件
      • 5.创建POJO实体
      • 6.编写核心配置文件和映射文件
    • 二、MyBatis案例:员工管理系统
      • 1.在mybatis数据库中创建employee表
      • 2.创建持久化类Employee
      • 3.编写映射文件
      • 4.添加映射文件路径配置。
      • 5.编写MyBatisUtils工具类
      • 6.编写测试类
    • 三、动态SQL测试实验
      • 1.创建映射文件CustomerMapper.xml
      • 2.在映射文件CustomerMapper.xml中
      • 3.添加使用<where>元素执行动态SQL元素
      • 4.添加使用<trim>元素执行动态SQL元素
      • 5.添加使用<set>元素执行更新操作的动态SQL
    • 四、复杂查询操作实验
      • 1.添加使用<foreach>元素迭代数组
      • 2.添加使用<foreach>元素迭代List集合执行批量查询操作的动态SQL
      • 3.添加使用<foreach>元素迭代Map集合执行批量查询操作的动态SQL。

Java后端开发——Mybatis实验

一、MyBatis入门程序

1.创建工程

在Eclipse中,创建名称为mybatis的工程
在这里插入图片描述

2.引入相关依赖

在这里插入图片描述

3.数据库准备

create database mybatis charset=utf8;

在这里插入图片描述

4.编写数据库连接信息配置文件

在项目的src目录下创建数据库连接的配置文件,这里将其命名为db.properties,在该文件中配置数据库连接的参数。

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

在这里插入图片描述

5.创建POJO实体

在项目的src/main/java目录下创建com.javaweb.pojo包,在com.javaweb.pojo包下创建User类,该类用于封装User对象的属性。

package com.javaweb.pojo;public class Customer {
private Integer id; private String username; // 主键ID、客户名称
private String jobs; private String phone; // 职业、电话
// 省略getter/setter@Override
public String toString() {
return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]"; }public Integer getId() {
return id;
}public void setId(Integer id) {
this.id = id;
}public String getUsername() {
return username;
}public void setUsername(String username) {
this.username = username;
}public String getJobs() {
return jobs;
}public void setJobs(String jobs) {
this.jobs = jobs;
}public String getPhone() {
return phone;
}public void setPhone(String phone) {
this.phone = phone;
}
}

6.编写核心配置文件和映射文件

在项目的src目录下创建MyBatis的核心配置文件,该文件主要用于项目的环境配置,如数据库连接相关配置等。核心配置文件可以随意命名,但通常将其命名为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 核心根标签-->
<configuration>
<!--引入数据库连接的配置文件-->
<properties resource="db.properties"/>
<!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个-->
<environments default="mysql">
<!--environment配置数据库环境 id属性唯一标识-->
<environment id="mysql">
<!-- transactionManager事务管理。 type属性,采用JDBC默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource数据源信息 type属性 连接池-->
<dataSource type="POOLED">
<!-- property获取数据库连接的配置信息 -->
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
</environments>
<!-- mappers引入映射配置文件 -->
<mappers>
<!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 -->
<mapper resource="com/javaweb/dao/CustomerMapper.xml"></mapper>
</mappers>
</configuration>

二、MyBatis案例:员工管理系统

1.在mybatis数据库中创建employee表

并在employee表中插入几条数据

use mybatis;
create table user(id int primary key auto_increment,name varchar(20) not null,age int not null
);
insert into user values(null,'张三',20),(null,'李四',18);

在这里插入图片描述

2.创建持久化类Employee

并在类中声明id(编号)、name(姓名)、age(年龄)和position(职位)属性,以及属性对应的getter/setter方法

package com.javaweb.bean;
public class Employee {
private Integer id; 
private String name; 
private Integer age; 
private String position; 
// 省略getter/setter方法
@Override
public String toString() {
return "Employee{" + "id=" + id + ", name=" + name +
", age=" + age + ", position=" + position +'}';
}
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 getPosition() {
return position;
}public void setPosition(String position) {
this.position = position;
}
}

3.编写映射文件

创建映射文件EmployeeMapper.xml,该文件主要用于实现SQL语句和Java对象之间的映射。

<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.javaweb.mapper.EmployeeMapper">
<select id="findById" parameterType="Integer" resultType="com.javaweb.pojo.Employee"> 
select * from employee where id = #{id}
</select>
<insert id="add" parameterType="com.javaweb.pojo.Employee">
insert into employee(id,name,age,position) values (#{id},#{name},#{age},#{position})
</insert>
</mapper> 

4.添加映射文件路径配置。

在mybatis-config.xml映射文件的元素下添加EmployeeMapper.xml映射文件路径的配置。

<mapper 
resource="com/javaweb/mapper/EmployeeMapper.xml">
</mapper>

5.编写MyBatisUtils工具类

创建MyBatisUtils工具类,该类用于封装读取配置文件信息的代码。

public class MyBatisUtils {private static SqlSessionFactory sqlSessionFactory = null;static {	try {// 使用MyBatis提供的Resources类加载MyBatis的配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 构建SqlSessionFactory工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) { e.printStackTrace();}}public static SqlSession getSession() {//获取SqlSession对象的静态方法return sqlSessionFactory.openSession();}
} 

6.编写测试类

(1)在项目src/test/java目录下创建Test包,在Test包下创建MyBatisTest测试类,用于程序测试。在MyBatisTest测试类中添加findByIdTest()方法,用于根据id查询员工信息。
(2)在MyBatisTest测试类中添加insertTest()方法,用于插入员工信息。
(3)在MyBatisTest测试类中添加updateTest()方法,用于更新员工信息。
(4)在MyBatisTest测试类中添加deleteTest()方法,用于删除员工信息。

package com.javaweb.test;import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;import com.javaweb.pojo.Customer;
import com.javaweb.utils.MybatisUtils;class MyBatisTest {@Testpublic void findCustomerByNameAndJobsTest() {SqlSession session = MybatisUtils.getSession();Customer customer = new Customer();customer.setUsername("jack");customer.setJobs("teacher");List<Customer> customers = session.selectList("com.javaweb.dao.CustomerMapper.findCustomerByNameAndJobs",customer);for (Customer customer2 : customers) {System.out.println(customer2);}session.close();}@Testpublic void findCustomerByNameOrJobsTest() {SqlSession session = MybatisUtils.getSession();Customer customer = new Customer();customer.setUsername("tom");customer.setJobs("teacher");List<Customer> customers = session.selectList("com.javaweb.dao.CustomerMapper.findCustomerByNameOrJobs",customer);for (Customer customer2 : customers) {System.out.println(customer2);}session.close();}@Testpublic void findCustomerByNameAndJobs2Test() {SqlSession session = MybatisUtils.getSession();Customer customer = new Customer();customer.setUsername("jack");customer.setJobs("teacher");List<Customer> customers = session.selectList("com.javaweb.dao.CustomerMapper.findCustomerByNameAndJobs2",customer);for (Customer customer2 : customers) {System.out.println(customer2);}session.close();}@Testpublic void findCustomerByNameAndJobs3Test() {SqlSession session = MybatisUtils.getSession();Customer customer = new Customer();customer.setUsername("jack");customer.setJobs("teacher");List<Customer> customers = session.selectList("com.javaweb.dao.CustomerMapper.findCustomerByNameAndJobs3",customer);for (Customer customer2 : customers) {System.out.println(customer2);}session.close();}@Testpublic void updateCustomerBySetTest() {		SqlSession sqlSession = MybatisUtils.getSession();Customer customer = new Customer();  customer.setId(3);customer.setPhone("13311111234");int rows = sqlSession.update("com.javaweb.dao"+ ".CustomerMapper.updateCustomerBySet", customer);if(rows > 0) {System.out.println("您成功修改了"+rows+"条数据!");} else { System.out.println("执行修改操作失败!!!");}sqlSession.commit();sqlSession.close();}@Testpublic void findByArrayTest() {SqlSession session = MybatisUtils.getSession(); Integer[] roleIds = {2,3}; // 创建数组,封装查询idList<Customer> customers =       session.selectList("com.javaweb.dao.CustomerMapper.findByArray", roleIds);	for (Customer customer : customers) {System.out.println(customer);}session.close();}}

三、动态SQL测试实验

1.创建映射文件CustomerMapper.xml

在映射文件中,根据客户姓名和年龄组合条件查询客户信息,使用元素编写该组合条件的动态SQL,测试并显示结果。

<select id="findCustomerByNameOrJobs" parameterType="com.javaweb.pojo.Customer"
resultType="com.javaweb.pojo.Customer">
select * from t_customer where 1=1
<choose>
<!--条件判断 -->
<when test="username !=null and username !=''">
and username like concat('%',#{username}, '%')
</when>
<when test="jobs !=null and jobs !=''">
and jobs= #{jobs}
</when>
<otherwise>
and phone is not null
</otherwise>
</choose>
</select>

2.在映射文件CustomerMapper.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.javaweb.dao.CustomerMapper">
<!-- <if>元素使用 -->
<select id="findCustomerByNameAndJobs" parameterType="com.javaweb.pojo.Customer"
resultType="com.javaweb.pojo.Customer">
select * from t_customer where 1=1 
<if test="username !=null and username !=''">
and username like concat('%',#{username}, '%')
</if>
<if test="jobs !=null and jobs !=''">
and jobs= #{jobs}
</if> 
</select>
<!--<choose>(<when><otherwise>)元素使用 -->
<select id="findCustomerByNameOrJobs" parameterType="com.javaweb.pojo.Customer"
resultType="com.javaweb.pojo.Customer">
select * from t_customer where 1=1
<choose>
<!--条件判断 -->
<when test="username !=null and username !=''">
and username like concat('%',#{username}, '%')
</when>
<when test="jobs !=null and jobs !=''">
and jobs= #{jobs}
</when>
<otherwise>
and phone is not null
</otherwise>
</choose>
</select>
<update id="updateCustomerBySet" parameterType="com.javaweb.pojo.Customer">update t_customer 
<set>
<if test="username !=null and username !=''">
username=#{username},</if>
<if test="jobs !=null and jobs !=''"> jobs=#{jobs},</if>
<if test="phone !=null and phone !=''">phone=#{phone},</if>
</set> where id=#{id}
</update> 
</mapper>

在这里插入图片描述

3.添加使用元素执行动态SQL元素

在映射文件CustomerMapper.xml中,添加使用元素执行动态SQL元素,测试并显示结果。

<select id="findCustomerByNameAndJobs2" parameterType="com.javaweb.pojo.Customer"resultType="com.javaweb.pojo.Customer">select * from t_customer<where><if test="username !=null and username !=''">and username like concat('%',#{username}, '%')</if><if test="jobs !=null and jobs !=''">and jobs= #{jobs}</if></where></select>

4.添加使用元素执行动态SQL元素

在映射文件CustomerMapper.xml中,添加使用元素执行动态SQL元素,测试并显示结果。

<select id="findCustomerByNameAndJobs3" parameterType="com.javaweb.pojo.Customer"resultType="com.javaweb.pojo.Customer">select * from t_customer<trim prefix="where" prefixOverrides="and" ><if test="username !=null and username !=''">and username like concat('%',#{username}, '%')</if><if test="jobs !=null and jobs !=''">and jobs= #{jobs}</if></trim>
</select>

5.添加使用元素执行更新操作的动态SQL

在映射文件CustomerMapper.xml中,添加使用元素执行更新操作的动态SQL。

<update id="updateCustomerBySet" parameterType="com.itheima.pojo.Customer">update t_customer <set><if test="username !=null and username !=''">username=#{username},</if><if test="jobs !=null and jobs !=''">  jobs=#{jobs},</if><if test="phone !=null and phone !=''">phone=#{phone},</if></set> where id=#{id}
</update> 

在这里插入图片描述

四、复杂查询操作实验

1.添加使用元素迭代数组

在映射文件CustomerMapper.xml中,添加使用元素迭代数组执行批量查询操作的动态SQL。

<select id="findByList" parameterType="java.util.Arrays"resultType="com.javaweb.pojo.Customer">select * from t_customer where id in<foreach item="id" index="index" collection="list" open="(" separator="," close=")">#{id}</foreach>
</select>

在这里插入图片描述

2.添加使用元素迭代List集合执行批量查询操作的动态SQL

在映射文件CustomerMapper.xml中,添加使用元素迭代List集合执行批量查询操作的动态SQL。

<select id="findByList" parameterType="java.util.Arrays"resultType="com.javaweb.pojo.Customer">select * from t_customer where id in<foreach item="id" index="index" collection="list" open="(" separator="," close=")">#{id}</foreach>
</select>

在这里插入图片描述

3.添加使用元素迭代Map集合执行批量查询操作的动态SQL。

在映射文件CustomerMapper.xml中,添加使用元素迭代Map集合执行批量查询操作的动态SQL。

<select id="findByMap" parameterType="java.util.Map"resultType="com.javaweb.pojo.Customer">select * from t_customer where jobs=#{jobs} and id in<foreach item="roleMap" index="index" collection="id" open="(" 	separator="," close=")"> #{roleMap}</foreach>
</select>

在这里插入图片描述
在这里插入图片描述

相关文章:

Java后端开发——Mybatis实验

文章目录 Java后端开发——Mybatis实验一、MyBatis入门程序1.创建工程2.引入相关依赖3.数据库准备4.编写数据库连接信息配置文件5.创建POJO实体6.编写核心配置文件和映射文件 二、MyBatis案例&#xff1a;员工管理系统1.在mybatis数据库中创建employee表2.创建持久化类Employee…...

【UE Niagara 网格体粒子系列】02-自定义网格

目录 步骤 一、创建自定义网格体 二、创建Niagara系统 步骤 一、创建自定义网格体 1. 打开Blender&#xff0c;按下ShiftA来创建一个平面 将该平面旋转90 导出为fbx 设置导出选定的物体&#xff0c;这里命名为“SM_PlaneFaceCamera.fbx” 按H隐藏刚才创建的平面&#x…...

k8s 检测node节点内存使用率平衡调度脚本 —— 筑梦之路

直接上脚本&#xff1a; #! /bin/bash#对实际使用内存大于85%的机器停止调度&#xff0c;对实际使用内存小于70%的 关闭调度# 获取实际内存小于或等于70%的机器 memory_lt_70kubectl top nodes |awk NR>1{if($50<70) print $1} # 获取实际内存大于或等于85%的机器 memor…...

React Native集成到现有原生应用

本篇文章以MacOS环境开发iOS平台为例&#xff0c;记录一下在原生APP基础上集成React Native React Native中文网 详细介绍了搭建环境和集成RN的步骤。 环境搭建 必须安装的依赖有&#xff1a;Node、Watchman、Xcode 和 CocoaPods。 安装Homebrew Homebrew是一款Mac OS平台下…...

完全卸载grafana

先停掉grafana sudo systemctl stop grafana-server 查看要卸载的包的名字 yum list installed yum remove grafana-enterprise.x86_64 成功 删除grafana的数据目录 sudo rm -rf /etc/grafana/sudo rm -rf /usr/share/grafana/sudo rm -rf /var/lib/grafana/...

Vue2.组件通信

样式冲突 写在组件中的样式默认会全局生效。容易造成多个组件之间的样式冲突问题。 可以给组件加上scoped属性&#xff0c;让样式只作用于当前组件。 原理&#xff1a; 给当前组件模板的所有元素&#xff0c;加上一个自定义属性data-v-hash值&#xff0c;用以区分不同的组件。…...

CAS的超~详细介绍

什么是CAS CAS全称Compare and swap,是一种比较特殊的CPU指令. 字面意思:"比较并交换", 一个CAS涉及到以下操作: 我们假设内存中的原数据为V,旧的预期值A,需要修改的新值B. 1.比较A和V是否相等(比较) 2.如果相等,将B写入V.(交换) 3.返回操作是否成功. 伪代码 下面…...

Scott用户数据表的分析

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 如果想要知道某个用户所有的数据表: select * from tab; 此时结果中一共返回了四张数据表&#xff0c;分别为部门表&#xff08;dept&#xff09; &#xff0c;员工表&#xff08;emp&a…...

网络基础学习(3):交换机

1.交换机结构 &#xff08;1&#xff09;网线接口和后面的电路部分加在一起称为一个端口&#xff0c;也就是说交换机的一个端口就相当于计算机上的一块网卡。 如果在计算机上安装多个网卡&#xff0c;并让网卡接收所有网络包&#xff0c;再安装具备交换机功能的软件&#xff0…...

【软件测试学习笔记2】用例设计方法

1.能对穷举场景设计测试点&#xff08;等价法&#xff09; 等价类&#xff1a; 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分 分类&#xff1a;有效等价类&#xff1a;满足需求的数据集合 无效等价类&#xff1a;不满足需求的数据集合 步…...

蓝桥杯 第三场 小白入门赛

召唤神坤 有意思&#x1f914;&#xff08;ikun&#xff09;。虽然是第一题但也要配得上神坤的身份。 思路1 枚举分母&#xff0c;选择一个数据结构来选出分母两侧最大的两个数做分子。2s常数大些也无碍。我选择好写的ST表 思路2 写两个 d p dp dp 分别表示 1 1 1 到 i…...

网络安全等级保护测评规划与设计

笔者单位网络结构日益复杂&#xff0c;应用不断增多&#xff0c;使信息系统面临更多的风险。同时&#xff0c;网络攻防技术发展迅速&#xff0c;攻击的技术门槛随着自动化攻击工具的应用也在不断降低&#xff0c;勒索病毒等未知威胁也开始泛滥。基于此&#xff0c;笔者单位拟进…...

Error: Cannot find module ‘vue-template-compiler‘ 问题解决

启动Vuepress项目时报了如下错误&#xff1a;Error: Cannot find module vue-template-compiler Error: Cannot find module vue-template-compiler Require stack: - /usr/local/lib/node_modules/vuepress/node_modules/vue-loader/lib/compiler.js - /usr/local/lib/node_…...

华为认证云计算专家(HCIE-Cloud Computing)--练习题

华为认证云计算专家&#xff08;HCIE-Cloud Computing&#xff09;–练习题 1.(判断题)华为云stack支持鲲鹏架构&#xff0c;业务可从X86过渡到鲲鹏。 正确答案&#xff1a;正确 2.(判断题)业务上云以后&#xff0c;安全方面由云服务商负责&#xff0c;客户自己不需要做任何防…...

【MATLAB】【数字信号处理】产生系统的单位冲激响应h(t)与H(z)零极点分布

一、实验目的与要求 产生h(t) 与H(z) 零极点分布 二、实验仪器 微机&#xff0c;仿真软件MATLAB 2022a 三、实验内容与测试结果 1.已知描述连续系统的微分方程为y(t)5y(t)6y(t)2x(t)8x(t) &#xff0c;计算系统的单位冲激响应h(t) 程序如下&#xff1a; clear all; ts0;…...

实验五:动态路由配置

实验五&#xff1a;动态路由配置 1.RIP 配置 【实验名称】 RIP 路由协议配置 【实验目的】掌握路由器 RIP 路由协议的基本配置 【实验设备】路由器&#xff08; 2 台&#xff09;、计算机&#xff08; 2 台&#xff09;、配置电缆&#xff08; 1 根&#xff09;、 V…...

苍穹外卖学习----出错记录

1.微信开发者工具遇到的问题&#xff1a; 1.1appid消失报错&#xff1a; {errMsg: login:fail 系统错误,错误码:41002,appid missing [20240112 16:44:02][undefined]} 1.2解决方式&#xff1a; appid可在微信开发者官网 登录账号后在开发栏 找到 复制后按以下步骤粘贴即…...

如何实现图片压缩

文章目录 1、canvas实现图片压缩2、其他 1、canvas实现图片压缩 canvas 实现图片压缩&#xff0c;主要是使用 canvas 的drawImage 方法 具体思路 拿到用户上传的文件转成base64创建一个 Image&#xff0c;主要是获取到这个图片的宽度和高度创建一个 2D 的画布&#xff0c;画布…...

机器学习算法实战案例:时间序列数据最全的预处理方法总结

文章目录 1 缺失值处理1.1 统计缺失值1.2 删除缺失值1.3 指定值填充1.4 均值/中位数/众数填充1.5 前后项填充 2 异常值处理2.1 3σ原则分析2.2 箱型图分析 3 重复值处理3.1 重复值计数3.2 drop_duplicates重复值处理 3 数据归一化/标准化3.1 0-1标准化3.2 Z-score标准化 技术交…...

MongoDB高级集群架构设计

两地三中心集群架构设计 容灾级别 RPO & RTO RPO&#xff08;Recovery Point Objective&#xff09;&#xff1a;即数据恢复点目标&#xff0c;主要指的是业务系统所能容忍的数据丢失量。RTO&#xff08;Recovery Time Objective&#xff09;&#xff1a;即恢复时间目标&…...

C++中JSON与string格式互转

1、JSON-》string 操作步骤&#xff1a; 1、在C中新建一个json对象并赋值&#xff0c;然后将其转给char *data。 2、在使用 #include <json.h> 头文件时&#xff0c;通常是使用第三方库 jsoncpp。由于它不是标准库的一部分&#xff0c;所以需要从官网http://jsoncpp.sou…...

2023一带一路暨金砖国家技能发展与技术创新大赛 【企业信息系统安全赛项】国内赛竞赛样题

2023一带一路暨金砖国家技能发展与技术创新大赛 【企业信息系统安全赛项】国内赛竞赛样题 2023一带一路暨金砖国家技能发展与技术创新大赛 【企业信息系统安全赛项】国内赛竞赛样题第一阶段&#xff1a; CTF 夺旗项目1. CTF 夺旗任务一 命令注入任务二 SQL 注入 项目2. 序列化漏…...

【BBuf的CUDA笔记】十二,LayerNorm/RMSNorm的重计算实现

带注释版本的实现被写到了这里&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/apex 由于有很多个人理解&#xff0c;读者可配合当前文章谨慎理解。 0x0. 背景 我也是偶然在知乎的一个问题下看到这个问题&#xff0c;大概就是说在使用apex的…...

安装Mac提示安装无法继续,因为安装器已损坏

目录 事件起因报错原因 事件起因 有两台电脑&#xff0c;由于电脑1下载镜像文件很快&#xff0c;于是我先用电脑1下载这个大文件&#xff0c;然后安装openresty&#xff0c;电脑2用http链接下载这个大文件。电脑2安装中途就报安装无法继续,因为安装器已损坏。 报错原因 不知…...

脚本编程游戏引擎会遇到哪些问题

在游戏开发中&#xff0c;脚本编程已经成为了一种非常常见的方式&#xff0c;用来实现游戏逻辑和功能。但是脚本编程游戏引擎也可能会面临一些挑战和问题。下面简单的探讨一下都会遇到哪些问题&#xff0c;并且该如果做。 性能问题 脚本语言通常需要运行时解释执行&#xff0…...

什么软件可以做报表?

数据报表&#xff0c;是商业领域中不可或缺的一部分&#xff0c;它通过表格、图表等形式&#xff0c;将复杂的数据进行整理、分析并呈现出来&#xff0c;帮助用户更好地理解数据的趋势和关系。数据报表不仅展示了业务现状和趋势&#xff0c;还支持多种数据分析和挖掘功能&#…...

数据结构学习 jz39 数组中出现次数超过一半的数字

关键词&#xff1a;排序 摩尔投票法 摩尔投票法没学过所以没有想到&#xff0c;其他的都自己想。 题目&#xff1a;库存管理 II 方法一&#xff1a; 思路&#xff1a; 排序然后取中间值。因为超过一半所以必定在中间值是我们要的结果。 复杂度计算&#xff1a; 时间复杂度…...

基于Linux的Flappy bird游戏开发

项目介绍 主要是使用C语言实现&#xff0c;开启C项目之旅。 复习巩固C语言、培养做项目的思维。 功能&#xff1a; 按下空格键小鸟上升&#xff0c;不按下落&#xff1b; 显示小鸟需要穿过的管道&#xff1b; 小鸟自动向右飞行&#xff1b;&#xff08;管道自动左移和创建&a…...

排序算法6---快速排序(非递归)(C)

回顾递归的快速排序&#xff0c;都是先找到key中间值&#xff0c;然后递归左区间&#xff0c;右区间。 那么是否可以实现非递归的快排呢&#xff1f;答案是对的&#xff0c;这里需要借助数据结构的栈。将右区间左区间压栈&#xff08;后进先出&#xff09;&#xff0c;然后取出…...

【Verilog】期末复习——设计带异步清零且高电平有效的4位循环移位寄存器

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…...

官方网站后台图片下载怎么做/淘宝推广平台

spring boot 博客 纯洁的微笑liaokailin的专栏程序猿DD周立 Spring Cloud方志朋 Spring Cloud 专栏许进 跟我学Spring Cloud官网 projects.spring.io/spring-clou…代码例子 github.com/ityouknow/s…github.com/dyc87112/SpringCloud-Learning.git 社区 springcloud.cn/spring…...

深圳去聋哑做义工申请网站/营销策略是什么

shell中的循环语法 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.for循环1.语法格式11 for 变量 in 值1 值2 值3 ... 2 do 3   源代码 4 done 2.语法格式21 for (( 初始值&#xff1b;循环控制条件&#xf…...

wordpress css?ver=1.0.0'/军事新闻头条

定义&#xff1a;定义一个用于创建对象的接口&#xff0c;让子类来决定实例化哪个类。 对于工厂方法模式的组成&#xff1a;  1)抽象工厂角色&#xff1a; 这是工厂方法模式的核心&#xff0c;它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。  2)具体…...

南京维露斯网站建设/seo关键词排名技术

下面介绍标准批输入对象的步骤&#xff1a; 1、创建批输入对象 2、维护对象属性 开始录屏并修改需要的栏位。 3、定义资源结构 4、定义字段 5、定义关系结构 其实就是将上面创建的结构和SAP标准结构匹配&#xff0c;RELATIONSHIP来创建表间关系。 6、字段mapping &#xff0…...

无锡市滨湖区建设局网站/班级优化大师官方网站

题目描述 给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次&#xff1a; 选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&#xff0c;每个袋子里都有…...

网站建设哪家/在哪里找专业推广团队

欢迎关注”生信修炼手册”!框架是为了解决特定的业务场景而开发的一套高质量代码&#xff0c;通过框架避免了重复造轮子的低效模式&#xff0c;可以更加专注于具体业务相关的代码。在python中&#xff0c;scrapy就是一个主流的爬虫框架&#xff0c;可以通过如下方式进行安装pip…...