SSM 整合使用

文章源码

搭建整合环境

整合说明

SSM 整合可以使用多种方式,但是选择 XML + 注解 的方式最为合适。

整合思路

  • 搭建整合环境
  • Spring 环境搭建并测试
  • Spring 整合 SpringMVC 并测试
  • Spring 整合 MyBatis 并测试

创建 Maven 工程

使用到工程的聚合和拆分的概念。

使用 IDEA 新建一个 Maven 工程,选择 maven-archetype-webapp

  • 在 项目 的 pom.xml 文件中引入坐标依赖

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.1.20.RELEASE</spring.version>
    <mybatis.version>3.5.6</mybatis.version>
    <mysql.version>5.1.48</mysql.version>
    <junit.version>4.12</junit.version>
    <jsckson.version>2.10.5</jsckson.version>
    </properties> <dependencies> <!-- Spring start-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <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.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.14</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    <!-- Spring end--> <!-- MyBatis end-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.3</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
    </dependency>
    <dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
    </dependency>
    <!-- MyBatis end--> <!-- Test end-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <!-- Test end--> <!-- Common end-->
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jsckson.version}</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jsckson.version}</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jsckson.version}</version>
    </dependency>
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
    </dependency>
    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
    </dependency>
    <dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.18.1</version>
    </dependency>
    <dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.18.1</version>
    </dependency>
    <!-- Common end--> </dependencies>

选中项目,点击右键,选择 Add FrameWorks Support,添加上 SpringMVC 支持。会自动创建 src/main/webapp/WEB-INF/applicationContext.xmlsrc/main/webapp/WEB-INF/dispatcher-servlet.xml 文件,前者是 Spring 配置文件,后者是 SpringMVC 配置文件。

创建数据库和表结构

src/main/resources/ssm.sql

drop database if exists ssm;

create database ssm;
use ssm; # --- drop table if exists `user`; create table `user`(
`id` int(11) primary key auto_increment,
`username` varchar(30) not null comment '用户名',
`password` varchar(30) not null comment '密码'
) engine=InnoDB default charset=utf8; insert into user(username, password) VALUES
('admin', 'admin11002244'), ('parzulpan', '12345678'); # ----

编写实体类

src/main/java/cn/parzulpan/domain/User.java

package cn.parzulpan.domain;

import java.io.Serializable;

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc : 用户实体类
*/ public class User implements Serializable {
private Integer id;
private String username;
private String password; // getter setter toString
}

编写 dao 接口和实现类

src/main/java/cn/parzulpan/dao/UserDAO.java

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc : 用户持久层接口
*/ public interface UserDAO {
/**
* 查询所有用户信息
* @return
*/
public List<User> findAll(); /**
* 根据 Id 查询用户信息
* @param id
* @return
*/
public User findById(Integer id); /**
* 根据 用户名 查询用户信息
* @param username
* @return
*/
public User findByName(String username); /**
* 保存用户
* @param user
*/
public void save(User user);
}

src/main/java/cn/parzulpan/dao/impl/UserDAOImpl.java

// 后面整合 MyBatis 后直接使用注解开发,这个文件将弃用删除

@Repository("userDAO")
public class UserDAOImpl implements UserDAO {
@Override
public List<User> findAll() {
System.out.println("用户持久层:查询所有用户信息");
return null;
} @Override
public User findById(Integer id) {
System.out.println("用户持久层:根据 Id 查询用户信息");
return null;
} @Override
public User findByName(String username) {
System.out.println("用户持久层:根据 用户名 查询用户信息");
return null;
} @Override
public void save(User user) {
System.out.println("用户持久层:保存用户"); }
}

编写 service 接口和实现类

src/main/java/cn/parzulpan/service/UserService.java

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc : 用户业务层接口
*/ public interface UserService { /**
* 查询所有用户信息
* @return
*/
public List<User> findAllUser(); /**
* 根据 Id 查询用户信息
* @param id
* @return
*/
public User findUserById(Integer id); /**
* 根据 用户名 查询用户信息
* @param username
* @return
*/
public User findUserByName(String username); /**
* 保存用户
* @param user
*/
public void saveUser(User user);
}

src/main/java/cn/parzulpan/service/impl/UserServiceImpl.java

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc : 用户业务层接口的实现类
*/ @Service("userService")
public class UserServiceImpl implements UserService { @Autowired
private UserDAO userDAO; @Override
public List<User> findAllUser() {
System.out.println("用户业务层:查询所有用户信息");
return userDAO.findAll();
} @Override
public User findUserById(Integer id) {
System.out.println("用户业务层:根据 Id 查询用户信息");
return userDAO.findById(id);
} @Override
public User findUserByName(String username) {
System.out.println("用户业务层:根据 用户名 查询用户信息");
return userDAO.findByName(username);
} @Override
public void saveUser(User user) {
System.out.println("用户业务层:保存用户");
userDAO.save(user);
}
}

Spring 代码的编写

编写 Spring 配置文件

src/main/webapp/WEB-INF/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"
xmlns:aop="http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- Spring 配置 Start -->
<!-- 开启注解扫描,只扫描 service 和 dao 层,忽略 web 层 -->
<context:component-scan base-package="cn.parzulpan">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan> <!-- Spring 配置 End --> </beans>

测试 Spring 环境

src/test/java/cn/parzulpan/service/impl/UserServiceImplTest.java

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc : 对 用户业务层接口的实现类 进行单元测试
*/ @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/applicationContext.xml"})
public class UserServiceImplTest { @Autowired
private UserService us; @Test
public void findAllUser() {
List<User> users = us.findAllUser();
} @Test
public void findUserById() {
User user = us.findUserById(1);
} @Test
public void findUserByName() {
User user = us.findUserByName("admin");
} @Test
public void saveUser() {
us.saveUser(new User(null, "test", "test1234"));
}
}

Spring 整合 Spring MVC

  • 在 web.xml 中配置 DispatcherServlet 前端控制器

  • 在 web.xml 中配置 DispatcherServlet 过滤器 解决中文乱码

  • 在 web.xml 中配置 ContextLoaderListener 监听器 为了在controller 中能成功的调用 service 对象中的方法

    <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
    <display-name>Archetype Created Web Application</display-name> <!-- 配置Spring的监听器 Start -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 通过监听器,读取 Spring 的配置文件 -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <!-- 配置Spring的监听器 End --> <!-- 配置 app 分派器(前端控制器)Start -->
    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置初始化参数,读取 SpringMVC 的配置文件 -->
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
    <!-- 配置 Servlet 对象的创建时间点为应用加载时创建,取值只能为非零整数,表示启动顺序 -->
    <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 配置映射,同 Servlet 一样 -->
    <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- 配置 app 分派器(前端控制器)End --> <!-- 配置解决中文乱码的过滤器 Start -->
    <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>forceRequestEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>forceResponseEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>
    <!-- 过滤所有请求 -->
    <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 配置解决中文乱码的过滤器 End --> </web-app>

  • 在 dispatcher-servlet.xml 中 配置视图解析器、静态资源以及开启注解支持

    <?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"> <!-- SpringMVC 配置 Start --> <!-- 开启注解扫描,只扫描 web 层 -->
    <context:component-scan base-package="cn.parzulpan">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan> <!-- 配置 视图解析器 -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
    </bean> <!-- 配置 文件解析器,要求 id 名称必须是 multipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/>
    </bean> <!-- 配置 处理器拦截器 --> <!-- 设置静态资源不过滤 -->
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/images/**" location="/images/"/> <!-- 开启对 SpringMVC 注解的支持 -->
    <mvc:annotation-driven/> <!-- SpringMVC 配置 End --> </beans>

Spring 整合 MyBatis

  • 删除 SqlConfigMap.xml,在 applicationContext.xml 中 配置 MyBatis

  • 在 applicationContext.xml 中 配置 Spring 声明式事务管理

    <?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"
    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
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- Spring 配置 Start -->
    <!-- 开启注解扫描,只扫描 service 和 dao 层,忽略 web 层 -->
    <context:component-scan base-package="cn.parzulpan">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan> <!-- 配置 Spring 声明式事务管理 -->
    <!-- 1. 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 2. 配置事务的通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="*" read-only="false" propagation="REQUIRED"/>
    <tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
    </tx:attributes>
    </tx:advice>
    <!-- 3. 配置 AOP 增强 -->
    <aop:config>
    <aop:pointcut id="allServiceImplPT" expression="execution(* cn.parzulpan.service.impl.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="allServiceImplPT"/>
    </aop:config> <!-- Spring 配置 End --> <!-- MyBatis 配置 Start -->
    <!-- 配置 C3P0 连接池对象 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm?useSSL=false"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
    </bean>
    <!-- 配置SqlSession的工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 配置映射信息 -->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.parzulpan.dao"/>
    </bean>
    <!-- MyBatis 配置 Start --> </beans>
  • 以注解的方式编写 DAO,注意 @Param 的使用,当 SQL 中需要多个参数的时候,MayBatis 会将参数列表中的参数封装成一个 Map 进行传递,这个过程是通过 @Param 来实现的,@Param 注解括号中的值会作为 key,value 就是参数实际的值。解析参数的时候会按照 @Param 中定义的 key 获取对应的值

    /**
    * @Author : parzulpan
    * @Time : 2020-12
    * @Desc : 用户持久层接口
    */ @Repository
    public interface UserDAO {
    /**
    * 查询所有用户信息
    * @return
    */
    @Select("select * from user")
    public List<User> findAll(); /**
    * 根据 Id 查询用户信息
    * @param id
    * @return
    */
    @Select("select * from user where id = #{id}")
    public User findById(@Param("id") Integer id); /**
    * 根据 用户名 查询用户信息
    * @param username
    * @return
    */
    @Select("select * from user where username = #{username}")
    public User findByName(@Param("username") String username); /**
    * 根据用户名和密码查询用户信息
    * @param username
    * @param password
    * @return
    */
    @Select("select * from user where username = #{username} and password = #{password}")
    public User findByNameAndPwd(@Param("username") String username, @Param("password") String password); /**
    * 保存用户
    * @param user
    * @return
    */
    @Insert("insert into user(username, password) values (#{username}, #{password})")
    @SelectKey(keyColumn = "id", keyProperty = "id", resultType = Integer.class, before = false,
    statement = {"select last_insert_id()"})
    public int save(User user);
    }

整合测试

src/main/java/cn/parzulpan/web/UserController.java

@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService; /**
* 登录
* @param user
* @return
*/
@RequestMapping("/login")
public String login(User user){
System.out.println("表现层:登录用户");
System.out.println(user); User userByNameAndPwd = userService.findUserByNameAndPwd(user.getUsername(), user.getPassword());
if (userByNameAndPwd != null) {
System.out.println("登录成功");
return "redirect:findAll";
} return "error";
} /**
* 注册
* @param user
* @return
*/
@RequestMapping("/registration")
public String registration(User user){
System.out.println("表现层:注册用户");
System.out.println(user); int i = userService.saveUser(user);
if (i > 0) {
System.out.println("注册成功");
return "redirect:findAll";
} return "error";
} /**
* 查询所有账户
* @param model
* @return
*/
@RequestMapping("/findAll")
public String findAll(Model model) {
System.out.println("表现层:查询所有账户"); List<User> users = userService.findAllUser();
model.addAttribute("users", users); return "success";
} /**
* 返回首页
* @return
*/
@RequestMapping("/returnIndex")
public String returnIndex() {
System.out.println("表现层:返回首页"); return "redirect:/index.jsp";
}
}

练习和总结

【环境搭建】SSM 整合使用的更多相关文章

  1. Hibernate环境搭建+struts整合

    说明:本文档,是和struts2+hibernate的整合示例. lib下还有struts2的jar包,本示例没有显示.struts2的搭建参考struts2的环境搭建 一下载hibernate的ja ...

  2. IDEA环境下SSM整合------环境配置

    声明:本文纯为个人笔记整理,如有不妥之处还望及时指出,欢迎转载! 只为解决操作问题,可以从第二幅图往后看! 一.做不出详细的概念叙述和文本设计,本文主要以实战步骤为主,少量解释为辅助,下面请大家牢记两 ...

  3. 详解环境搭建SSM

    1.概述: SSM即为spring 4 +spring mvc +mybatis 3.4.6 推荐使用maven或者gradle 来配置 下面给出maven配置方式 2.项目结构: 新建web项目 这 ...

  4. Mave环境搭建SSM集成空项目

    ---恢复内容开始--- 一.空项目案例 软件: 链接:https://pan.baidu.com/s/18Fk8frnWMBRho43P98C97w 提取码:0rk7 项目:链接:https://p ...

  5. IDEA环境下SSM整合------注解开发

    根据前一篇文章的步骤,目前项目进度应该是:核心过滤器配置完成.DispatcherServlet和ContextLoader配置完成.数据库dataSource配置完成.视图解析器配置完成.Mappe ...

  6. 搭建ssm整合

    一.导入依赖 二.新建java和resources目录 1.在java目录新建cn.itcat.domain包,继续添加controller,service,dao,的包 2.在domain里面创建A ...

  7. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  8. SSM整合_年轻人的第一个增删改查_查找

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  9. SSM整合_年轻人的第一个增删改查_新增

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  10. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

随机推荐

  1. jvm 模型

  2. bilibili插件推荐

    目前看到的好的插件就两个,现在来介绍一下. 第一个是 哔哩哔哩助手 这是它的功能,这里就以截图来给大家看 以上为这个插件的所有功能. 点击前往官网 第二个是 bilibili网页端添加APP首页推荐 ...

  3. jsp+servlet实现美妆店铺开发

    一般的商城都有用户端和商城端两个部分,用户端就是给普通用户使用的,像我们在淘宝购物,我们就是使用的用户端:然而淘宝还分了很多个店铺,每个店铺的商品都是店老板安排人员去管理,那店老板管理自己的店铺用到的 ...

  4. 2020年“感恩杯”台州学院第十三届大学生程序设计竞赛D、H、I题解(后续补充)

    D题:小z与他的袜子 描述 小z每天会穿一双新袜子. 开始他的衣柜里有n双袜子,袜子会从1-n进行编号.每天早上他都会从衣柜里拿编号最小的袜子来穿.每天晚上他会把今天穿的袜子扔进篮子里,如果篮子里有n ...

  5. Nebula Graph 在微众银行数据治理业务的实践

    本文为微众银行大数据平台:周可在 nMeetup 深圳场的演讲这里文字稿,演讲视频参见:B站 自我介绍下,我是微众银行大数据平台的工程师:周可,今天给大家分享一下 Nebula Graph 在微众银行 ...

  6. MVC中使用T4模板

    参考博文 http://www.cnblogs.com/heyuquan/archive/2012/07/26/2610959.html 图片释义 1.简单示例,对基本的模块标记 2.根据上图生成的类 ...

  7. xxfpmW 的诞生过程

    最近因为在win 服务器搭建php服务,发现php-cgi.exe 很容易崩溃,看cpu和硬盘都没有暴涨,也不知道啥原因,网上查发现有一款xxfpm 小应用可以解决这个问题,但这个应用是2011年开发 ...

  8. 云服务器部署LAMP

    一.安装Apache 1.安装httpd服务: sudo yum install httpd 2.开启服务: sudo systemctl start httpd 3.访问服务器IP成功显示Testi ...

  9. 后端Long类型传到前端精度丢失的正确解决方式

    原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...

  10. [leetcode]64Minimum Path Sum 动态规划

    /** * Given a m x n grid filled with non-negative numbers, * find a path from top left to bottom rig ...