SSM框架-SSM整合

news2025/7/8 1:26:27

目录

1 ContextLoaderListener

2 准备工作

3 配置web.xml

4 配置springmvc.xml

5 配置spring.xml

6 Spring整合MyBatis

7 配置log4j.xml

8 配置事务

9 测试功能

9.1 创建pojo类

9.2 员工列表功能

9.3 分页数据

9.4 分页相关超链接


ContextLoaderListener

Spring 提供了监听器 ContextLoaderListener ,实现 ServletContextListener 接口,可监听
ServletContext 的状态,在 web 服务器的启动,读取 Spring 的配置文件,创建 Spring IOC 容器。 web应用中必须在web.xml 中配置
配置Spring的监听器,在服务器加载启动时加载spring的配置文件,Spring配置文件的默认位置和名称为:/WEB-INF/applicationContext.xml。当然我们可以自定位位置和名称
我们测试这个监听器:
在web.xml文件中配置监听器,在之前的配置基础上,配置如下:
    <!--spring监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--自定义spring配置文件的位置和名称,也就是resources下面-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>

注意:只有控制层需要交给SpringMVC管理,其它都交给Spring管理。 

通过源码我们发现SpringMVC的IoC可以访问到Spring中IoC的bean,但是Spring的IoC容器访问不到SpringMVC的IoC的Bean。所以我们不需要别的操作,SpringMVC的IoC容器就可以直接访问到Spring的IoC容器。

2 准备工作

创建model

引入依赖:

    <properties>
        <spring.version>5.3.1</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--springmvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <!--mybatis和spring的整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.13</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>

创建数据库表

CREATE TABLE `t_emp` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

插入一点数据:

3 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置Spring的编码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置处理请求方式的过滤器-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置SpringMVC的前端控制器DispatcherServlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--设置SpringMVC配置文件自定义的位置和名称-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--将DispatcherServlet的初始化时间提前到服务器启动时-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--配置Spring的监听器,在服务器启动时加载Spring的配置文件-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--设置Spring配置文件自定义的位置和名称-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>
</web-app>

4 配置springmvc.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描控制层组件-->
    <context:component-scan base-package="com.itzw.ssm.controller"></context:component-scan>
    <!--配置视图解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

    <!--开启mvc的注解驱动-->
    <mvc:annotation-driven />

    <!--配置视图控制器-->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
</beans>

5 配置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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--扫描组件,除了控制层-->
    <context:component-scan base-package="com.itzw.ssm">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--引入jdbc.properties-->
    <context:property-placeholder location="jdbc.properties"/>

    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

</beans>

6 Spring整合MyBatis

记得在spring配置文件里面引入jdbc.properties文件的时候要在文件前面加上classpath:

我们创建MyBatis核心配置文件,这个我们很熟悉。我们再创建一个mapper文件,并在类路径下创建同样路径和名称的mapper映射文件

我们在spring配置文件中配置SqlSessionFactoryBean,它可以直接在Spring的IOC中获取SqlSessionFactory,我们可以在这里配置MyBatis核心配置文件的相关配置。也就是说可以在Spring配置文件中配置MyBatis配置文件的内容,至于怎么选择,看你咯。比如:

我们在这里配置了数据源和别名,那么我们在MyBatis配置文件中就不需要配置了。

设置映射文件路径:

需要注意的是,如果我们的映射文件包和mapper接口包一样,那么我们就不需要配置这个标签,因为我们都是按照要求配置一样的包,所以这个标签可以不配置,而且MyBatis配置文件中也不需要配置。

我们再配置以下标签(这个标签是spring整合MyBatis最关键的一个):

配置这个标签我们就可以直接在service中自动装配mapper接口对象了。需要注意的是上面映射文件不需要配置的前提是,以上这个bean配置后才行。这个bean配置就表示配置类mapper接口和mapper映射文件的路径。如下:

以前我们需要先获取mybatis配置文件流,然后总之很麻烦,现在一步就完成了。

7 配置log4j.xml

在类路径下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

8 配置事务

配置完事务记得在service文件上加上@Transactional注解

    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--
        开启事务的注解驱动
        将使用注解@Transactional标识的方法或类中所有的方法进行事务管理
    -->
    <tx:annotation-driven transaction-manager="transactionManager" />

到此,配置基本完毕,总结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"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--扫描组件,除了控制层-->
    <context:component-scan base-package="com.itzw.ssm">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--引入jdbc.properties-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--配置SqlSessionFactoryBean,可以直接在Spring的IOC中获取SqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--设置MyBatis的核心配置文件的路径-->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <!--设置数据源-->
        <property name="dataSource" ref="dataSource"></property>
        <!--设置类型别名所对应的包-->
        <property name="typeAliasesPackage" value="com.itzw.ssm.pojo"></property>
        <!--设置映射文件的路径,只有映射文件的包和mapper接口的包不一致时需要设置-->
        <!--<property name="mapperLocations" value="classpath:mappers/*.xml"></property>-->
    </bean>

    <!--
    配置mapper接口的扫描,可以将指定包下所有的mapper接口
    通过SqlSession创建代理实现类对象,并将这些对象交给IOC容器管理
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.itzw.ssm.mapper"></property>
    </bean>

    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--
        开启事务的注解驱动
        将使用注解@Transactional标识的方法或类中所有的方法进行事务管理
    -->
    <tx:annotation-driven transaction-manager="transactionManager" />


</beans>

mybatis核心配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <plugins>
        <!--配置分页插件-->
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
</configuration>

9 测试功能

9.1 创建pojo类

package com.itzw.ssm.pojo;

public class Employee {

    private Integer empId;

    private String empName;

    private Integer age;

    private String gender;

    private String email;

    public Employee() {
    }

    public Employee(Integer empId, String empName, Integer age, String gender, String email) {
        this.empId = empId;
        this.empName = empName;
        this.age = age;
        this.gender = gender;
        this.email = email;
    }

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

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

    public String getEmail() {
        return email;
    }

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

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

9.2 员工列表功能

mapper接口:

List<Employee> getAllEmployee();

映射文件:

    <select id="getAllEmployee" resultType="Employee">
        select * from t_emp
    </select>

service接口:

    /**
     * 查询员工所有信息
     * @return
     */
    List<Employee> getAllEmployee();

service实现类:

@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {

    @Autowired
    private EmployeeMapper employeeMapper;

    public List<Employee> getAllEmployee() {
        return employeeMapper.getAllEmployee();
    }
}

controller类:

@Controller
public class EmployeeController {
    @Autowired
    private EmployeeService employeeService;

    @RequestMapping(value = "/employee",method = RequestMethod.GET)
    public String getAllEmployee(Model model){
        List<Employee> allEmployee = employeeService.getAllEmployee();
        model.addAttribute("allEmployee",allEmployee);
        return "employee_list";
    }
}

前端页面employee_list.html:

前端使用到了流水号,就是不管员工的id是什么,流水号的号码都是按顺序从上往下逐个增加。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>员工列表</title>
</head>
<body>
<h1>欢迎访问员工列表</h1>
<table>
    <tr>
        <th colspan="6">员工列表</th>
    </tr>
    <tr>
        <th>流水号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
        <th>邮箱</th>
        <th>操作</th>
    </tr>
    <tr th:each="employee,status : ${allEmployee}">
        <td th:text="${status.count}"></td>
        <td th:text="${employee.empName}"></td>
        <td th:text="${employee.age}"></td>
        <td th:text="${employee.gender}"></td>
        <td th:text="${employee.email}"></td>
        <td>
            <a href="">删除</a>
            <a href="">修改</a>
        </td>
    </tr>
</table>
</body>
</html>

查看结果:

9.3 分页数据

service接口:

    /**
     * 查询员工分页信息
     * @param pageNum
     * @return
     */
    PageInfo<Employee> getAllEmployeeByPage(Integer pageNum);

service实现类:

我们在这里实现分页功能

    public PageInfo<Employee> getAllEmployeeByPage(Integer pageNum) {
        //开启分页功能
        PageHelper.startPage(pageNum,5);
        //查询所有员工信息
        List<Employee> allEmployee = employeeMapper.getAllEmployee();
        //获取分页相关数据
        PageInfo<Employee> page = new PageInfo<Employee>(allEmployee,5);
        return page;
    }

控制层:

    @RequestMapping(value = "/employee/page/{pageNum}",method = RequestMethod.GET)
    public String getAllEmployeeByPage(@PathVariable("pageNum") Integer pageNum,Model model){
        PageInfo<Employee> page = employeeService.getAllEmployeeByPage(pageNum);
        model.addAttribute("page",page);
        return "employee_list";
    }

注意几点:

这时前端页面接收数据使用page.list,因为一个list表示一个页面。映射文件的SQL语句最后不要加分号,否则出错。

结果:

9.4 分页相关超链接

  • hasPreviousPage:是否有上一页,有则是true
  • prePage:表示上一页
  • hasNextPage:是否有下一页,有则是true
  • nextPage:表示下一页
  • pages:表示总页数
  • navigatepageNums:导航分页的页码,它是个数组
<div style="text-align: center">
    <a th:if="${page.hasPreviousPage}" th:href="@{/employee/page/1}">首页</a>
    <a th:if="${page.hasPreviousPage}" th:href="@{'/employee/page/'+${page.prePage}}">上一页</a>

    <span th:each="num:${page.navigatepageNums}">
        <a th:href="@{'/employee/page/'+${num}}" th:text="${num}"></a>
    </span>

    <a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.nextPage}}">下一页</a>
    <a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.pages}}">末页</a>
</div>

效果:

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

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

相关文章

安卓玩机搞机技巧综合资源-----卸载内置软件 获取root权限 刷写第三方ROM【六】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

985、211毕业一年,面试八家大厂,四面拿美团offer(Java后端)

自我介绍 本人三年开发&#xff0c;985硕士&#xff0c;211本科&#xff0c;专业都是软件工程&#xff0c;一直投的是Java后台开发&#xff0c;只投过一次网易的测试&#xff0c;技术不是太牛&#xff0c;但是比较努力。实验室没有项目&#xff0c;so项目经验是0&#xff0c;在…

openssl自动批量生成证书

使用bash批处理程序自动生成证书信息。 1、在linux系统创建一个文件夹 $ mkdir my_cert 2、创建CA证书以及私钥 $ cd my_cert $ openssl genrsa -out CA_Private.key 2048 $ openssl req -x509 -new -nodes -key CA_Private.key -sha256 -days 365 -out CA_Certificate.p…

Node.js 动画:事件循环

我们都听说过 JavaScript 和 Node.js 是单线程的&#xff0c;但实际上这意味着什么&#xff1f; 这意味着 JavaScript 一次只能做一件事。例如&#xff0c;我们不能同时对数字进行乘法和求和。我们通常按顺序进行操作。我们先加然后乘&#xff0c;反之亦然。现代计算机速度很快…

常见的卷积神经网络模型,卷积神经网络数学建模

1、卷积神经网络cnn究竟是怎样一步一步工作的 用一个卷积核滑动图片来提取某种特征&#xff08;比如某个方向的边&#xff09;&#xff0c;然后激活函数用ReLU来压制梯度弥散。对得到的结果用另一个卷积核继续提取reLU&#xff0c;然后池化&#xff08;保留区域最大或者用区域…

【linux】centos7 普通用户授予 root 权限

目录前言sudo介绍sudo的使用前提 --- 配置文件/etc/sudoers结语前言 最近通知 linux 期末考试啦&#xff01;要上机实操并且要求不能使用 root 用户&#xff0c;因此有些操作需要涉及到权限问题&#xff0c;我们都知道在命令前加sudo就行了&#xff0c;但sudo的使用也是有前提…

Spring 创建和使用 · 存储 bean 对象 · 获取并使用 bean 对象 · 关于配置文件 id 的注意事项 · getBean 方法的更多用法

Spring 是一个包含了众多工具方法的 IoC 容器。 容器的最基本的功能&#xff1a;把对象存储到容器&#xff08;Spring&#xff09;中&#xff1b;从容器中将对象取出来。 在 Java 中对象也叫做 Bean&#xff0c;以后我们遇到对象就以 Bean 著称。 一、创建 Spring 项目1.1 创建…

吹爆,阿里专家手码“数据库优化速成小册”Github现已疯传

现在在很多设计、开发、测试人员的眼中会认为SQL优化只是DBA 的事情。他们不需要去关心。反映到具体工作中&#xff0c;他们缺乏相应的优化意识&#xff0c;只注重功能的实现而忽略了相应的执行成本。最终的结果往往就是代码质量不高&#xff0c;软件上线后问题多。 LZ当初就是…

现货黄金K线图的“温柔一刀”

学习现货黄金交易K线图如何看、如何分析的方法非常多&#xff0c;但是小编交易&#xff0c;徐学一到两种即可&#xff0c;学会小而精的分析方法&#xff0c;才是我们赚钱的秘诀。俗话说得好&#xff0c;一招鲜吃遍天&#xff0c;就是这个道理。如果技术太多&#xff0c;最后没办…

IOT云平台 simple(5)springboot netty实现modbus TCP Master

本系列教程包括&#xff1a; IOT云平台 simple&#xff08;0&#xff09;IOT云平台简介 IOT云平台 simple&#xff08;1&#xff09;netty入门 IOT云平台 simple&#xff08;2&#xff09;springboot入门 IOT云平台 simple&#xff08;3&#xff09;springboot netty实现TCP Se…

IFR202型红外雨量传感器数据说明

信号输出 寄存器 OUT_CFG 默认参数时&#xff0c;当降雨量达到预设的分辨率时&#xff0c;传感器从脉冲线输出脉冲信号、从数字 接口 RS232 或者 RS485 输出总降雨量、LED 指示灯闪烁一次。 数字接口 RS232 或者 RS485 输出数据帧说明如下&#xff1a;&#xff08;16 进制数…

VUE3 数据的侦听

侦听数据变化也是组件里的一项重要工作&#xff0c;比如侦听路由变化、侦听参数变化等等。 Vue 3 在保留原来的 watch 功能之外&#xff0c;还新增了一个 watchEffect 帮助更简单的进行侦听。 watch 在 Vue 3 &#xff0c;新版的 watch 和 Vue 2 的旧版写法对比&#xff0c;在…

Spring Security基础使用

Spring Security基础使用 定义 官方文档&#xff1a;https://docs.spring.io/spring-security/reference/index.html security结合servelt:https://docs.spring.io/spring-security/reference/5.6/servlet/getting-started.html Security 官方示例项目&#xff1a;https://…

深度对比 Footprint 和 Dune 数据模型

在产品建设方面&#xff0c;数据所有权转移已迅速成为需要解决的关键问题之一。社交媒体平台滥用数据的现象频发&#xff0c;我们亟需建立方案来解决这一问题。鉴于此&#xff0c;区块链提供了一种功能&#xff0c;可以永恒地存储、转移数据&#xff0c;并创建市场&#xff0c;…

ChatGPT帮你写代码?人工智能ChatGPT之于Web3的几点思考

人工智能AI有人热情膜拜&#xff0c;有人畏惧如虎&#xff0c;AI的发展已经进入高层面的快车道&#xff0c;技术更新迭代日新夜异&#xff0c;技术无罪也无善恶&#xff0c;曾经科幻未来的人机交流&#xff0c;共生共存如今在我们的脑海中已经有了轮廓的意识感想&#xff0c;科…

Spring底层事务原理

Spring事务底层原理一、EnableTransactionManagement工作原理二、Spring事务基本执行原理三、Spring事务的过程四、Spring事务传播机制五、Spring事务传播机制分类&#xff08;1&#xff09;案例分析、情况1&#xff08;2&#xff09;案例分析、情况2&#xff08;3&#xff09;…

SEVNLDAEFR, 186142-28-9

This peptide substrate corresponds to the Swedish Lys-Met/Asn-Leu (K670N/M671L) mutation of the amyloid precursor protein (APP) β-secretase cleavage site. It has been used for assaying β-secretase activity.该肽底物对应于淀粉样前体蛋白(APP) β-分泌酶切割位…

政企办公「分水岭」以至,融云百幄数智化破局

中国政企数智办公平台行业研究报告 246 年前&#xff0c;亚当斯密便在《国富论》中提出&#xff0c;劳动分工是提高社会生产效率的主要原因。从工厂定岗&#xff0c;到国际分工&#xff0c;分工的价值已经深入社会生活和工作的方方面面。关注【融云RongCloud】&#xff0c;了解…

六、使用注解开发

文章目录一、CRUD 注解(舍弃 mapper.xml): Select、 Insert、 Update、 Delete、 Param1、Select2、Insert3、Delete4、Update5、Param二、Lombok 插件&#xff0c;减少重复代码1、Data一、CRUD 注解(舍弃 mapper.xml): Select、 Insert、 Update、 Delete、 Param 通过注解去处…

【Netty】Netty高性能原理剖析

Netty高性能原理剖析1、前言2、Netty高性能2.1 多路复用通讯方式2.2 异步通讯 NIO2.3 零拷贝(DIRECT BUFFERS 使用堆外直接内存&#xff09;2.4 内存池(基于内存池的缓冲区重用机制&#xff09;2.5 高效的 Reactor 线程模型2.5.1 Reactor 单线程模型2.5.2 Reactor 多线程模型2.…