24.Spring练习(spring、springMVC)

news2025/1/19 14:11:24

目录  

一、Spring练习环境搭建。

(1)设置服务器启动的展示页面。

(2)创建工程步骤。

(3)applicationContext.xml配置文件。

(4)spring-mvc.xml配置文件。

(5)web.xml配置文件。

(6)jdbc.properties配置文件。

(7)log4j.properties配置文件。

二、SSM项目结构。

(1)conctroller层。

(1.1)RoleController类。 

(1.2)UserController类。

(1.3)jsp文件的部分截取参考。

(2)service层。

(2.1)RoleService接口与RoleServiceImpl类。

(2.2)UserService接口与UserService类。

(3)dao层。

(3.1)RoleDao接口与RoleDaoImpl类。

(3.2)UserDao接口与UserDaoImpl类。

(4)domain:存放POJO类。

(4.1)Role类。

(4.2) User类。

(5)utils:存放工具类。

(6)interceptor:拦截器。 

三、SpringMVC的视图解析器的前缀后缀添加规则:

四、业务功能实现步骤。


一、Spring练习环境搭建。

(1)设置服务器启动的展示页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>主页</title>
</head>
<body>
	<%
		response.sendRedirect(request.getContextPath()+"/pages/main.jsp");
	%>
</body>
</html>

(2)创建工程步骤。

IDEA项目右键->新建->新模块 ->选择Maven->选择骨架或不选->next->命名->把项目缺少的文件添加上去。

(3)applicationContext.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 http://www.springframework.org/schema/context/spring-context.xsd">
    <!--1、加载jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--2、配置数据源对象-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.Driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--3、配置JdbcTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置RoleService-->
    <bean id="roleService" class="service.impl.RoleServiceImpl">
        <property name="roleDao" ref="roleDao"/>
    </bean>
    <!--配置RoleDao-->
    <bean id="roleDao" class="dao.impl.RoleDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

    <!--配置UserService-->
    <bean id="userService" class="service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
        <property name="roleDao" ref="roleDao"/>
    </bean>
    <!--配置UserDao-->
    <bean id="userDao" class="dao.impl.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

</beans>

(4)spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
       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  http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1、mvc的注解驱动-->
    <mvc:annotation-driven/>
    <!--2、配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--3、静态资源权限开放-->
    <mvc:default-servlet-handler/>
    <!--4、组件扫描-->
    <context:component-scan base-package="controller"/>
    <!--5、拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--配置对哪些资源执行操作-->
            <mvc:mapping path="/**"/>
            <!--配置哪些资源排除拦截操作-->
            <mvc:exclude-mapping path="/user/login"/>
            <bean class="interceptor.PrivilegeInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

(5)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监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--Spring监听器的全局的初始化参数-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!--SpringMVC的前端控制器-->
    <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:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!--表示服务器启动就创建-->
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

(6)jdbc.properties配置文件。

jdbc.Driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=root

 注意:url中的 ?后面是防止乱码的方法之一。 

(7)log4j.properties配置文件。

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

二、SSM项目结构。

(1)conctroller层。

(1.1)RoleController类。 

package controller;
@Controller
@RequestMapping("/role")
public class RoleController {
    @Resource(name = "roleService")
    private RoleService roleService;

    @RequestMapping("/list")
    public ModelAndView list(){
        ModelAndView modelAndView = new ModelAndView();
        List<Role> roleList = roleService.list();
        //设置模型
        modelAndView.addObject("roleList",roleList);
        //设置视图
        modelAndView.setViewName("role-list");
        return modelAndView;
    }
    @RequestMapping("/save")
    //参数是用来接收表单数据
    public String save(Role role){
        roleService.save(role);
        return "redirect:/role/list";
    }
}

(1.2)UserController类。

package controller;
@Controller
@RequestMapping("/user")
public class UserController {
    @Resource(name = "userService")
    private UserService userService;
    @Autowired
    private RoleService roleService;

    @RequestMapping("/list")
    public ModelAndView list(){
        ModelAndView modelAndView = new ModelAndView();
        List<User> userList = userService.list();
        modelAndView.addObject("userList",userList);
        modelAndView.setViewName("user-list");
        return modelAndView;
    }
    @RequestMapping("/saveUI")
    public ModelAndView saveUI(){
        ModelAndView modelAndView = new ModelAndView();
        List<Role> roleList = roleService.list();
        modelAndView.addObject("roleService",roleList);
        modelAndView.setViewName("user-add");
        return modelAndView;
    }
    @RequestMapping("/save")
    public String save(User user,Long[] roleIds){
        userService.save(user,roleIds);
        return "redirect:/user/list";
    }
    @RequestMapping("/del/{userId}")
    //Restful风格
    public String del(@PathVariable(name = "userId") Long userId){
        userService.del(userId);
        return "redirect:/user/list";
    }
    @RequestMapping("/login")
    public String login(String username, String password, HttpSession session){
        User user = userService.login(username,password);
        if (user != null){
            //登录成功,将user存储到session
            session.setAttribute("user",user);
            return "redirect:/index.jsp";
        }
        return "redirect:/login.jsp";
    }
}

(1.3)jsp文件的部分截取参考。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<tbody>
	<c:forEach items="${roleList}" var="role">
		<tr>
			<td><input name="ids" type="checkbox"></td>
			<td>${role.id}</td>
			<td>${role.roleName}</td>
			<td>${role.roleDesc}</td>
			<td class="text-center">
			<a href="#" class="btn bg-olive btn-xs">删除</a>
		    </td>
		</tr>
	</c:forEach>
</tbody>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div class="col-md-10 data">
	<c:forEach items="${roleService}" var="role">
		<input type="checkbox" name="roleIds" value="${role.id}">${role.roleName}
	</c:forEach>
</div>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<script>
	function delUser(userId) {
		if (confirm("您确认要删除吗?")){
			location.href="${pageContext.request.contextPath}/user/del/"+userId;
		}
	}
</script>
<tbody>
	<c:forEach items="${userList}" var="user">
		<tr>
			<td><input name="ids" type="checkbox"></td>
			<td>${user.id}</td>
			<td>${user.username}</td>
			<td>${user.email}</td>
			<td>${user.phoneNum}</td>
			<td class="text-center">
				<c:forEach items="${user.roles}" var="role">
					&nbsp;${role.roleDesc}
				</c:forEach>
			</td>
			<td class="text-center">
			    <a href="javascript:void(0);" onclick="delUser('${user.id}')"  class="btn bg-olive btn-xs">删除</a>
			</td>
		</tr>
	</c:forEach>
</tbody>

(2)service层。

(2.1)RoleService接口与RoleServiceImpl类。

package service;
import domain.Role;
import java.util.List;
public interface RoleService {
    public void save(Role role);
    public List<Role> list();
}
package service.impl;
public class RoleServiceImpl implements RoleService {
    private RoleDao roleDao;
    public void setRoleDao(RoleDao roleDao) {
        this.roleDao = roleDao;
    }
    @Override
    public List<Role> list() {
        List<Role> roleList = roleDao.findAll();
        return roleList;
    }
    @Override
    public void save(Role role) {
        roleDao.save(role);
    }
}

(2.2)UserService接口与UserService类。

package service;
public interface UserService {
    public List<User> list();
    void save(User user, Long[] roleIds);
    void del(Long userId);
    User login(String username, String password);
}
package service.impl;
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    private RoleDao roleDao;
    public void setRoleDao(RoleDao roleDao) {
        this.roleDao = roleDao;
    }
    @Override
    public List<User> list() {
        List<User> userList = userDao.findAll();
        //封装userList中的每一个User的roles数据
        for (User user : userList) {
            //获得user的id
            Long id = user.getId();
            //将id作为参数,查询当前userId对应的Role集合数据
            List<Role> roles = roleDao.findRoleById(id);
            user.setRoles(roles);
        }
        return userList;
    }
    @Override
    public void save(User user, Long[] roleIds) {
        //第一步:向sys_user表中存储数据
        Long userId = userDao.save(user);
        //第二步:向sys_user_role关系表中存储数据
        userDao.saveUserRoleRel(userId,roleIds);
    }
    @Override
    public void del(Long userId) {
        //1、删除sys_user_role关系表(userId数据)
        userDao.delUserRoleRel(userId);
        //2、删除sys_user表(userId数据)
        userDao.del(userId);
    }
    @Override
    public User login(String username, String password) {
        try {
            User user = userDao.findByUsernameAndPassword(username,password);
            return user;
        }catch (EmptyResultDataAccessException e){
            //如果有这个异常,说明搜索后的结果为空
            return null;
        }
    }
}

(3)dao层。

(3.1)RoleDao接口与RoleDaoImpl类。

package dao;
public interface RoleDao {
    public void save(Role role);
    public List<Role> findAll();
    List<Role> findRoleById(Long id);
}
package dao.impl;
public class RoleDaoImpl implements RoleDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    @Override
    public List<Role> findAll() {
        List<Role> roleList = jdbcTemplate.query("select * from sys_role", new BeanPropertyRowMapper<Role>(Role.class));
        return roleList;
    }
    @Override
    public void save(Role role) {
        jdbcTemplate.update("insert into sys_role values(?,?,?)",null,role.getRoleName(),role.getRoleDesc());
    }
    @Override
    public List<Role> findRoleById(Long id) {
        //其实就是ur表的每一个roleId把r表全部查找一遍,把ur.roleId = r.id并且ur.userId = ?的结果就是满足条件的
        List<Role> roles = jdbcTemplate.query("select * from sys_user_role ur,sys_role r where ur.roleId = r.id and ur.userId = ?", new BeanPropertyRowMapper<>(Role.class), id);
        return roles;
    }
}

(3.2)UserDao接口与UserDaoImpl类。

package dao;
public interface UserDao {
    List<User> findAll();
    Long save(User user);
    void saveUserRoleRel(Long id, Long[] roleIds);
    void delUserRoleRel(Long userId);
    void del(Long userId);
    User findByUsernameAndPassword(String username, String password);
}
package dao.impl;
public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    @Override
    public List<User> findAll() {
        List<User> userList = jdbcTemplate.query("select * from sys_user",new BeanPropertyRowMapper<>(User.class));
        return userList;
    }
    @Override
    //里面有,获取数据表的主键id的方式
    public Long save(User user) {
        //创建PreparedStatementCreator
        PreparedStatementCreator creator = new PreparedStatementCreator() {
            @Override
            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
                //使用原始jdbc完成有个PreparedStatement的组件
                PreparedStatement preparedStatement = connection.prepareStatement("insert into sys_user values(?,?,?,?,?)", PreparedStatement.RETURN_GENERATED_KEYS);//PreparedStatement.RETURN_GENERATED_KEYS,就是1的意思,也可以写1
                preparedStatement.setObject(1,null);
                preparedStatement.setString(2,user.getUsername());
                preparedStatement.setString(3,user.getEmail());
                preparedStatement.setString(4,user.getPassword());
                preparedStatement.setString(5,user.getPhoneNum());
                return preparedStatement;
            }
        };
        //创建keyHolder,获取自增主键id
        GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(creator, keyHolder);
        //获取生成的主键
        long userId = keyHolder.getKey().longValue();

        //不能获取主键的方式
        //jdbcTemplate.update("insert into sys_user values(?,?,?,?,?)",null,user.getUsername(),user.getEmail(),user.getPassword(),user.getPhoneNum());
        return userId; //返回当前保存用户的id,该id是数据库自动生成的
    }
    @Override
    public void saveUserRoleRel(Long userId, Long[] roleIds) {
        for (Long roleId : roleIds) {
            jdbcTemplate.update("insert into sys_user_role values(?,?)",userId,roleId);
        }
    }
    @Override
    public void delUserRoleRel(Long userId) {
        jdbcTemplate.update("delete from sys_user_role where userId = ?",userId);
    }
    @Override
    public void del(Long userId) {
        jdbcTemplate.update("delete from sys_user where id = ?",userId);
    }
    @Override
    public User findByUsernameAndPassword(String username, String password) throws EmptyResultDataAccessException {
        User user = jdbcTemplate.queryForObject("select * from sys_user where username = ? and password = ?", new BeanPropertyRowMapper<>(User.class), username, password);
        return user;
    }
}

(4)domain:存放POJO类。

(4.1)Role类。

package domain;
public class Role {
    private Long id;
    private String roleName;
    private String roleDesc;
    public Long getId() {return id; }
    public void setId(Long id) {this.id = id; }
    public String getRoleName() { return roleName;}
    public void setRoleName(String roleName) { this.roleName = roleName;}
    public String getRoleDesc() { return roleDesc;}
    public void setRoleDesc(String roleDesc) { this.roleDesc = roleDesc;}
    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", roleName='" + roleName + '\'' +
                ", roleDesc='" + roleDesc + '\'' +
                '}';
    }
}

(4.2) User类。

package domain;
import java.util.List;
public class User {
    private Long id;
    private String username;
    private String email;
    private String password;
    private String phoneNum;
    //当前用户具备哪些角色
    private List<Role> roles;
    public List<Role> getRoles() { return roles; }
    public void setRoles(List<Role> roles) {this.roles = roles; }
    public Long getId() { return id; }
    public void setId(Long id) {  this.id = id; }
    public String getUsername() {  return username;  }
    public void setUsername(String username) {  this.username = username;  }
    public String getEmail() { return email;  }
    public void setEmail(String email) {  this.email = email; }
    public String getPassword() {  return password; }
    public void setPassword(String password) {  this.password = password; }
    public String getPhoneNum() { return phoneNum; }
    public void setPhoneNum(String phoneNum) {  this.phoneNum = phoneNum; }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                '}';
    }

}

(5)utils:存放工具类。

(6)interceptor:拦截器。 

package interceptor;
public class PrivilegeInterceptor implements HandlerInterceptor {
    //这里不需要重写三个,因为只需要用到一个,不用到(不写操作的方法)的就不重写
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //逻辑:判断用户是否登录,本质:判断session中有没有user
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user == null){
            //没有登录,重定向和转发都可以
            //request.getRequestDispatcher("/login.jsp").forward(request,response);//可以返回true
            response.sendRedirect(request.getContextPath()+"/login.jsp");//重定向后不能返回true
            return false;
        }
        return true;//放行,访问目标资源
    }
}

三、SpringMVC的视图解析器的前缀后缀添加规则:

@RequestMapping("/quick")
    public String quick(){
         * 总结:forward: 或 redirect:
         * 如果加了上面中的一个,那么视图解析器配置的 前缀后缀将不在添加
        //1. 文.件[/pages/quick.html.jsp] 未找到
        return "quick.html";
        //2. 文.件[/pages/quick.html.jsp] 未找到
        return "/quick.html";
        //3.文.件[/pages/aside.jsp.jsp] 未找到
        return "aside.jsp";
        //4.访问失败,服务器崩溃!!!,因为少加了“/"
        return "forward:quick.html";
        //5.成功访问/quick.html,不会添加前缀与后缀
        return "forward:/quick.html";
        //6.访问失败,缺少“/”,服务器收不到请求(估计定向到其他地方了(不存在的路径))
        return "redirect:quick.html";
        //7.成功访问,/quick.html,不会添加前缀与后缀
        return "redirect:/quick.html";
        //8./quick.html,
        return "redirect:/quick.jsp";
        //9.成功访问https://www.baidu.com,不会添加前缀与后缀
        return "redirect:https://www.baidu.com";
    }

总结:字符串的最前面有forward: redirect:,那么就不会添加前缀和后缀。

四、业务功能实现步骤。

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

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

相关文章

新建论文三线表模板,一键格式刷

论文三线表模板 写在最前面①表设计&#xff0c;新建表格样式②三线表上下线③三线表标题线④设置表格居中⑤设置表头格式容易出错的步骤 写在最前面 论文写完啦&#xff0c;准备调整格式 之前建模也是三线表&#xff0c;但只能基于该文档模板&#xff0c;所以重新设置一下。 …

linux speedtest-cli工具测试网络带宽、测试网速(下载速度、上传速度和延迟等信息)

speedtest-cli是一个命令行工具&#xff0c;用于测试网络的带宽。它可以在Linux、macOS和Windows等操作系统上运行。下面是使用speedtest-cli测试网络带宽的步骤&#xff1a; 安装speedtest-cli。在Linux系统上&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get in…

cookies 和 Session

并且注意 meta complete改为“false”,不然不支持Servlet注解 Session会话 会话&#xff1a;用户打开一个浏览器&#xff0c;点击了很多超链接&#xff0c;访问了 有状态会话&#xff1a;一个同学曾今来过教室&#xff0c;下次再来教室&#xff0c;我们会知道这个同学&#…

verdaccio搭建npm私服

1 安装依赖 npm install verdaccio -g开机自启 npm install pm2 -g2启动服务 pm2 start verdaccio 进入页面 http://localhost:4873/ 其他 修改 config.yaml 源为淘宝源 uplinks:npmjs:url: https://registry.npm.taobao.org/

【花雕学AI】真是太多了:汇总国内免费在线使用ChatGPT的完整镜像站列表大全(1000+)

一、ChatGPT为什么火爆&#xff1f; 它是一个可以和你聊天的人工智能程序&#xff0c;它可以用文字回答你的问题&#xff0c;也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的&#xff0c;它使用了一种叫做GPT的技术&#xff0c;这种技术可…

[Android+JetPack] (Java实现) Retrofit2+RxJava3+Paging3+RecyclerView 实现加载网络数据例子 记录

文章目录 前言参考链接依赖库及版本Demo效果接口及数据展示各项模块Retrofit2Bean,对应上面的接口返回.Service API部分 Paging3PagingSource以及 RxPagingSourcePagingDataAdapter 适配器ViewModelPublicInfoPage /Activity 最后 前言 继续安卓学习之旅,本章的主要目标是: 1.完…

2023年mathorcup杯A题代码小技巧总结

写篇杂文&#xff0c;不属于我的任何一个栏目&#xff0c;没啥案例含义&#xff0c;主要是记录一下mathorcup杯期间写的代码技巧。 mathorcup杯大部分都是组合优化问题&#xff0c;这让我擅长的机器学习都深度学习毫无作用....... 还好这个A题是可以遍历求所有解的&#xff0c…

SAP MDG —— 使用DIF导入物料主数据 Part4 开发篇

文章目录 通过CSV文件创建物料主数据的一些建议在DIF中使用CSV文件文件转换器类型BAdIBAdI 示例代码测试 DIF全篇总结 通过CSV文件创建物料主数据的一些建议 在Staging Area中创建/修改小批量的物料主数据&#xff0c;推荐使用标准文件上载功能&#xff08;USMD_FILE_UPLOAD&am…

计算机基础--Redis

参考文献 https://zhuanlan.zhihu.com/p/599663544 基础知识 1. Redis的数据类型及使用场景 Redis支持五种数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08;列表&#xff09;&#xff…

使用assembly插件对boot项目打zip和war部署包

目录 一、maven-assembly-plugin插件的简单使用 1、什么是assembly&#xff1f; 2. 常见的maven插件 3、如何使用&#xff1f; 二、如何通过assembly打不同的包 三、boot项目如何转成war包部署 背景&#xff1a;之前项目上已经使用了assembly对多个boot项目分别打zip包且…

MATLAB应用笔记

其他 1、NaN值 MATLAB判断数据是否为NaN可以直接使用函数&#xff1a;isnan() 三、数据分析 1、相关性 均值、方差、协方差、标准差、相关系数 mean() %均值 nanmean()%去除NAN值求均值 var() %方差 cov() %协方差 std() %标准差 corrcoef(B,b) %R 相关系数plot()…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本&#xff08;如果有&#xff0c;可选&#xff0c;非必须&#xff09;3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

部署环境从docker swarm迁移到k8s后kie-server的发布方式变化(二)

正如后来的考虑, 如果外接maven私库照理说是ok的, 这样去掉volume的设计整个流程更加的自动化标准化. 开搞 第一步先部署一个nexus yaml文件如下: apiVersion: v1 kind: Namespace metadata:name: nexus---apiVersion: v1 kind: Service metadata:labels:k8s-app: nexusname…

【数据结构与算法】八大排序

[数据结构与算法]八大排序 数据结构与算法-八大排序排序的概念及其应用排序的概念排序的应用 常见的排序算法实现常见的排序算法插入排序直接插入排序希尔排序(缩小增量排序)希尔排序的时间复杂度希尔排序对插入排序的优化效果 选择排序直接选择排序堆排序向上调整建堆&#xf…

【C语言】从n个字符串中匹配查找abc字符串个数

目录 前言知识点重温1、scanf和scanf_s区别2、指针3、char、char*使用查找字符串收尾前言 这是小5聊的《C语言知识点例子》系列的第四篇文章。 在软件行业已经有快十年,技术虽然一般般,但是足够应付和解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自…

数据库基础篇 《1. 概述》

目录 1. 为什么要使用数据库 2. 数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据库管理系统的关系 2.3 常见的数据库管理系统排名(DBMS) 2.4 常见的数据库介绍 3. MySQL介绍 3.1 概述 3.2 MySQL发展史重大事件 4. RDBMS 与 非RDBMS 4.1 关系型数据库…

Delphi Web Server 流程分析

通过向导 "Web Server Application" (选择 "Stand-alone GUI Application") 创建一个 WebServer Demo。 主单元代码: ...... private FServer: TIdHTTPWebBrokerBridge; procedure StartServer; ............. Delphi的网络组件是基于INDY的&a…

项目四:无极调光台灯

项目四&#xff1a;无极调光台灯 文章目录 项目四&#xff1a;无极调光台灯一、导入(5分钟&#xff09;学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(5分钟)4.图形化块介绍(10分钟)5.单个模块的简单使用(10分钟)6.无极调光台灯编程逻辑…

SQLServer的内存管理架构

内存管理架构说明 一、Windows的虚拟内存管理器二、SQL Server 内存体系结构2.1、传统&#xff08;虚拟&#xff09;内存2.2、地址窗口扩展 &#xff08;AWE&#xff09; 内存 三、从 SQL Server 2012 &#xff08;11.x&#xff09; 开始发生的改变3.1、对内存管理的更改3.2、对…

【网络原理】TCP/IP协议

目录 1.应用层 2.传输层&#xff08;核心问题&#xff09; 2.1 UDP协议 2.1.2 UDP的特点 2.1.3 基于UDP的应用层协议 2.2 TCP协议&#xff08;重点内容&#xff09; 2.2.1 TCP/IP 协议含义 2.2.2 TCP协议端格式&#xff1a; 2.2.3 TCP的特点 2.3 TCP原理 2.4 确认应…