Spring07-整合Mybatis
回顾MyBatis
1.在 Maven 中导入 MyBatis 需要的依赖
<dependencies><!--Mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><!--MyBatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--junit--><!--Junit单元测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.7.2</version><scope>test</scope></dependency>
</dependencies>
这些是 MyBatis 需要的依赖,还没有涉及到 Spring。
2.创建配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://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"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="0723"/></dataSource></environment></environments>
</configuration>
这里就不用 db.properties 文件获取属性了,后面这个工作要交给 Spring 了。
3.创建 MyBatis 工具类
public class MyBatisUtil {// 提升作用域private static SqlSessionFactory sqlSessionFactory;static {try {// 使用MyBatis第一步:获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}// 从SqlSessionFactory中获取SqlSessionpublic static SqlSession getSqlSession(){// sqlSession 其实类似于 connectionSqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}
}
基本的统一配置就完成了,下面就是对应数据库编写实体类和对应的 Mapper 了。
4.编写实体类 User,属性对应数据库中的字段
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {private int id;private String name;private String pwd;
}
5.写完实体类,就要写对应的 Dao 层接口,即 UserMapper,放在 dao(或mapper) 包下
package com.qiyuan.dao;
...
public interface UserMapper {// 查询全部用户List<User> getUserList();
}
6.有了接口,就要有其对应的实现,即 UserMapper.xml,这里和 UserMapper接口放在同一包下(要记得让 Maven 能导出嗷)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间namespace要绑定一个对应的Dao/Mapper接口,相当于实现它-->
<mapper namespace="com.qiyuan.dao.UserMapper"><!--select查询语句,使用别名记得配置 typeAlias --><select id="getUserList" resultType="User">select * from user</select>
</mapper>
这里用到了别名,要在 mybatis-config.xml 中配置
<typeAliases><package name="com.baifu.pojo"/></typeAliases>
7.然后在 mybatis-config.xml 中注册映射 mapper
<mappers><!--要求接口和其对应的 XML 名字相同,且在同一个包下--><mapper class="com.baifu.mapper.UserMapper"/></mappers>
直接用 class 方式注册绑定,比较简洁,不过要求接口和其对应的 XML 名字相同,且在同一个包下。
8.执行测试方法
public class MyTest {@Testpublic void getUserListTest(){// 不写注释了,看不懂入土吧!SqlSession sqlSession = MyBatisUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}sqlSession.close();}
}
运行发信报错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.baifu.mapper.UserMapper.getUserList
在“target-classes-com-baifu-mapper”下没有找到UserMapper.xml,**配置 Maven 以让 java 文件夹中的 xml 文件能成功导出!**在 pom.xml 中添加
<build><resources><!--让java目录下的properties和xml文件也能被导出--><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>
</build>
最基础的 MyBatis 应用就完成了,接下来引入 Spring。
MyBatis-Spring
通过 Spring 使用 MyBatis 有两种方式:使用 SqlSessionTemplate 和使用 SqlSessionDaoSupport。
1.导入依赖
要将 MyBatis 和 Spirng 结合起来,除了导入上面 MyBatis 的依赖,当然还要有 Spring 的依赖
<dependencies><!--上面 MyBtais 的包-->...<!-- Spring 框架 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.9</version></dependency><!-- AOP --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency><!-- Spring 管理 JDBC --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.9</version></dependency><!-- mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency>
</dependencies>
注意这里相比之前的 Spring 项目,多了 spring-jdbc 和 mybatis-spring 的包,前者用于 Spring 管理数据库,后者作用就是是将 MyBatis 和 Spring 结合起来。
什么是 MyBatis-Spring?
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
2.使用SqlSessionTemplate
SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。 SqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。
通过 Spring 去使用 MyBatis 的步骤为
-
创建 spring-dao.xml 配置文件(任意名,其实就是Spring的applicationContext.xml文件),管理数据库的配置,也相当于 MyBatisUtil 工具类
配置数据源 dataSource
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--data source--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://111.230.212.103:3306/mybatis?userSSL=true&userUnicode=true&characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="hsp"/></bean></beans>
在 Spring 中配置了数据源,mybatis-config 中的就可以删掉了
<!-- mybatis-config.xml --> <environments default="..."><!--用不到了,删了吧!--> </environments>
-
在上边创建的spring-dao.xml 配置文件中创建 sqlSessionFactory 的 bean,同时设置数据源 dataSource 属性为上面配置的数据源,设置 configLocation 属性以绑定 MyBatis 配置文件
<!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!--绑定 MyBatis 配置文件!--><property name="configLocation" value="classpath:mybatis-config.xml"/> </bean>
这里相当于 MyBatisUtil 工具类中的获取 SqlSessionFactory 实例!
public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {// 使用MyBatis第一步:获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}... }
-
在 sqlSessionFactory 的 bean 中也可以配置其属性,和在 mybatis-config 中配置是一样的!如注册 Mapper
<!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">...<!--如,在这里注册 Mapper --><property name="mapperLocations" value="classpath:com/baifu/mapper/*.xml"/> </bean>
这里就用到之前 MyBatis 中不能用的通配符了,因为**通配符是由 Spring 提供**的!在 bean 中配置了,mybatis-config 中配置的 mapper 也可以删掉了。
<!-- mybatis-config.xml --> <mappers><!--不用了!--> </mappers>
这样一来,mybatis-config.xml 中几乎已经没有内容了(还剩一个别名 typeAlias ),虽然别名也能在 bean 中配置,不过最好将别名 typeAlias 和设置 settings 放在 mybatis-config.xml 中,方便查看和修改
<!--仅存的 mybatis-conifg 内容--> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><typeAliases><package name="com.baifu.pojo"/></typeAliases></configuration>
-
有了配置好的 sqlSessionFactory 后,就可以用它获取 sqlSession了。
创建 sqlSession 的 bean,注入 sqlSessionFactory 依赖
<!-- SqlSessionTemplate 就是 SqlSession!--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--只能用构造器注入,因为它没有 set 方法!--><!-- 把工厂给它,就能从中 get 到 SqlSession 了--><constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
SqlSessionTemplate 类只能通过构造器注入 sqlSessionFactory 依赖,这就是一个 SqlSession 了。
-
重点来了!由于面向对象的思想,要把对象交给 Spring 管理,而之前使用 MyBatis 时,Mapper.xml 充当了接口的实现类,这个实现类无法让 Spring 管理,所以要写一个真正的接口实现类,封装 Mapper.xml,交给 Spring 管理!
创建 UserMapperImpl 类,实现了 UserMapper 接口,即有对数据库操作的方法
public class UserMapperImpl implements UserMapper{// 原来的操作,使用 SqlSession 实现,现在使用 SqlSessionTemplate// 不过还是叫做 sqlSession 亲切!private SqlSessionTemplate sqlSession;// 添加 set 方法,以注入属性public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}// 在这里进行封装!public List<User> getUserList() {// IoC 的思想!不用去 new 一个 sqlSession 了,注入后就能用!UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();return userList;} }
其中,有一个属性 sqlSession(变成了 SqlSessionTemplate 也是一样用法)及其对应的 set 方法,通过 Spring 依赖注入后就能使用,相当于之前的
SqlSession sqlSession = MyBatisUtil.getSqlSession(); // 关闭应该是由 Spring 管理的吧...
在这个“真”实现类( UserMapperImpl 类)中调用了“假”实现类( UserMapper.xml )的方法,相当于多了一层封装,也变成了一个真实存在的类,方便 Spring 管理!
-
把真实现类交给 Spring 管理,同时进行依赖注入
<bean id="userMapper" class="com.baifu.mapper.UserMapperImpl"><!--注入 sqlSession!--><property name="sqlSession" ref="sqlSession"/></bean>
这时,获取 userMapper 对象后执行其中的方法,就会到 UserMapper.xml 执行对应的语句,和之前区别不大,只是多了一层封装以方便管理!
-
方法测试
public class MyTest {@Testpublic void MyBatisSpringTest(){ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);List<User> userList = userMapper.getUserList();for (User user : userList) {System.out.println(user);}} } // 执行结果 /* User(id=1, name=www, pwd=99999) User(id=2, name=baifu, pwd=6666) User(id=3, name=李四, pwd=123890) */
优化:可以注意到,大部分配置都在 spring-dao.xml 文件中,这个文件做了几件事
- 配置数据源,即连接数据库的一些配置( mybatis-config.xml 中的 environment 部分)
- 创建 sqlSessionFactory 的 bean,进行依赖注入( mybatis-config.xml 中的 mapper 部分,MyBatisUtil 的创建 sqlSessionFactory 部分)
- 创建 sqlSession 的 bean,将 sqlSessionFactory 注入进去( MyBatisUtil 中的 sqlSessionFactory.openSession )
- 创建真实现类 UserMapperImpl 的 bean,为其注入 sqlSession
其中,第1、2、3步都是配置和工具类干的事情,属于改动比较少的部分;而第4步属于会经常会进行的步骤,如增加 StudentMapperImpl、TeacherMapperImpl 等的 bean。
所以将第4步这种配置抽出来,留下1、2、3步,使得 spring-dao.xml 变成了一个比较纯洁的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 用 Spring 的数据源 替换 MyBatis 的数据源 --><!--data source--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="hsp"/></bean><!-- sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!--绑定 MyBatis 配置文件!--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--如,在这里注册 Mapper --><property name="mapperLocations" value="classpath:com/baifu/mapper/UserMapper.xml"/></bean><!-- SqlSessionTemplate 就是 SqlSession!--><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--只能用构造器注入,因为它没有 set 方法!--><!-- 把工厂给它,就能从中 get 到 SqlSession 了--><constructor-arg index="0" ref="sqlSessionFactory"/></bean>
</beans>
至于第4步这种操作,创建了一个要具体用到的对象,还是放到 applicationContext.xml 中进行管理吧!
创建 applicationContext.xml,通过 import 标签引入 spring-dao.xml,把真正要用到的对象,即 userMapper 交给它管理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--通过 import 标签引入 spring-dao.xml --><import resource="spring-dao.xml"/><bean id="userMapper" class="com.baifu.mapper.UserMapperImpl"><!--注入 sqlSession!--><property name="sqlSession" ref="sqlSession"/></bean> </beans>
测试时记着更改配置文件由于spring-dao.xml—>applicationContext.xml:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
这样几个配置文件的作用都很明确了,mybatis-config 负责 MyBatis 的一些配置(别名、设置),spring-dao 管理了 MyBatis 连接数据库、创建 SqlSession和注册 mapper 的配置,applicationContext 整合了 Spring 的配置(现在是 spring-dao,后面还会有 spring-mvc 等等)和管理要用到对象。
3.使用SqlSessionDaoSupport
使用 SqlSessionDaoSupport 与使用 SqlSessionTemplate 大同小异,只不过更简化了一点。
上面说到,UserMapperImpl 类中有一个 SqlSessionTemplate 类型的 sqlSession 属性,实现的方法中封装了使用 SqlSession 对数据库的操作,调用它的方法就相当于在使用 SqlSession。
这种方式在使用前需要注入 sqlSession 属性,而 SqlSession 又由 SqlSessionFactory 创建。也就是说,使用这种方式需要 SqlSessionFactory 和 SqlSession 的 bean。
使用 SqlSessionDaoSupport 省略了创建 SqlSession 的 bean 的步骤。
创建 UserMapperImpl2 实现类,继承 SqlSessionDaoSupport 类,实现 UserMapper 接口
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{public List<User> getUserList() {return null;}
}
重点来了!**SqlSessionDaoSupport 类中有 getSqlSession 方法,可以直接获得一个 sqlSession!**用这个 sqlSession 去执行数据库操作就行了!
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{public List<User> getUserList() {SqlSession sqlSession = getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserList();return userList;}
}
能用是能用,但必须思考为什么能用。**为什么 SqlSessionDaoSupport 类可以通过 getSqlSession 方法返回一个 SqlSession?**我们知道,SqlSession 是由 SqlSessionFactory 创建的,所以,点进去看看
public abstract class SqlSessionDaoSupport extends DaoSupport {private SqlSessionTemplate sqlSessionTemplate;public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {// 从工厂获取 sqlSessionTemplate}
}
原来如此!SqlSessionDaoSupport 类中就需要注入一个 sqlSessionFactory,以获取其中的 sqlSessionTemplate 对象,返回的就是这个对象!
所以在注册 UserMapperImpl2 的实现类的时候,要注入 sqlSessionFactory 依赖
<bean id="userMapper2" class="com.baifu.mapper.UserMapperImpl2"><!--注入 sqlSession!--><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>
它会通过注入的 sqlSessionFactory,获取 sqlSessionTemplate,也就是之前的方式获取到的 SqlSession 了(回见 2.2 / 4. )。
执行测试方法,获取的是 userMapper2 对象,执行结果相同!
public class MyTest {@Testpublic void MyBatisSpringTest2(){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper = context.getBean("userMapper2", UserMapper.class);List<User> userList = userMapper.getUserList();for (User user : userList) {System.out.println(user);}}
}
这样就完成了,相比直接使用 SqlSessionTemplate 的方式,SqlSessionDaoSupport 将其封装了起来,从 SqlSessionDaoSupport 中就可以获取到 SqlSession,不用配置 sqlSession 的 bean 和注入了(由继承的SqlSessionDaoSupport这个类完成了,剩一步)。
总结
使用 MyBatis-Spring 有两种方式
-
使用SqlSessionTemplate:就是直接使用 SqlSession,需要将 SqlSession 注入到实现类中进行使用。
-
使用SqlSessionDaoSupport:实现类继承 SqlSessionDaoSupport 类,把工厂交给它(通过注入),就能从它获取 SqlSession。
使用 MyBatis-Spring 需要创建与 Mapper.xml 对应的实现类,在实现类中调用 Mapper.xml 实现数据库操作。实例化 Mapper.xml 为一个实现类的目的是让 Spring 能管理它。
参考: https://blog.csdn.net/qq_43560701/article/details/119960903
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 对List进行排序,值为null的排到最后
Collections.sort(result, Comparator.comparing(YkfxYkbaFygcVO::getCe, Comparator.nullsLast(BigDecimal::compareTo)));...
2024/4/14 5:55:16 - 【java高性能编程基础】- 实现原子操作的多种方式
文章目录概述1、加锁1.1、Lock接口1.2、synchronized关键字2、CAS机制3、原子类(Atomic)概述 所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch &…...
2024/4/30 17:02:11 - RabbitMQ中交换机的几种模式
目录 简述 交换机模式 Fanout模式 Direct模式 Topic模式 Headers模式 简述 生产者不直接跟队列打交道,而是通过交换机。交换机类似于生产者和队列直接的一个管理者,它将生产的消息分配给对应的队列。 前期准备pom.xml中的依赖 <dependency&g…...
2024/4/30 16:07:19 - 寒假每日一题——贝茜的报复
贝茜的报复 问题描述 农夫约翰和奶牛贝茜喜欢在业余时间互相出数学题。 约翰给贝茜出了一道相当难的问题,导致她没能解决。 现在,她希望通过给约翰出一道有挑战性的难题来报复他。 贝茜给了约翰一个表达式 (BESSIE)(GOES)(MOO),其中包含…...
2024/4/30 23:09:34 - Python入门笔记(第九期——连接数据库)
前言: 兄弟们!今天也是学习的一天。今天学习连接数据库(我Java连数据库还没成功,很头疼!!!),没事不要慌,咱试试Python能成功不。加油!࿰…...
2024/4/30 16:30:35 - SpringBoot整合Web Service获取当日天气信息
前言 在上一篇文章中,带大家学习了如何实现在SpringBoot中,利用Web Service实现RPC进程间通信。接下来在本章节中,会继续带大家利用远程通信技术,实现在自己的项目中,获取第三方网站中的天气信息。 (文章有…...
2024/4/14 5:55:26 - 年后准备跳槽?这份Android 中高级面试题大全,面试建议+系统复习路线不容错过
前言 一晃都快要到年底了,最近有好几个朋友都在聊跳槽的事情,原因是在现在的公司要么钱觉得少了、要么觉得环境不太舒服,他们都计划年后回来就开始找工作。 关于跳槽他们也有很多疑惑,比如怎么准备简历、面试环节有没有要注意的…...
2024/4/30 16:05:50 - ConcurrentHashMap的JDK1.7源码解析(含详细注释)
为什么HashTable慢 HashTable 虽然它是一个线程安全的类,但是它是使用 synchronized 关键字来修饰一些操作。synchronized 锁住了一整个哈希表。导致同一时期只有一个线程可以进行对哈希表的操作。所以 HashTable 虽然线程安全但是它慢,一个人操作所有人…...
2024/4/30 17:10:59 - 微软云强劲增长的背后,是全新的人工智能黑科技
众所周知,近年来微软Azure云计算平台一直保持着强劲的增长势头。在上一个财季的财报中,微软CEO Satya Nadella表示,数字技术是通胀经济中的去通胀之力,不论是大企业还是小企业,都能通过构建自己的技术强度而提高生产力…...
2024/4/14 5:54:56 - MySQL中的单行函数
目录不同DBMS函数的差异MySQL的内置函数及分类数值函数基本函数角度与弧度互换函数三角函数指数与对数进制间的转换字符串函数流程控制函数不同DBMS函数的差异 我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件&…...
2024/4/30 17:18:50 - 全网最完整的性能测试流程
目录 一、准备工作 二、测试计划 三、测试脚本设计与开发 四、测试执行与管理 五、测试分析 六、性能测试思维导图 一、准备工作 1、系统基础功能验证 性能测试在什么阶段适合实施?切入点很重要!一般而言,只有在系统基础功能测试验证…...
2024/4/30 18:13:01 - 016-学习Redis-主从服用、哨兵、主备切换、集群概念
016-学习Redis-主从服用回顾内容:一、主从讲解:1、redis的优缺点2、主从概念-例子:3、主从概念-提出读写分离二、主从服用-读写分离1.将配置文件改为公用,将重复的配置设为公用。2.创建三个私有的配置文件3.启动三个服务器&#x…...
2024/4/26 11:17:39 - 反射面试题
1.什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射…...
2024/4/30 17:06:13 - react-redux的基本使用
目录结构 index.js import React from react import ReactDOM from react-dom import App from ./App import store from ./redux/store ReactDOM.render(<App/>,document.getElementById("root"))//监测redux中状态的改变,如redux的状态发生了改变…...
2024/4/17 19:11:46 - Vue2.0+ElementUI+CI 动态路由设置(踩坑记录)
一、后端数据传输 1.数据库格式 2.后端数据交互格式(json) 二、前端处理 1.静态路由 (1)在router/index.js界面设置静态路由,即必定会显示的页面 export const constantRouterMap [{path: /login, component: () > import(/views/login/index), hidden: tru…...
2024/4/19 8:39:35 - java使用swing窗体,基于rtsp视频监控
上图,后续更新代码...
2024/4/27 0:26:33 - 登录注册代码php
connect.php <?php$server "localhost";$db_username "root";$db_passwd "123456";$dbname "test";//连接数据库$db_link mysqli_connect($server,$db_username,$db_passwd,$dbname);//连接失败if(!$db_link){die("Ca…...
2024/4/14 5:55:16 - 翻译作业8
Prerequisites? | JXNUOJ 翻译 描述 新生佛兰迪已经选择了 k 门课程。为了符合学位要求,他必须从几个类别中选修课程。根据他的课程选择,你能向佛兰迪保证他会毕业吗? 输入 输入由几个测试用例组成。对于每种用例,输入的第一行…...
2024/4/15 17:23:06 - 练习:异常
定义三个整数变量a,b,c 判断能否构成一个三角形 如果不能请抛出一个自定义异常 public class Triangle {public static void main(String[] args) {try {isTriangle();} catch (TriangelException e) {System.out.println(e.getMessage());}}public static void isTriangle()…...
2024/4/20 5:48:38 - database连接错误(备忘)
显示错误如下: 解决办法:在Database后加上"?serverTimezoneUTC"即可...
2024/4/18 21:50:52
最新文章
- react-mosaic-component-一个React库--窗格布局
import { Mosaic, MosaicWindow, MosaicZeroState } from "react-mosaic-component";从名为react-mosaic-component的npm包中引入三个组件:Mosaic,MosaicWindow和MosaicZeroState。 react-mosaic-component是一个React库,用于创建…...
2024/4/30 23:29:28 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - [C++][算法基础]模拟队列(数组)
实现一个队列,队列初始为空,支持四种操作: push x – 向队尾插入一个数 x;pop – 从队头弹出一个数;empty – 判断队列是否为空;query – 查询队头元素。 现在要对队列进行 M 个操作,其中的每…...
2024/4/29 19:27:58 - ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...
2024/4/30 2:01:46 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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