04 MyBatis数据操作
1 初识MyBatis
1.1 MyBatis框架简介
MyBatis框架可以简化数据库编程!MyBatis底层封装的是JDBC,使用起来比JDBC大大简化。
在使用MyBatis实现数据库编程时,只需要定义每个数据操作功能的抽象方法,并配置这个抽象方法对应的SQL语句即可!
当然,MyBatis框架还实现了数据库编程的其他细节,例如对查询结果的缓存等等。
1.2 导入SSM组件
MyBatis经常和Spring,Spring MVC一起使用,简称为SSM框架。
创建Maven Web项目,添加web.xml,目标服务器运行环境,以及Spring MVC依赖。
在项目中使用MyBatis需要在pom.xml中添加多项依赖,首先应该添加MyBatis依赖:
<!-- MyBatis框架-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
MyBatis本身是可以独立使用的,但是推荐使用Spring框架一起使用,所以,还需要添加mybatis-spring依赖:
<!-- MyBatis整合spring -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>
整合后,框架的底层实现需要使用到spring-jdbc的依赖:
<!-- spring-jdbc依赖,必须和其他spring依赖使用完全相同的版本 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.14</version>
</dependency>
注意:同一个项目中添加多个spring为前缀的依赖,这些依赖必须使用相同的版本!!
由于本次将使用MySql数据库,所以还需要添加MySql数据库连接的mysql-connector-java依赖:
<!-- 连接mysql数据库的依赖 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version>
</dependency>
然后,还需要添加数据库连接池的druid的依赖:
<!-- 数据库连接池 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version>
</dependency>
最后,在编程时,为了及时检测代码,还应该添加单元测试junit的依赖:
<!-- 单元测试的依赖 -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope>
</dependency>
所以,项目中需要添加的完整的依赖代码是:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.tedu</groupId><artifactId>MyBatis</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><!-- 设置 JDK 版本为 1.8 --><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source><!-- 设置编码为 UTF-8 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.encoding>UTF-8</maven.compiler.encoding></properties><dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version></dependency><!-- Spring JDBC依赖,必须与其它Spring依赖使用完全相同的版本 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version></dependency><!-- Mybatis框架 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.0</version></dependency><!-- MyBatis整合Spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.1</version></dependency><!-- Thymeleaf --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><version>3.0.11.RELEASE</version></dependency><!-- Thymeleaf整合Spring --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.11.RELEASE</version></dependency><!-- 连接MySQL数据库的依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.15</version></dependency><!-- 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency></dependencies>
</project>
1.3 配置MyBatis数据库连接池
MyBatis是数据库访问框架,必须连接到数据库才能使用其强大的功能,所以要先配置数据库连接才行。
首先创建数据库链接配置文件:resources/jdbc.properties
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mysql?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
db.maxActive=10
db.initialSize=2
创建Spring配置类,配置数据库连接池:
package cn.tedu.config;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;import com.alibaba.druid.pool.DruidDataSource;@Configuration
@PropertySource("classpath:jdbc.properties")
public class MyBatisConfig {@Beanpublic DataSource dataSource (@Value("${db.driver}")String driver,@Value("${db.url}")String url,@Value("${db.username}")String username,@Value("${db.password}")String password,@Value("${db.maxActive}")int maxActive,@Value("${db.initialSize}")int initialSize) {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);ds.setMaxActive(maxActive);ds.setInitialSize(initialSize);return ds;}}
测试数据库连接池:
package cn.tedu.test;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import javax.sql.DataSource;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import cn.tedu.config.MyBatisConfig;public class TestCase {AnnotationConfigApplicationContext ctx;@Beforepublic void init() {ctx = new AnnotationConfigApplicationContext(MyBatisConfig.class);}@Afterpublic void destroy() {ctx.close();}@Testpublic void testDataSource() {DataSource ds = ctx.getBean("dataSource",DataSource.class);String sql = "SELECT 'hELLO wORLD!'";try (Connection conn = ds.getConnection()){Statement st = conn.createStatement();ResultSet rs = st.executeQuery(sql);while (rs.next()) {System.out.println(rs.getString(1));}} catch (Exception e) {e.printStackTrace();}}
}
1.4 MyBatis Hello World
按照惯例,第一次使用API或者框架都要写一个最小功能的案例“Hello World”,下面就使用MyBatis实现一个"Hello World"。
首先声明数据库访问接口DemoMapper,MyBatis会自动的创建这个接口的具体子类实现例,利用这个实例就可以访问数据库了:
package cn.tedu.mapper;import org.apache.ibatis.annotations.Select;public interface DemoMapper {@Select("Select 'Hello World!'")String hello();}
然后在Spring配置类中配置Mapper接口扫描功能:
package cn.tedu.config;import javax.sql.DataSource;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;import com.alibaba.druid.pool.DruidDataSource;import javassist.expr.NewArray;@Configuration
@PropertySource("classpath:jdbc.properties")
@MapperScan("cn.tedu.mapper")
public class MyBatisConfig {@Beanpublic DataSource dataSource (@Value("${db.driver}")String driver,@Value("${db.url}")String url,@Value("${db.username}")String username,@Value("${db.password}")String password,@Value("${db.maxActive}")int maxActive,@Value("${db.initialSize}")int initialSize) {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);ds.setMaxActive(maxActive);ds.setInitialSize(initialSize);return ds;}@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}}
上述配置中的SqlSessionFactory是MyBatis 核心功能的工厂,需要将数据库连接池dataSource注入给它,这样MyBatis才能正确连接到数据库。
配置@MapperScan(basePackages = “cn.tedu.mapper”)的目的是自动查找DemoMapper接口,并且自动创建DemoMapper接口实现类的实例,这个功能特别好,这样就可以之间使用接口中的功能。
利用JUnit测试:
@Testpublic void testSqlSessionFactory() {SqlSessionFactory factory = ctx.getBean("sqlSessionFactory",SqlSessionFactory.class);System.out.println(factory);}@Testpublic void testHelloWorld() {DemoMapper mapper = ctx.getBean("demoMapper",DemoMapper.class);String str = mapper.hello();System.out.println(str);}
测试结果:
testSqlSessionFactory运行结果:
testHelloWorld运行结果:
这个测试结果说明Spring成功的创建了SqlSessionFactory对象和demoMapper对象,并且成功访问了数据库,得到查询的结果。
运行原理:
在DemoMapper接口中抽象方法hello前面标注了@Select注解,这个注解为hello方法声明了SQL语句。MyBatis会自动处理这个注解,这个注解为hello方法声明了SQL语句。MyBatis会自动处理这个注解:在调用hello方法时候,MyBatis会自动向数据库发送注解中的SQL语句SELECT “Hello World”,接着数据库执行SQL返回 “Hello World”,MyBatis还会自动的将SQL返回结果作为hello方法的返回值。
2 利用MyBatis实现数据表CRUD操作
2.1 初始化数据库
MyBatis用于操作数据库,为了便于演示MyBatis强大功能,先在MySql中初始化一套数据表。
在MySql中创建名为tedu_ums的数据库,并使用这个数据库:
CREATE DATABASE tedu_ums;
USE tedu_ums;
在以上数据库中创建名为t_user的数据表,该数据表至少包含:用户id(id),用户名(username),密码(password),年龄(age),手机号码(phone),邮箱(email):
CREATE TABLE t_user(id INT(11) AUTO_INCREMENT COMMENT '用户id',username VARCHAR(20) UNIQUE NOT NULL COMMENT '用户名',PASSWORD VARCHAR(20) NOT NULL COMMENT '密码',age INT COMMENT '年龄',phone VARCHAR(20) COMMENT '手机号码',email VARCHAR(20) COMMENT '电子邮箱',PRIMARY KEY (id)) DEFAULT CHARSET=utf8;
向表中插入不少于10条数据:
insert into t_user (username,password,phone,age,email) values
('Frank01','1234','18800000001',21,'Frank01@163.com'),
('Frank02','1234','18800000002',22,'Frank02@163.com'),
('Frank03','1234','18800000003',23,'Frank03@163.com'),
('Frank04','1234','18800000004',24,'Frank04@163.com'),
('Frank05','1234','18800000005',25,'Frank05@163.com'),
('Frank06','1234','18800000006',26,'Frank06@163.com'),
('Frank07','1234','18800000007',27,'Frank07@163.com'),
('Frank08','1234','18800000008',28,'Frank08@163.com'),
('Frank09','1234','18800000019',29,'Frank09@163.com'),
('Frank10','1234','18800000010',30,'Frank10@163.com'),
('Frank11','1234','18800000011',31,'Frank11@163.com'),
('Frank12','1234','18800000012',32,'Frank12@163.com'),
('Frank13','1234','18800000013',33,'Frank13@163.com'),
('Frank14','1234','18800000014',34,'Frank14@163.com'),
('Frank15','1234','18800000015',35,'Frank15@163.com'),
('Frank16','1234','18800000016',36,'Frank16@163.com'),
('Frank17','1234','18800000017',37,'Frank17@163.com'),
('Frank18','1234','18800000018',38,'Frank18@163.com'),
('Frank19','1234','18800000019',39,'Frank19@163.com'),
('Frank20','1234','18800000020',40,'Frank20@163.com');
测试:
更新数据库连接参数,将resources/jdbc.properties中数据库名从mysql改为tedu_ums:
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/tedu_ums?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
db.maxActive=10
db.initialSize=2
2.2 查询功能
MyBatis会自动的将数据库的信息加载到JavaBean对象中,为了测试这个功能,就需要定要一个JavaBean类型User,这个User类型的数据结构与数据库t_user表的结构一致。
在cn.tedu.entity包下创建User类,并且根据t_user数据表的字段来设计User类中的属性:
package cn.tedu.entity;import java.io.Serializable;public class User implements Serializable{private Integer id;private String username;private String password;private Integer age;private String phone;private String email;public User () {}public User(Integer id, String username, String password, Integer age, String phone, String email) {super();this.id = id;this.username = username;this.password = password;this.age = age;this.phone = phone;this.email = email;}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 getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + ", phone="+ phone + ", email=" + email + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;return true;}
}
建议:作为软件中的实体类,应该符合Java Bean规范,并且重写toString,equals,hashCode方法,为了使用方便,也要添加一个有参数构造器和无参数构造器。
声明数据库访问接口UserMapper,在接口中声明数据访问方法,这个接口并不需要实现,MyBatis最强大的功能就是自动实现这个接口,并且实现相应的功能。
在UserMapper接口中设计一个根据用户的ID查询一个用户信息的方法findUserById,参数就是用户的主键ID:
package cn.tedu.mapper;import org.apache.ibatis.annotations.Select;import cn.tedu.entity.User;public interface UserMapper {/** 根据id查询一个用户信息*/ @Select("SELECT id,username,password,age,phone,email FROM t_user Where id = #{id}")User findUserById(Integer id);}
注解@Select是MyBatis提供的注解,用于定义接口方法findUserById的对应SQL语句。其中方法参数id会自动绑定到SQL参数#{id}上。并且SQL返回结果会自动绑定到返回值User属性中。
注意:在工作中不建议使用*查询数据库,数据量过多的情况下,效率很不好。
利用JUnit测试:
@Testpublic void testFindUserById() {UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);User user = mapper.findUserById(1);System.out.println(user);}
测试结果:
这个测试结果说明使用userMapper对象的findUserById方法可以查询数据库,并且成功得到查询结果。原理是MyBatis利用JDBC查询数据库,并将查询结果映射到User对象属性,然后将User对象作为findUserById方法结果返回。也就是需要写出接口方法和SQL语句就能够访问数据库了。
2.3 查询多条数据
如果有这样的需求:
SELECT id,username,password,age,phone,email FROM T_USER
显然查询结果应该是这些内容:
然后怎么使用MyBatis映射查询结果呢?查询单条会了,查询多条也不难,只需要将方法返回值改成集合即可:
@Select ("SELECT id,username,password,age,phone,email FROM t_user")
List<User> findAllUser();
MyBatis会将SQL查询结果的每行存储到一个User对象,然后将全部User对象存储返回值List中,遍历List集合就能得到数据库查询的结果。
测试:
@Testpublic void testFindAllUser() {UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);List<User> list = mapper.findAllUser();list.forEach(user -> System.out.println(user));}
测试结果:
2.4 插入功能
插入功能SQL语句
INSERT INTO t_user (username,password,age,phone,email)
VALUES (?, ?, ?, ?, ?)
然后将SQL语句中的参数?替换为#{}占位,并且使#{}中的名字于User对象的属性名一致:
INSERT INTO t_user (username,password,age,phone,email)
VALUES (#{username}, #{password}, #{age}, #{phone}, #{email})
最后在UserMapper接口中声明抽象方法,使用@Insert映射SQL语句于方法的对应关系:
@Insert("INSERT INTO t_user (username,password,age,phone,email) VALUES (#{username}, #{password}, #{age}, #{phone}, #{email})")
Integer insertUser(User user);
MyBatis执行时候就会自动读取参数User的属性填充到对应占位符号#{}。比如会读取User的username属性填充到#{username}的位置,按照这个规则执行SQL就可以将User对象中的数据存储到数据库中。方法返回值是整数表示更新行的数量,如果是1就表示更新了1行。
原理:
测试案例:
@Testpublic void testInsertUser() {User user = new User(null,"蟑螂恶霸","123456",17,"13131313131","13131313131@163.com");UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);Integer n = mapper.insertUser(user);System.out.println(n); }
测试结果:
返回1表示有一天记录被更改了
上述案例中User对象的ID插入之后也是null的:
@Testpublic void testInsertUser() {User user = new User(null,"蝎子莱莱","123456",17,"13131313131","13131313131@163.com");UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);Integer n = mapper.insertUser(user);System.out.println(n); System.out.println(user);}
如果希望插入以后获得插入的ID,则增加一个@Option注解就可以,其中keyProperty = "id"中的id是User的id属性:
@Insert("INSERT INTO t_user (username,password,age,phone,email) VALUES (#{username}, #{password}, #{age}, #{phone}, #{email})")
@Options(useGeneratedKeys = true,keyProperty = "id")
Integer insertUser(User user);
测试结果:
因为主键设置为username,所以username不能重复,不然会插入失败
2.5 更新功能
如果要实现根据ID更新一行全部列数据其SQL如下:
UPDATE t_userSET username=?, password=?, age=?, phone=?, email=? WHERE id=?
与插入功能类似,先将?全部替换为占位符:
UPDATE t_userSET username=#{username}, password=#{password}, age=#{age}, phone=#{phone}, email=#{email} WHERE id=#{id}
在接口方法上使用@Update声明更新语句,就可以完成更新功能。更新过程中的数据绑定都是自动完成的,返回值如果是大于1表示成功更新了几行数据,返回0表示更新失败。如下方法是根据ID更新一行的功能:
@Update("UPDATE t_user "+ "SET username=#{username}, password=#{password}, age=#{age}, phone=#{phone}, email=#{email} "+ "WHERE id=#{id}")int updateUser(User user);
测试案例:返回1表示更新了一行
@Testpublic void testUpdataUser() {UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);User user = mapper.findUserById(2);user.setAge(56);int n = mapper.updateUser(user);System.out.println(n);}
在数据库中检查更新结果:
2.6 抽象方法中使用多个参数的问题
假设需要实现”将id=?的用户邮箱改为?“,则需要执行的SQL语句大致是:
UPDATE t_user SET email=? WHERE id = ?
由于以上SQL语句中有2个参数,所以在设计抽象方法时,抽象方法的参数列表中应该也有2个参数,例如:
@Update("UPDATE t_user SET email=? WHERE id = ?")
Integer updateEmailById(Integer id,String email);
然后,编写并执行单元测试:
@Testpublic void testUpdateEmailById() {UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);int n = mapper.updateEmailById("kabuda@163.com", 25);System.out.println(n);}
以上代码执行时会出现错误:
也就是说,在调用抽象方法时,给出了2个参数的值,分别是id的值和email的值,这2个值在MyBatis处理时,参数名称其实分别是arg0和arg1,或者,使用param1和param2也可以访问到这俩个参数!
关于以上问题,其根本原因在于Java语言源代码.java文件在执行之前,需要被编译为.class字节码文件,在这个编译过程中,如果没有特殊的干预的情况下,所有局部变量的变量名都是不会被保存的,所以即使在设计抽象方法时,使用了id,email这样的参数名,其实,在最终运行的.class文件中,根本就没有这样的名称。
当抽象方法的参数只有一个时,MyBatis会自动的使用唯一的那一个参数,所以在配置SQL映射时,使用的#{}占位符中的名称根本就不重要!在开发时,推荐使用规范的名称,但是从代码是否可以运行的角度来说,这个占位符写什么都不重要。
在MyBatis的处理过程中,可以根据arg或param作为前缀,按照顺序来确定参数的值,所以,使用第1个参数时,可以使用arg0或param1作为名称,第2个可以使用arg1或param2作为名称,如果有更多参数,顺序编号即可,序号可惨开抽象方法的声明。
当然,在配置SQL映射时,使用arg0,arg1或param1,param2这样的名称,并不利用代码的阅读和理解,MyBatis框架提供了@Param注解,可以在抽象方法的参数列表中,在每个参数之前添加该注解,并在注解中配置参数的名称:
@Update("UPDATE t_user SET email=#{email} WHERE id = #{id}")
Integer updateEmailById(
@Param("id") Integer id,
@Param("email") String email);
后续,在配置SQL映射时,使用的#{}格式的占位符中是使用的而名字就必须是以上@Param注解中配置的名称!
MyBatis实现以上做法的本质其实就是基于注解中配置的参数和调用方法时给出的参数值封装了1个Map。
当然,以上实现原理可以不必过于关心,只需要记住:在使用MyBatis框架,设计抽象方法时,如果参数的数量超过1个(有2个或者更多个),就为每一个参数都添加@Param注解,并且,在后续配置SQL映射时,使用的#{}中就使用@Param注解中配置的名称。
2.7 删除功能
删除功能就更加简便,也是在Mapper接口中删除方法前面用@Delete定义SQL语句即可:
@Delete("DELETE FROM t_user WHERE id=#{id}")Integer deleteUserById(Integer id);
测试案例:
返回值为1表示删除了1行记录
@Testpublic void testDeleteUserById() {UserMapper mapper = ctx.getBean("userMapper",UserMapper.class);int n = mapper.deleteUserById(25);System.out.println(n);}
在数据库中检查数据是否被删除。
3 总结
关于MyBatis配置:
- 利用Maven导入SSM相关组件;
- 配置DataSource,使DataSource连接到数据库;
- 配置SqlSessionFactory,将DataSource注入给SqlSessionFactory,目的是通知MyBatis连接到哪个数据库;
- 配置MapperScan这样可以自动创建Mapper接口实例;
关于映射规则:
-
关于注解:
- @Select注解用于映射查询语句到Mapper接口抽象方法
- @Insert注解用于映射插入语句到Mapper接口抽象方法
- @Options注解可以与@Insert配合,用于读取刚刚生产的ID
- @Update注解用于映射更新语句到Mapper接口抽象方法
- @Delete注解用于映射删除语句到Mapper接口抽象方法
-
参数映射规则
- 如果抽象方法只有一个简单参数,就会自动与SQL中的一个参数自动映射
- 如果抽象方法参数是一个Java Bean对象,MyBatis就会将JavaBean属性与SQL参数映射
- 如果抽象方法是多个参数,就需要使用@Param声明参数名字然后再映射到SQL参数。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 002SpringIOC001IOC概述和入门案例
1 简介 1.1 IOC简介 IOC(Inverse of Controll),即反转控制。 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源。在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式&#x…...
2024/4/14 14:13:10 - 项目管理的整体进度的中间阶段
项目的中盘时段,就是项目整体进度的中间阶段。 当你发现有些事情正在进行,有些事情并未进行,有些问题已经发现并解决,有些问题还没有找出来,这时,你就明白已经进入中盘阶段。中盘阶段很有挑战性࿰…...
2024/4/27 22:13:37 - 浅谈-----虚函数、纯虚函数、基类析构虚函数
虚函数 //C的多态性通过虚函数来体现,体现为类与类直接的继承关系--》子类完成对基类的重写。 //定义基类(具有一定包容性)部分成员函数写为虚函数。 //定义子类、集成基类、并且重写 虚函数。(对比基类的包容性、子类有具体性&a…...
2024/4/14 14:47:30 - 时间序列 工具库学习(10) Darts模块-Transformer模型
1.导库 # fix python path if working locally from utils import fix_pythonpath_if_working_locallyfix_pythonpath_if_working_locally()%load_ext autoreload %autoreload 2 %matplotlib inlineimport torch import torch.nn as nn import torch.optim as optim import nu…...
2024/4/18 8:29:07 - 时间序列 工具库学习(9) Darts模块-TCN时间卷积网络
1.导库 # fix python path if working locally from utils import fix_pythonpath_if_working_locallyfix_pythonpath_if_working_locally()import numpy as np import pandas as pd import matplotlib.pyplot as pltfrom darts import TimeSeries from darts.models import T…...
2024/4/19 12:41:05 - 流密码立方攻击(基于图算法)
流密码常见概念 流密码(Stream cipher)是对称加密的一种。流密码将明文(Plaintex)看成二进制数据流,通过初始密钥生成加密密钥流ziz_izi与明文流pip_ipi做异或操作获得密文流cic_ici,即cipi⊕zic_ip_i\oplus{z_i}cipi⊕zi。由于异或操作是可…...
2024/4/14 14:14:01 - 《MySQL技术》学习笔记——数据类型
MySQL技术内幕——数据类型数据值类别数值字符串值时态(日期/时间)值空间值布尔值NULL值MySQL数据类型数据类型概述表定义里的特殊列类型指定列的默认值数字数据类型字符串数据类型时态(日期/时间)数据类型MySQL如何处理无效数据值…...
2024/4/5 5:03:39 - 在Unity C#中创建2D自上而下射击游戏
在Unity中创建2D自上而下射击游戏 你会学到什么 打造2D游戏 让NPC跟随玩家或与玩家并肩作战 用C#编程 制作库存 MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确&…...
2024/4/18 1:38:49 - 04 MyBati数据操作
1 初识MyBatis 1.1 MyBatis框架简介 MyBatis框架可以简化数据库编程!MyBatis底层封装的是JDBC,使用起来比JDBC大大简化。 在使用MyBatis实现数据库编程时,只需要定义每个数据操作功能的抽象方法,并配置这个抽象方法对应的SQL语…...
2024/4/14 14:14:06 - 在小公司混水摸鱼3年,被面试官直接开怼:能力太差了,2021大厂Android高级面试题及答案
知乎上有个问题,叫做 如何高效学习,里面有一个回答我觉得很符合我自己的观点,就是 建立起自己的知识体系,建立知识体系的目的在于: 巩固记忆。 认识自己,找到自己的优势及不足。 把握复习的进度。 经验…...
2024/4/14 14:14:41 - 2022-1-18学习总结
上午(3.5h) 上午在b站上继续学习并查集,然后ac了两道洛谷题 【模板】并查集 主要思路: 这道题主要就是并查集的查询和合并操作。然后我们把每个节点的上一个节点成为父亲,每个节点的最顶端节点称为祖先。刚开始把每个节点的父亲都…...
2024/4/14 14:15:32 - 34、DNS域名解析服务
文章目录DNS域名解析服务BIND域名服务基础DNS系统的作用及类型两种查询方式(1)递归查询( 2)迭代查询DNS服务器类型:BIND的安装和配置文件1、正向解析2、反向解析3、主从服务器自动同步4、dns分离解析总结:DNS域名解析服务 本章结构 BIND域名服务基础 DNS系统的作…...
2024/4/15 21:58:51 - 【LeetCode 单链表专项】排序链表(148)
文章目录1. 题目1.1 示例1.2 说明1.3 限制1.4 进阶2. 解法一(自顶向下归并排序)2.1 分析2.2 解答2.2.1 递归合并2.2.2 迭代合并2.3 复杂度3. 解法二(自底向上归并排序)3.1 分析3.2 解答3.3 复杂度1. 题目 给你链表的头结点 head …...
2024/4/14 14:14:11 - robotframework-novel2
第二部 第七章 暑 假 延安看上去好像一场大雨就可以把它冲走似的。这座小城覆盖着一层薄薄的黄色沙尘,城边那些斑驳的山坡上满布着半圆形的窑洞。在延安的郊区,人们仍旧居住在窑洞里,但很多穴居者还是喜欢显山露水。有的窑洞已经用上了电视…...
2024/4/14 14:14:21 - 5_Java_使用对象
一个字符的常量是用单引号包围起来的一个字符,如’a’、’*’、‘好’。一个汉字也是Unicode的一个字符,所以也是Java的一个字符; 字符类型 单个字符 package hello;import java.util.Scanner;public class Main{public static void main(…...
2024/4/14 14:14:26 - UE材质中的数学逻辑学习与理解 Real life complex materials for UE
学习在虚幻引擎中寻找酷素材的背后,深刻理解你的数学 你会学到什么 创建你在职业生涯中将使用的材料的真实例子 不仅要在虚幻引擎中创建酷的素材,还要理解它们 学习制作材料时的技巧和正确的心态 MP4 |视频:h264,1280720 |音频:AACÿ…...
2024/4/14 14:14:36 - 5.8 哈夫曼树的定义和构造(带权路径长度、可变长度编码、前缀编码、哈夫曼编码)
1. 知识总览2. 带权路径长度3. 哈夫曼树的定义4. 哈夫曼树的构造5. 哈夫曼编码 5.1 可变长度编码5.2 前缀编码 6. 英文字母频次7. 知识回顾 1. 知识总览 2. 带权路径长度 3. 哈夫曼树的定义 4. 哈夫曼树的构造 5. 哈夫曼编码 5.1 可变长度编码 5.2 前缀编码 6. 英文字母频次 7.…...
2024/4/14 14:51:45 - 别往下翻了,三句话说清楚跨域资源请求报错的由来
别往下翻了,三句话说清楚跨域资源请求报错的由来 工作中很多同学老是遇到跨域的问题,比如这样的报错 Access to XMLHttpRequest at http://test.com.cn/get from origin http://local.com.cn:8080 has been blocked by CORS policy: No Access-Contro…...
2024/4/7 4:50:42 - java ssm高校后勤综合数据管理与分析系统设计与实现源码+论文+远程安装部署+代码讲解
下载:https://download.csdn.net/download/AAshou/76531770 项目介绍: java ssm高校后勤综合数据管理与分析系统设计与实现源码论文远程安装部署代码讲解 系统说明: 摘 要 随着信息技术特别是互联网技术的迅速发展,高校后勤信息化进程不断推进&…...
2024/4/7 4:50:40 - 分布式事务讲解 - TX-LNC分布式事务框架(含LCN、TCC、TXC三种模式)
分布式事务讲解 - TX-LNC分布式事务框架(含LCN、TCC、TXC三种模式)TX-LCN框架原理LCN原理及主要特点代码实现实现场景创建数据库及表(三个数据库,两个表)创建工程(四个)事务管理系统(…...
2024/4/14 14:14:36
最新文章
- 使用Umbrello学习工厂模式
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口, 或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对 象,原有工厂对象不需要进行任何修改,也不…...
2024/4/28 0:24:57 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null,那么typeof nullValue "?" const u …...
2024/4/25 5:18:48 - 算法四十天-删除排序链表中的重复元素
删除排序链表中的重复元素 题目要求 解题思路 一次遍历 由于给定的链表是排好序的,因此重复的元素在链表中的出现的位置是连续的,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。 具体地,我们从指针cur指向链表的头节…...
2024/4/23 6:25:37 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57