Spring整合Mybatis之DAO层、Service层开发

3. Spring整合Mybatis编程DAO层开发

1. 项目引入相关依赖spring   mybatis   mysql   mybatis-spring   druid2. 编写spring.xml整合:spring 接管 mybatis 中 SqlSessionFactory对象的创建<!--创建DataSource--><bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/lb"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--创建sqlSessionFactory--><bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--依赖数据源--><property name="dataSource" ref="dataSource"/></bean>3. 建表4. 实体类5. DAO接口public interface UserDAO {List<User> findAll();}6. 开发Mapper<mapper namespace="com.baizhi.dao.UserDAO"><select id="findAdd" resultType="com.baizhi.eneity.User">select id, name, age, bir from t_user</select></mapper>注意:开发完mapper文件后一定要在spring.xml中注册<!--创建sqlSessionFactory--><bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property></bean>7. 启动工厂获取SqlSessionFactoryApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) context.getBean("sqlSessionFactory");SqlSession sqlSession = sqlSessionFactory.openSession();UserDAO userDAO = sqlSession.getMapper(UserDAO.class);userDAO.findAll().forEach(user -> {System.out.println(user);});再进一步可以直接在工厂中注册SqlSessionFactory、注册DAO组件类,并且在DAO组件里面注入SqlSessionFactory和DAO接口的类型,这样就可以使用spring工厂直接获取UserDAO组件类了不用再获取SqlSessionFactory了ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");UserDAO userDAO = (UserDAO) context.getBean("userDAO");

接下来我们来整合mybatis和spring并一步一步的开发DAO层:

首先,我们新建一个模块,使用标准的包结构

 

之后我们要在pom.xml文件中引入依赖

spring mybatis mysql mybatis-spring druid

 

<!--spring核心及相关依赖-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.3.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.2.RELEASE</version>
</dependency><!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version>
</dependency><!--mybatis-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version>
</dependency><!--mybatis-spring-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.4</version>
</dependency><!--druid-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.19</version>
</dependency>

在数据库中建表

 

创建实体类

public class User {private String id;private String name;private Integer age;private Date bir;public User() {}public User(String id, String name, Integer age, Date bir) {this.id = id;this.name = name;this.age = age;this.bir = bir;}// 成员变量的set、get方法以及类的to_String方法在博客中没有,是为了避免占用太多篇幅,但是这里其实是有的// 大家写的时候一定要写上
}

创建DAO接口 

public interface UserDAO {List<User> findAll();
}

 

 写Mapper配置文件

<?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.baizhi.dao.UserDAO"><!--查询表中所有记录--><select id="findAll" resultType="com.baizhi.eneity.User">select id, name, age, bir from t_user</select></mapper>

 

编写spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建DataSource--><bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/lb"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--创建sqlSessionFactory--><bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--因为使用了mybatis官方的创建SqlSessionFactory对象的工具类,所以不能使用mybatis的主配置文件了,主配置文件最重要的是数据源+mapper,所以我们要在这里写上数据源和mapper配置--><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property></bean></beans>

 

测试和结果 

 

最后我们来说一个优化 

对于我们来说,我们不关心SqlSessionFactory如何获取SqlSession的,也不关心SqlSession如何获取获取DAO接口的,我们关心能否一步就获得想要的DAO接口呢,这是可以的,我们先在工厂中注册SqlSessionFactory对象,因为SqlSessionFactory可以获取SqlSession对象,然后传入DAO接口类型就获得了DAO接口对象;然后我们可以在工厂中创建一个DAO组件类,注入SqlSessionFactory对象和DAO接口类型就可以直接获得DAO对象了,这个类就是mybatis-spring包中的MapperFactoryBean类

配置文件

<!--创建DataSource-->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/lb"/><property name="username" value="root"/><property name="password" value="root"/>
</bean><!--创建sqlSessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--因为使用了mybatis官方的创建SqlSessionFactory对象的工具类,所以不能使用mybatis的主配置文件了,主配置文件最重要的是数据源+mapper,所以我们要在这里写上数据源和mapper配置--><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property>
</bean><!--创建DAO组件类-->
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" name="userDAO"><!--注入SqlSessionFactory--><property name="sqlSessionFactory" ref="sqlSessionFactory"/><!--注入创建的DAO接口的类型  注入接口的全限定名  包.接口名--><property name="mapperInterface" value="com.baizhi.dao.UserDAO"/>
</bean>

  • 测试和结果
public class TestUserDAO {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");UserDAO userDAO = (UserDAO) context.getBean("userDAO");userDAO.findAll().forEach(user -> System.out.println("user = " + user));}
}

 

 

总结:

 

 4. Spring整合Mybatis编程Service层开发

# spring、mybatis整合Service层开发时如何加入事务控制1. Mybatis框架中事务控制SqlSession		提交:sqlSession.commit();		回滚:sqlSession.rollback()// 无论用的是哪个简化数据库的框架,它的底层一定是jdbc,sqlSession底层调的也是Connection的commit()、rollback()Mybatis 是对 原始jdbc技术的封装  ===> Connection(数据库其实只认java.sql.Connection commit() | rollback())项目中真正负责数据库事务控制的对象:Connection 对象2. 用来实现事务控制的核心对象是Connection 连接对象的 commit() rollback()3. 如何在现有的项目中获取Connection对象注意:在现有项目中DruidDataSource是一个连接池  在连接池里面装的就是一个一个的Connection连接Connection conn = DruidDataSource.getConnection();4. 给现有业务层加入事务UserServiceImplprivate DataSource dataSource; // 提供公开的set方法save(){try{// 控制事务druidDataSource.getConnection().setAutoCommit(false)	// 将事务提交方式改为手动// 处理业务// 调用DAOdruidDataSource.getConnection().commit();}catch(...){druidDataSource.getConnection().rollback();}}连接控制事务得保证是同一个连接对象,在业务层拿到的连接对象得和DAO真正执行时打开的数据库连接对象保持一致DAO真正执行是由框架内部的jar包创建出来的,不受控制,与业务层拿到的连接不是同一个,所以利用上面的代码控制事务是不行的4. 在Spring和Mybatis框架中提供了一个类DataSourceTransactionManager	数据源事务管理器作用1. 在全局创建一个事务管理器,用来统一调度 业务层当前线程使用的连接对象和DAO层使用的连接对象一致由它来决定哪个线程在执行业务层时用的是这个连接,在执行DAO时同样用这个连接创建<!--数据源管理器--><!--它是用来控制数据源的线程安全问题,它不生产数据源,所以要告诉它控制哪个数据源的线程安全问题,所以要注入数据源--><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"><!--注入数据源对象--><property name="dataSource" ref="dataSource"/></bean>		5. 给现有的业务层加入事务控制public class UserServiceImpl implements UserService{private UserDAO userDAO;private PlatformTransactionManager transactionManager; //setTransactionManager方法public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic void save(User user) {try{// 创建事务配置对象// 接口,后面new的用实现类TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();// 获取事务状态//传入事务配置TransactionStatus status = platformTransactionManager.getTransaction(transactionDefinition);//try {// 控制事务// 处理业务userDAO.save(user);int i = 1 / 0;// 需要传入事务状态platformTransactionManager.commit(status);} catch (Exception e) {e.printStackTrace();platformTransactionManager.rollback(status);}}
}	

在具体讲解Spring整合Mybatis编程Service层开发之前,我们先来补充一个小的知识点 

<!--一次性创建项目中所有DAO对象 MapperScannerConfigurerMapperScannerConfigurer:默认创建对象在工厂中唯一标识:接口的首字母小写的名字UserDAO=====> userDAO   Userdao====> userdaoOrderDAO====> orderDAO  Orderdao====> orderdaoEmpDAO====> empDAO
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入SqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--扫描DAO接口所在的包--><property name="basePackage" value="com.baizhi.dao"/>
</bean>

 

  • 使用MapperScannerConfigurer,一次性创建包中所有的接口
<!--创建sqlSessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--因为使用了mybatis官方的创建SqlSessionFactory对象的工具类,所以不能使用mybatis的主配置文件了,主配置文件最重要的是数据源+mapper,所以我们要在这里写上数据源和mapper配置--><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property><!--注入别名相关配置 typeAliasesPackage:用来给指定包中所有类起别名 默认的别名:类名|类名首字母小写--><property name="typeAliasesPackage" value="com.baizhi.eneity"/>
</bean>

 

  • typeAliasesPackage:用来给指定包中所有类起别名 默认的别名:类名|类名首字母小写

 

之后我们正式进入Spring整合Mybatis编程Service层开发

因为在前面开发DAO层时已经在pom.xml中导入依赖了,所以在开发Service时就不需要再导入依赖了,我们直接开发Service接口

 

public interface UserService {List<User> findAll();void save(User user);
}

 

 这里我们先不管事务操作,创建UserService接口的实现类,UserService的实现类里面有一个userDAO接口对象

package com.baizhi.service;import com.baizhi.dao.UserDAO;
import com.baizhi.eneity.User;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;import java.util.List;
import java.util.UUID;public class UserServiceImpl implements UserService{private UserDAO userDAO;public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List<User> findAll() {// 查询操作不需要事务控制// 调用userDAO的方法return userDAO.findAll();}@Overridepublic void save(User user) {// 控制事务// 处理业务// 调用DAO// userDAO 方法上有一个小事务,仅限于DAO的方法,DAO的方法结束后会做一个提交,这个小事务仅是为了方便测试DAO// 当外部(Service方法内)存在事务时,小事务(仅限于DAO的方法中的事务)自动消失(小事务不生效)// // 调用userDAO的方法userDAO.save(user);//int i = 1 / 0;}
}

 编写spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建DataSource--><bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/lb"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--创建sqlSessionFactory--><bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--因为使用了mybatis官方的创建SqlSessionFactory对象的工具类,所以不能使用mybatis的主配置文件了,主配置文件最重要的是数据源+mapper,所以我们要在这里写上数据源和mapper配置--><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property><!--注入别名相关配置 typeAliasesPackage:用来给指定包中所有类起别名 默认的别名:类名|类名首字母小写--><property name="typeAliasesPackage" value="com.baizhi.eneity"/></bean><!--一次性创建项目中所有DAO对象 MapperScannerConfigurerMapperScannerConfigurer:默认创建对象在工厂中唯一标识:接口的首字母小写的名字UserDAO=====> userDAO   Userdao====> userdaoOrderDAO====> orderDAO  Orderdao====> orderdaoEmpDAO====> empDAO--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入SqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--扫描DAO接口所在的包--><property name="basePackage" value="com.baizhi.dao"/></bean><!--管理Service组件--><bean class="com.baizhi.service.UserServiceImpl" name="userService"><property name="userDAO" ref="userDAO"/></bean></beans>

 

测试和结果 

 测试之前t_user表中记录:

运行代码:

 

运行之后t_user表中记录:

 

上面表记录说明执行成功了。

接下来我们尝试使用事务进行管理

我们先看一下是否有事务自动提交

 

 

为什么有异常却仍然插入了数据呢,这时因为userDAO 方法上有一个小事务,仅限于DAO的方法,DAO的方法结束后会做一个提交,这个小事务仅是为了方便测试DAO, 当外部(Service方法内)存在事务时,小事务(仅限于DAO的方法中的事务)自动消失(小事务不生效)。所以我们就需要手动进行管理了,我们知道,无论什么框架与数据库打交道时,底层都是Connection对象与数据库打交道,所以我们尝试用Connection进行事务管理,但是这确实不行的,因为Connection管理事务的前提是相同的Connection对象,当调用userDAO管理事务的Connection对象和userService管理事务的Connection对象不是同一个,那怎么办呢?官方提供了事务管理器类platformTransactionManager,它是用来控制数据源的线程安全问题,它不生产数据源,我们把它声明为成员变量,并声明公开的set方法,让spring工厂管理,所以UserServiceImpl实现类代码如下:

UserServiceImpl实现类

 

public class UserServiceImpl implements UserService{private UserDAO userDAO;// 声明事务管理器// PlatformTransactionManager是一个接口// DataSourceTransactionManager是PlatformTransactionManage的子类private PlatformTransactionManager platformTransactionManager;public void setPlatformTransactionManager(PlatformTransactionManager platformTransactionManager) {this.platformTransactionManager = platformTransactionManager;}public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List<User> findAll() {// 查询操作不需要事务控制return userDAO.findAll();}@Overridepublic void save(User user) {// 创建事务配置对象// 接口,后面new的用实现类TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();// 获取事务状态//创建事务配置TransactionStatus status = platformTransactionManager.getTransaction(transactionDefinition);//try {// 控制事务// 处理业务// 调用DAO// userDAO 方法上有一个小事务,仅限于DAO的方法,DAO的方法结束后会做一个提交,这个小事务仅是为了方便测试DAO// 当外部(Service方法内)存在事务时,小事务(仅限于DAO的方法中的事务)自动消失(小事务不生效)userDAO.save(user);int i = 1 / 0;// 需要传入事务状态platformTransactionManager.commit(status);} catch (Exception e) {e.printStackTrace();platformTransactionManager.rollback(status);}}
}

mapper配置文件 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建DataSource--><bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/lb"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--创建sqlSessionFactory--><bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><!--因为使用了mybatis官方的创建SqlSessionFactory对象的工具类,所以不能使用mybatis的主配置文件了,主配置文件最重要的是数据源+mapper,所以我们要在这里写上数据源和mapper配置--><!--依赖数据源--><property name="dataSource" ref="dataSource"/><!--注册mapper配置文件--><property name="mapperLocations"><array><value>classpath:com/baizhi/mapper/UserDAOMapper.xml</value></array></property><!--注入别名相关配置 typeAliasesPackage:用来给指定包中所有类起别名 默认的别名:类名|类名首字母小写--><property name="typeAliasesPackage" value="com.baizhi.eneity"/></bean><!--一次性创建项目中所有DAO对象 MapperScannerConfigurerMapperScannerConfigurer:默认创建对象在工厂中唯一标识:接口的首字母小写的名字UserDAO=====> userDAO   Userdao====> userdaoOrderDAO====> orderDAO  Orderdao====> orderdaoEmpDAO====> empDAO--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入SqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--扫描DAO接口所在的包--><property name="basePackage" value="com.baizhi.dao"/></bean><!--管理Service组件--><bean class="com.baizhi.service.UserServiceImpl" name="userService"><property name="userDAO" ref="userDAO"/><property name="platformTransactionManager" ref="transactionManager"/></bean><!--数据源管理器--><!--它是用来控制数据源的线程安全问题,它不生产数据源,所以要告诉它控制哪个数据源的线程安全问题,所以要注入数据源--><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"><!--注入数据源对象--><property name="dataSource" ref="dataSource"/></bean></beans>

 

测试和结果 

测试之前的表 

 

测试: 

 

测试之后的表: 

 

上述结果说明我们成功的使用事务管理了Service层。

总结:

 

 

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_50313418/article/details/123301769

 

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

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

相关文章

8、内网安全-横向移动RDPKerberos攻击SPN扫描WinRMWinRS

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正 目录 一、域横向移动-RDP-明文&NTLM 1.探针服务&#xff1a; 2.探针连接&#xff1a; 3.连接执行&#xff1a; 二、域横向移动-WinRM&WinRS-明文&NTLM 1.探针可用&#xff1a; 2.连接…

【PyQt】14-绘图-QPainter

文章目录 前言一、QPainter二、绘制文本-drawTextQt里面的文本对齐方式 运行结果 三、像素点总结 前言 1、学会画图方法 一、QPainter 通常可以绘制文本、各种图形&#xff08;点、线、椭圆、弧、扇形、多边形等等&#xff09;、图像。 必须在painrEvent事件方法中绘制各种元…

Eclipse 分栏显示同一文件

Eclipse 分栏显示同一文件 1. Window -> EditorReferences 1. Window -> Editor Toggle Split Editor (Horizontal) &#xff1a;取消或设置水平分栏显示 Toggle Split Editor (Vertical) &#xff1a;取消或设置垂直分栏显示 References [1] Yongqiang Cheng, https:/…

Unity ScreenPointToRay 获取到的坐标不准确

&#x1f47e;奇奇怪怪的 &#x1f959;问题描述&#x1f96a;解决方案&#x1f37f;验证代码 &#x1f959;问题描述 使用&#xff1a;Camera.main.ScreenPointToRay 将鼠标坐标转换成射线&#xff0c;然后通过&#xff1a;Physics.Raycast 获取到射线碰撞到的坐标&#xff0…

windows安装Mysql解压版

windows安装Mysql解压版 一、下载mysql-8.0.36-winx64.zip二、解压三、配置3.1. 添加环境变量&#xff1a;新建MYSQL_HOME3.2.如何验证是否添加成功&#xff1a;必须以管理员身份启动3.3. 初始化MySQL&#xff1a;必须以管理员身份启动3.4. 注册MySQL服务&#xff1a;必须以管理…

OpenAI视频生成模型Sora背后的技术及其深远的影响

前言 Sora的视频生成技术在保真度、长度、稳定性、一致性、分辨率和文字理解等方面都达到了当前最优水平。其核心技术包括使用视觉块编码将不同格式的视频统一编码成Transformer可训练的嵌入向量&#xff0c;以及类似于扩散过程的UNet方法进行降维和升维的加噪与去噪操作。通过…

鸿蒙-基于ArkTS声明式开发的简易备忘录,适合新人学习,可用于大作业

本文地址&#xff1a;https://blog.csdn.net/qq_40785165/article/details/136161182?spm1001.2014.3001.5502&#xff0c;转载请附上此链接 大家好&#xff0c;我是小黑&#xff0c;一个还没秃头的程序员~~~ 不知不觉已经有很长一段时间没有分享过自己写的东西了&#xff0…

如何系统地学习Python

建议系统学习Python的途径遵循理论与实践相结合的教学方法。以下是一个分阶段的学习计划&#xff1a; 阶段一&#xff1a;基础知识 理解Python的特点&#xff1a; 认识Python的历史与设计哲学。学习Python的基本语法和运行环境。 安装Python&#xff1a; 学习如何在不同操作系…

鸿蒙应用模型开发-更新SDK后报错解决

更新SDK后提示 “ohos.application.Ability”/“ohos.application.AbilityStage”等模块找不到或者无相关类型声明 问题现象 更新SDK后报错“Cannot find module ‘ohos.application.AbilityStage’ or its corresponding type declarations”&#xff0c;“Cannot find modu…

修改vue-layer中title

左侧目录树点击时同步目录树名称 试了很多方法 layer.title(新标题&#xff0c;index)不知道为啥不行 最后用了获取html树来修改了 watch: {$store.state.nowTreePath: function(newVal, oldVal) {if (document.querySelectorAll(".lv-title") && document.q…

扶贫助农|基于springboot的扶贫助农系统设计与实现(源码+数据库+文档)

扶贫助农系统目录 目录 基于springboot的扶贫助农系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、扶贫任务管理 3、论坛信息管理 4、扶贫公告管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

GIS工具maptalks——初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.j…

AI算法初识之分类汇总

一、背景 AI算法的分类方式多种多样&#xff0c;可以根据不同的学习机制、功能用途以及模型结构进行划分。以下是一些主要的分类方式及相应的代表性算法&#xff1a; 1. 按照学习类型 - **监督学习**&#xff1a; - 线性回归&#xff08;Linear Regression&#xff09; …

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

C/C++内存管理详解

目录 一、C内存分布 二、C语言与C内存管理方式 1、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 2、C中的内存管理方式&#xff1a;new/delete 三、operator new与operator delete函数 1、函数概念&#xff1a; 2、函数使用&#xff1a; 3、底层原理…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后&#xff0c;接下来我们再来研究通知的执行顺序。 当在项目开发当中&#xff0c;我们定义了多个切面类&#xff0c;而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候&#xff0c;这多…

鸿蒙新手入门-环境准备问题解析

Node.js版本与API配套关系 由于SDK的部分工具依赖Node.js运行时&#xff0c;推荐使用配套API版本的Node.js&#xff0c;保证工程的兼容性。 匹配关系见下表&#xff1a; API LevelNode.js支持范围API Level≤914.x&#xff08;≥14.19.1&#xff09;、16.xAPI Level>914.…

利用R语言绘制相关性热图

数据示例&#xff08;归一化处理后&#xff09;&#xff1a; install.packages("corrplot") install.packages("ggplot2") install.packages("ggpubr") library(corrplot) install.packages("GGally") library(GGally) library(ggplot…

读十堂极简人工智能课笔记06_自然语言处理

1. 聊天机器人 1.1. 人工智能往往掌握不了跨越几段对话语境的讨论 1.1.1. 抓不住连贯的主题&#xff0c;只能单独处理每个句子 1.1.2. 不能将其答案与现实联系起来 1.1.3. 可能会遵循语言规则、统计相关性&#xff0c;甚至查找有关事实来为每个新句子提供答复 1.2. 聊天机…

【JVM篇】什么是类加载器,有哪些常见的类加载器

文章目录 &#x1f354;什么是类加载器&#x1f6f8;有哪些常见的类加载器 &#x1f354;什么是类加载器 负责在类加载过程中&#xff0c;将字节码信息以流的方式获取并加载到内存当中 &#x1f6f8;有哪些常见的类加载器 启动类加载器 启动类加载器是有Hotspot虚拟机通过的类…