SSM框架整合之单表操作

news2025/1/22 15:00:15

1、Spring和Spring MVC父子容器 

概念介绍
1.在Spring与SpringMVC进行整合的时候,一般情况下我们会使用不同的配置文件来配置Spring和SpringMVC,因此我们的应用中会存在至少2个ApplicationContext的实例,由于是在Web应用中,因此最终实例化的是ApplicationContext的子接口 WebApplicationContext。

2.ServletWebApplicationContextRoot WebApplicationContext其中:

  • Servlet WebApplicationContext:这是对12E三层架构中的web层进行配置,如控制器(controller),视图解析器(view resolvers)等相关的bean。通过springmvc中提供的DispatchServlet来加载配置,通常情况下,配置文件的名称为springmvc.xml。
  • Root WebApplicationConte:这是对J2EE三层架构中的service层、dao层进行配置,如业务bean,数据源(DataSource)等。通常情况下,配置文件的名称为applicationContext.xml。在web应用中,其一般通过ContextLoaderListener来加载。
<?xm1 version="1.0"encoding="uTF-8"?>
<web-appversion="2.4"
xm1ns="http://java.sun.com/xm1/ns/j2ee"
xm1ns:xsi=“http://www.w3.ora/2001/XMLschema-instance"
xs1:schemaLocation="http://iava.sun.com/xm1/ns/i2eehttp://iava.sun.com/xm1/ns/i2ee/web
app_2_4.xsd">

3.同时通过两个容器同时来管理所有的类

会在两个父子IOC容器中生成大量的相同bean,这就会造成内存资源的浪费。

一般正常的操作:

@RequestMapping一般会和@Controller搭配使用。为了防止重复注册bean,建议在springMVC.xml配置文件中只扫描含有Controller bean的包,其它的共用bean的注册定义到applicationContext.xml文件中。

applicationContext.xml

<!--扫播的是com.hp包,但是不扫描contro1ler的注解。--><context:component-scan base-package=com.hp">
<context:exc1ude-filter type="annotation”expression="org.springframework.stereotype.contro1ler"/></contextcomponent-scan>

springMVC.xml

<!--扫描的是com.hp包,但是只扫描contro1ler的注解。-->
<context:component-scan base-package="com.hp”use-default-filters="false">
<context:inc1ude-filter type="annotation”expression="org.springframework.stereotypeContro1ler"/></context:component-scan>

2、项目实例

辅助编程:Navicat、phpstudy_pro、IDEA2020.2.2、TomCat

技术框架:MySQL8.0、Spring、SpringMVC、MyBatis

1.项目架构和相关jar包;

 2.创建t_user和goods表

drop database if exists mydb;
create database mydb;
use mydb;
#创建表
create table t_user (
  uid int(11) primary key not null AUTO_INCREMENT,
  username varchar(20),
  password varchar(20),
  birthday varchar(20),
  phone varchar(11),
  address varchar(50)
);
#插入数据
insert into t_user values (1, '张三','111','2022-05-03', '13865430001', '北京');
insert into t_user values (2, '李四','222','2022-05-19', '13598765002', '广州');
insert into t_user values (3, '小红','333','2022-05-19', '15964598003', '郑州');
insert into t_user values (4, '小美','444','2022-05-20', '15765482006', '郑州');

select * from t_user;
#判断删除
drop table if exists goods;
#创建商品信息表
create table goods(
gid int primary key auto_increment,
	gname varchar(20),
	price double,
	stock int,
	supplier varchar(50)
);
#插入数据
insert into goods values(1,'泡面',3.5,50,'康师傅');
insert into goods values(2,'牛奶',5.5,60,'蒙牛');
insert into goods values(3,'瓜子',6.5,30,'金鸽');


select * from goods;

 3.,创建Module命名为ssm01,成为Web项目,并部署到tomcat服务器中测试项目是否能够正常加载并访问首页

bean包中的实体类分别根据数据库的表名和表的字段名创建,alt+insert快捷键增加setter和getter方法以及toString方法;

注意:属性名全部小写,int和double类型使用封装类Integer和Double,private修饰符修饰

 

4.创建SSM框架对应的配置文件,三层架构Controller、service、dao

springmvc.xml配置

  1. 扫描 controller
  2. 配置视图解析器;
  3. 静态资源不拦截;
  4. 开启注解驱动支持(自动配置映射器和适配器);
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       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
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--1.扫描控制器,把控制器对象交给springMVC的IOC统一管理-->
    <context:component-scan base-package="com.zhan.controller"/>
    <!--2.配置视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--3.静态资源不拦截-->
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/fonts/**" location="/fonts/" />
    <mvc:resources mapping="/img/**" location="/img/"/>
    <!--配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean id="myInterceptor" class="com.zhan.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    <!--4.开启注解驱动支持:默认配置 映射器 和 适配器-->
    <mvc:annotation-driven/>
</beans>

 spring.xml配置

  1. 管理除了 controller 外所有的类;
  2. 配置数据源(数据库连接参数);
  3. 配置SqlSessionFactoryBean,自动获得数据库连接并得到代理对象;
  4. 配置扫描器,告诉 mybatis 要创建哪些接口的代理对象;
<?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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--1.让spring框架管理com.chen包中所有的对象,但是排除使用了Controller注解的类-->
    <context:component-scan base-package="com.zhan">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--2.让sprin框架的jdbc管理数据库的连接-->
    <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/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    <!--3.配置SqlSessionFactoryBean,把SqlSessionFactory对象交给IOC管理,他会自动创建
    sqlSession对象,会根据mapper接口再创建代理对象-->
    <bean id="factoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis.xml"/>
    </bean>
    <!--4.配置扫描器,扫描mapper文件,让mybatis知道要创建什么接口的实现类-->
    <bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zhan.dao"/>
    </bean>
</beans>

mybatis.xml配置

自身的一些配置,当前阶段为空

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    <settings>-->
<!--        <setting name="logImpl" value="log4j"/>-->
<!--    </settings>-->
</configuration>

配置web项目的核心配置文件web.xml  

1. 配置监听器,检测 servlet 容器创建的时候加载 spring.xml 配置文件 ;
2. 配置核心控制器 DispatcherServlet ,创建的时候加载 springmvc.xml 配置文件;
3. 配置字符集过滤器,设置中文编码;
<?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">
    <!--1.配置监听器,检测servlet容器创建的时候加载 spring.xml-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>
    <!--2.配置核心控制器DispatcherServlet,创建的时候加载 springmvc.xml-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--3.配置字符集过滤器,设置中文编码-->
    <filter>
        <filter-name>encodingFilter</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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

5.登录页面的实现

 index.jsp首页点击超链接去到登录页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
  <h2>欢迎来到项目首页!</h2>
  <h3><a href="login.jsp">去登录</a></h3>
  </body>
</html>

 

login.jsp页面输入用户名和密码,正确跳转到主页,错误跳转到错误页;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页</title>
</head>
<body>
<h2>登录页</h2>
<form action="login" method="post">
    帐号:<input type="text" name="username" value="" /> <br/>
    密码:<input type="password" name="password" value="" /> <br/>
    <input type="submit" value="登录" /> <br/>
</form>
</body>
</html>

 zhuye.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>项目主页</title>
</head>
<h2>欢迎${user.username}来到主页</h2>
<h3><a href="addGoods.jsp">添加商品</a></h3>
<body>
<table>
    <thead>
    <tr>
        <th>编号</th>
        <th>商品</th>
        <th>价格</th>
        <th>库存</th>
        <th>品牌</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.gid}</td>
            <td>${goods.gname}</td>
            <td>${goods.price}</td>
            <td>${goods.stock}</td>
            <td>${goods.supplier}</td>
            <td>
                <a href="delGoods?gid=${goods.gid}">删除</a>
                <a href="findByGid?gid=${goods.gid}">修改</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
</table>
</body>
</html>
请求发生后,自动进行数据绑定,拿到用户提交的用户名和密码执行数据的查询,获得数据中该用
户的信息;
如果信息为空说明登录失败;否则表示登录成功;然后请求查询所有的商品信息;
控制层
@Controller
@SessionAttributes({"user"})
public class UserController {
    @Autowired
    UserService userService;

    @RequestMapping("/login")
    public ModelAndView login(User user){
        //System.out.println("UserController......login");
        ModelAndView mv = new ModelAndView();
        User login = userService.login(user);
        System.out.println(login);
        if(login!=null){
            mv.addObject("user",login);
            mv.setViewName("redirect:/findAll");
        }else{
            mv.addObject("error","用户名或密码错误!");
            mv.setViewName("error");
        }
        return mv;
    }
}

业务层

public interface UserService {
    User login(User user);
}
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserDao userDao;

    @Override
    public User login(User user) {
        return userDao.selectForLogin(user);
    }
}

持久层

@Repository
public interface UserDao {
    @Select("select * from t_user where username=#{username} and password=#{password}")
    User selectForLogin(User user);
}

2.实现商品信息的增删改查

增:当点击保存的时候请求 saveGoods ,且传递表单录入的数据,控制器对应的请求处理方法获得商品信息执行数据库的添加操作;

删:点击主页的删除按钮,请求 delGoods 同时携带商品的编号; 在控制器对应的方法中执行请求处理,并根据获取到的商品编号执行数据库 的删除操作;
改:修改功能分为两步:
1.点击修改按钮执行的是根据id的查询,查询该信息然后在页面中做数据的回显;
2.在数据展示页面的表单中根据需要修改完数据后提交执行数据库的更新操作;
点击主页的修改按钮,请求 findByGid 同时携带商品的编号;
在控制器对应的方法中执行请求处理,并根据获取到的商品编号执行数据库的查询操作;
当点击修改按钮时执行数据更新操作
模糊查询
addGoods.jsp添加页面 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加页</title>
</head>
<body>
<h2>商品信息添加</h2>
<form action="saveGoods" method="post">
    商品:<input type="text" name="goodsName" value="" /> <br/>
    价格:<input type="number" step="0.01" name="price" value="" /> <br/>
    库存:<input type="number" name="stock" value="" /> <br/>
    供货商:<input type="text" name="supplier" value="" /> <br/>
    <input type="submit" value="保存" /> <br/>
</form>
</body>
</html>

  

showGoods.jsp修改页面;使用EL表达式把数据显示在表单元素中;由于修改时需要根据id进行修改,所以在数据展示页面的表单中需要显式id且设置为只读状态;

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改页</title>
</head>
<body>
<h2>商品信息修改</h2>
<form class="form-horizontal" action="updateGoods" method="post">
    编号:<input type="text" name="goodsId" value="${goods.goodsId}" readonly="readonly"> <br/>
    商品:<input type="text" name="goodsName" value="${goods.goodsName}"><br/>
    价格:<input type="number" step="0.01" name="price" value="${goods.price}"> <br/>
    库存:<input type="number" name="stock" value="${goods.stock}"> <br/>
    供货商:<input type="text" name="supplier" value="${goods.supplier}"><br/>
    <input type="submit" value="修改">
</form>
</body>
</html>

  

控制层

package com.zhan.controller;

import com.zhan.bean.Goods;
import com.zhan.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@SessionAttributes({"goodsList"})
public class GoodsController {
    @Autowired
    GoodsService goodsService;

    @RequestMapping("/findAll")
    public ModelAndView findAll(){
        ModelAndView mv=new ModelAndView();
        List<Goods> goodsList = goodsService.findAll();
        mv.addObject("goodsList",goodsList);
        mv.setViewName("zhuye");

        return mv;
    }

    @RequestMapping("/delGoods")
    public ModelAndView delGoods(int gid){
        ModelAndView mv=new ModelAndView();
        int n = goodsService.delGoods(gid);
        if(n>0){
            //继续查询数据,跳转主页
            mv.setViewName("redirect:/findAll");
        } else{
            mv.addObject("error","删除出错了!");
            mv.setViewName("error"); //经过视图解析器,去指定位置 找到指定后缀的页面
        }
        return mv;
    }

    @RequestMapping("/addGoods")
    public ModelAndView addGoods(Goods goods){
        ModelAndView mv=new ModelAndView();
        int n = goodsService.addGoods(goods);
        if(n>0){
            //重新获取一次最新的数据,跳转到主页
            mv.setViewName("redirect:/findAll");
        } else{
            mv.addObject("error","添加出错了!");
            mv.setViewName("error");
        }
        return mv;
    }

    @RequestMapping("/findById")
    public ModelAndView findById(int gid){
        ModelAndView mv=new ModelAndView();
        Goods goods = goodsService.findById(gid);
        //把数据发送到页面中做展示---数据回显
        mv.addObject("goods",goods); //request域
        mv.setViewName("showGoods"); //请求转发
        return mv;
    }

    @RequestMapping("/updateGoods")
    public ModelAndView updateGoods(Goods goods){
        ModelAndView mv=new ModelAndView();
        int n = goodsService.updateGoods(goods);
        if(n>0){
            //重新获取一次最新的数据,跳转到主页
            mv.setViewName("redirect:/findAll");
        } else{
            mv.addObject("error","修改出错了!");
            mv.setViewName("error");
        }
        return mv;
    }

    @RequestMapping("/seach")
    public ModelAndView seach(String gname){
        ModelAndView mv=new ModelAndView();
        List<Goods> goodsList = goodsService.findByGname(gname);
        mv.addObject("goodsList",goodsList);
        mv.setViewName("zhuye");
        return mv;
    }
}

业务层

public interface GoodsService {
    List<Goods> findAll();
    Goods findById(int gid);
    List<Goods> findByGname(String gname);
    int delGoods(int gid);
    int addGoods(Goods goods);
    int updateGoods(Goods goods);
}
package com.zhan.service.impl;

import com.zhan.bean.Goods;
import com.zhan.dao.GoodsDao;
import com.zhan.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class GoodsServiceImpl implements GoodsService {
    @Autowired
    GoodsDao goodsDao;
    @Override
    public List<Goods> findAll() {
        return goodsDao.selectAll();
    }

    @Override
    public Goods findById(int gid) {
        return goodsDao.selectById(gid);
    }

    @Override
    public List<Goods> findByGname(String gname) {
        return goodsDao.selectByGname(gname);
    }

    @Override
    public int delGoods(int gid) {
        return goodsDao.delete(gid);
    }

    @Override
    public int addGoods(Goods goods) {
        return goodsDao.insert(goods);
    }

    @Override
    public int updateGoods(Goods goods) {
        return goodsDao.update(goods);
    }
}

持久层

package com.zhan.dao;
import com.zhan.bean.Goods;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
public interface GoodsDao {
    @Select("select * from goods")
    List<Goods> selectAll();

    @Select("select * from goods where gid=#{gid}")
    Goods selectById(int gid);

    @Select("select * from goods where gname like concat('%',#{gname},'%')")
    List<Goods> selectByGname(String gname);

    @Delete("delete from goods where gid=#{gid}")
    int delete(int gid);

    @Insert("insert into goods(gname,price,stock,supplier) values(#{gname},#{price},#{stock},#{supplier})")
    int insert(Goods goods);

    @Update("update goods set gname=#{gname} , price=#{price} ,stock=#{stock} ,supplier=#{supplier} where gid=#{gid}")
    int update(Goods goods);
}

登录拦截

判断是否为登录请求,是的话放行,否则继续判断session中是否用用户信息,有表示已登录放行,没有则拦截并强制跳转到登录页

public class MyInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String path = request.getServletPath();
        //判断是否为登录请求,是的话放行,否则继续判断session中是否用用户信息,有表示已登录放行,没有则拦截并强制跳转到登录页
        if (path.equals("/login")) {
            return true;
        } else {
            User user = (User) request.getSession().getAttribute("user");
            if (user != null) {
                return true;
            } else {
                response.sendRedirect("login.jsp");
                return false;
            }
        }
    }
}

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

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

相关文章

基于Html+Css的图片展示26

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

AlgoC++第五课:基于矩阵的算法实现

目录 基于矩阵的算法实现前言1. 矩阵2. 矩阵求导推导3. 矩阵示例代码3.1 Matrix.hpp3.2 Matrix.cpp3.3 main.cpp3.4 拓展-cblas_sgemm3.5 拓展-LU分解 4. 多元线性回归5. 多元逻辑回归6. 最小二乘法7. 岭回归(L2)8. 多元牛顿法9. 高斯牛顿法10. Levenberg-Marquardt(修正牛顿法…

[Platforimio] LVGL +TFT_eSPI实现触摸功能

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; 本人持续分享更多关于电子通信专业内容以及嵌入式和单片机的知识&#xff0c;如果大家喜欢&#xff0c;别忘点个赞加个关注哦&#xff0c;让我们一起共同进步~ &#x…

Centos下环境变量

文章内容如下&#xff1a; 1&#xff09;什么是环境变量&#xff1b; 2&#xff09;如何通过程序获取环境变量&#xff1b; 3) 常识规律 一。环境变量的定义 环境变量就是指一段路径。 定义环境变量主要是为了方便的执行程序。添加环境变量的方法是export PATH$PATH:/A/B&…

医用IT隔离电源在医院特殊场所接地系统的应用

【摘要】我们国家大部分医院的临床救治和确诊都是利用了医疗电气类设备和医用的医疗仪器&#xff0c;因此这些地方的接地问题应该引起我们的高度的重视。IT系统主要是利用了中性点没有直接接地的方式&#xff0c;所以可以减少电压和电流&#xff0c;从而使人类触电的可能性小之…

搭建Serv-U FTP服务器共享文件外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章&#xff1a;使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

Midjourney教程(三)——Prompt常用参数

Midjourney教程——Prompt常用参数 为了提升prompt的准确度与输入效率&#xff0c;让midjourney能够生成我们理想中的图片&#xff0c;我们需要学习一下prompt的常用参数 Version version版本号&#xff0c;midjourney支持多种模型&#xff0c;我们可以通过version参数来选择…

字典树(Trie/前缀树)

目录 字典树的概念 字典树的逻辑 字典树的实现 字典树小结 例题强化 字典树的概念 字典树&#xff08;Trie&#xff09;是一种空间换时间的数据结构&#xff0c;是一棵关于“字典”的树&#xff0c;主要用于统计、排序和保存大量的字符串。字典树是通过利用字符串的公共前…

广域通信网 - 流量控制(停等协议、滑动窗口协议)

文章目录 1 概述2 流量控制协议2.1 停等协议2.2 滑动窗口协议 1 概述 #mermaid-svg-c9cNIYsOvLpoO4AV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-c9cNIYsOvLpoO4AV .error-icon{fill:#552222;}#mermaid-svg-c9c…

[MLIR] CodeGen Pipeline总结

参考资料&#xff1a; [MLIR] CodeGen Pipeline总结 - 知乎 (zhihu.com) 本文主要以 tensorflow 为例&#xff0c;介绍了其接入 MLIR 后的 CodeGen 过程&#xff0c;以及简要分析了一些现在常用的 CodeGen pipeline。本文是本人在结合博客(Codegen Dialect Overview - MLIR - L…

隐私计算,联邦学习

隐私计算&#xff08;“隐私保护计算” Privacy-Preserving Computation&#xff09; 隐私计算是一类技术方案&#xff0c;在处理和分析计算数据的过程中能保持数据不透明、不泄露、无法被计算方法以及其他非授权方获取。 数据方是指为执行隐私保护计算过程提供数据的组织或个…

泰国五一游玩儿攻略

泰国五一游玩儿攻略 2023年4月27日1. 机场2. 酒店和夜市 2023年4月28日2023年4月29日2023年4月30日2023年5月1日2023年5月2日2023年5月3日 2023年4月27日 1. 机场 1.1 海关资料准备&#xff1a; 往返机票&#xff08;去程返程都得有&#xff0c;每人单独打印自己的&#xff0…

多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多变量时间序列预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环…

开放式耳机有什么好处,分享几款高畅销的开放式耳机

开放式耳机是一种声音传导方式&#xff0c;主要通过颅骨、骨骼把声波传递到内耳&#xff0c;属于非入耳式的佩戴方式。相比传统入耳式耳机&#xff0c;开放式耳机不会堵塞耳道&#xff0c;使用时可以开放双耳&#xff0c;不影响与他人的正常交流。开放式耳机不会对耳朵产生任何…

RocketMQ整合代码

RocketMQ整合代码 一 构建Java基础环境 在maven项⽬中构建出RocketMQ消息示例的基础环境&#xff0c;即创建⽣产者程序和消费者程序。通过⽣产者和消费者了解RocketMQ操作消息的原⽣API 引⼊依赖 <dependencies><dependency><groupId>org.apache.rocketmq&…

HCIP——交换(更新中)

园区网架构 交换机实现了以下功能 无限的传输距离——识别&#xff0c;重写电信号&#xff08;帧&#xff09;保证信息完整彻底解决了冲突二层单播——MAC地址表提高端口密度 MAC 单播地址&#xff1a;MAC地址第一个字节第8位为0 组播地址&#xff1a;MAC地址第一个字节第8位…

我完全手写的Resnet50网络,终于把猫识别出来了

大家好啊&#xff0c;我是董董灿。 经常看我文章的同学&#xff0c;可能知道最近我在做一个小项目——《从零手写Resnet50实战》。 从零开始&#xff0c;用最简单的程序语言&#xff0c;不借用任何第三方库&#xff0c;完成Resnet50的所有算法实现和网络结构搭建&#xff0c;…

SOS大规模敏捷开发项目管理完整版(Scrum of Scrums)

Scrum of Scrums是轻量化的规模化敏捷管理模式&#xff0c;Leangoo领歌可以完美支持Scrum of Scrums多团队敏捷管理。 Scrum of Scrums的场景 Scrum of Scrums是指多个敏捷团队共同开发一个大型产品、项目或解决方案。Leangoo提供了多团队场景下的产品路线图规划、需求管理、…

2023首场亚马逊云科技行业峰会,医疗与生命科学年度盛会精彩先行

从实验室扩展到真实世界&#xff0c;从前沿技术探索到医疗生命科学行业的快速创新实践&#xff0c;亚马逊云科技不断地通过数字化助力医疗和生命科学的行业创新。由上海徐汇区科委指导&#xff0c;上海枫林集团作为支持单位&#xff0c;亚马逊云科技主办的2023亚马逊云科技医疗…

如何评估小程序开发费用:从项目规模到技术需求

作为一种越来越受欢迎的移动应用&#xff0c;小程序的开发费用是许多企业和个人考虑的重要因素之一。但是&#xff0c;要确定小程序开发费用并不是一件容易的事情&#xff0c;因为它涉及到多个因素&#xff0c;从项目规模到技术需求。 项目规模 小程序开发的费用通常与项目规…