快速搭建springmvc+spring data jpa工程

一、前言

  这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考。

二、创建maven工程

  http://www.cnblogs.com/hujunzheng/p/5450255.html

三、配置文件说明

  1.application.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springdata?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
jdbc.pool.initialSize=5
jdbc.pool.maxActive=300
jdbc.pool.maxIdle=10
jdbc.pool.minIdle=8
jdbc.pool.maxWait=60000
jdbc.pool.minEvictableIdleTimeMillis=6000
jdbc.pool.removeAbandoned=true
jdbc.pool.removeAbandonedTimeout=120
jdbc.pool.logAbandoned=true
jdbc.pool.testOnBorrow=true
jdbc.pool.testWhileIdle=true
jdbc.pool.validationQuery=select 1 from dual
jdbc.pool.validationQueryTimeout=1
jdbc.pool.timeBetweenEvictionRunsMillis=30000
jdbc.pool.numTestsPerEvictionRun=300
View Code

  配置数据库连接的常用属性

  2.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"default-lazy-init="true"><description>Spring公共配置</description><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>/WEB-INF/config/application.properties</value></list></property></bean><bean id="configProperties"class="org.springframework.beans.factory.config.PropertiesFactoryBean"><property name="locations"><list><value>/WEB-INF/config/application.properties</value></list></property></bean><!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 --><context:component-scan base-package="com.hjz"><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Controller" /><context:exclude-filter type="annotation"expression="org.springframework.web.bind.annotation.ControllerAdvice" /></context:component-scan>
</beans>
View Code

  配置configProperties(可以在xml文件中读取application.properties中属性),当然换成<context:property-placeholder location="application.properties"/>更简洁一些。还有就是使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入,这里排除了Controller注解类的扫描。

  3.spring mvc配置文件

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><context:component-scan base-package="com.hjz"use-default-filters="false"><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller" /><context:include-filter type="annotation"expression="org.springframework.web.bind.annotation.ControllerAdvice" /></context:component-scan><mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /><property name="writeAcceptCharset" value="false" /></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="prettyPrint" value="true" /></bean></mvc:message-converters></mvc:annotation-driven><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean><!-- 静态资源访问  --><mvc:resources location="/WEB-INF/img/" mapping="/img/**"/>   <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>    <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>  <mvc:default-servlet-handler /></beans>
View Code

  配置对Controller注解类的扫描,消息转换器(针对String和Json的解析),视图解析器(这里只配置了jsp的视图解析器),静态资源的访问映射。

  4.spring data jpa配置文件

<?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:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"default-lazy-init="true"><!-- 数据源配置, 使用Tomcat JDBC连接池 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><!--initialSize: 初始化连接 --><property name="initialSize" value="${jdbc.pool.initialSize}" /><!--maxActive: 最大连接数量 --><property name="maxActive" value="${jdbc.pool.maxActive}" /><!--minIdle: 最小空闲连接 --><property name="minIdle" value="${jdbc.pool.minIdle}" /><!--maxIdle: 最大空闲连接 --><property name="maxIdle" value="${jdbc.pool.maxIdle}" /><!--maxWait: 超时等待时间以毫秒为单位 --><property name="maxWait" value="${jdbc.pool.maxWait}" /><!-- 连接被泄露时是否打印 --><property name="logAbandoned" value="${jdbc.pool.logAbandoned}" /><!--removeAbandoned: 是否自动回收超时连接 --><property name="removeAbandoned" value="${jdbc.pool.removeAbandoned}" /><!--removeAbandonedTimeout: 超时时间(以秒数为单位) --><property name="removeAbandonedTimeout" value="${jdbc.pool.removeAbandonedTimeout}" /><!-- 连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒 --><property name="minEvictableIdleTimeMillis" value="${jdbc.pool.minEvictableIdleTimeMillis}" /><property name="testOnBorrow" value="${jdbc.pool.testOnBorrow}" /><property name="testWhileIdle" value="${jdbc.pool.testWhileIdle}" /><property name="validationQuery" value="${jdbc.pool.validationQuery}" /><property name="validationQueryTimeout" value="${jdbc.pool.validationQueryTimeout}" /><property name="timeBetweenEvictionRunsMillis" value="${jdbc.pool.timeBetweenEvictionRunsMillis}" /><property name="numTestsPerEvictionRun" value="${jdbc.pool.numTestsPerEvictionRun}" /></bean><!-- Jpa Entity Manager 配置 --><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" /><property name="packagesToScan"><array><value>com.hjz</value></array></property><property name="jpaProperties"><props><!-- 命名规则 My_NAME->MyName --><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><!-- Spring Data Jpa配置 --><jpa:repositories base-package="com.hjz"transaction-manager-ref="transactionManager"entity-manager-factory-ref="entityManagerFactory"factory-class="com.hjz.dao.impl.BaseDaoFactoryBean"></jpa:repositories><bean id="hibernateJpaVendorAdapter"class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><property name="databasePlatform"><bean factory-method="getDialect"class="org.springside.modules.persistence.Hibernates"><constructor-arg ref="dataSource" /></bean></property></bean><!-- Jpa 事务配置 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!-- 使用annotation定义事务 --><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" /><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean></beans>
View Code

  数据源配置, 使用Tomcat JDBC连接池;Jpa Entity Manager 配置;Spring Data Jpa repository 自定义工厂配置。

  5.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>Archetype Created Web Application</display-name><welcome-file-list><welcome-file>/WEB-INF/views/index.html</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/config/applicationContext.xml,/WEB-INF/config/applicationContext-jpa.xml</param-value></context-param><context-param><param-name>spring.profiles.default</param-name><param-value>production</param-value></context-param><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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>accessControlFilter</filter-name><filter-class>com.hjz.filter.AccessControlFilter</filter-class></filter><filter-mapping><filter-name>accessControlFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><filter><filter-name>openEntityManagerInViewFilter</filter-name><filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class></filter><filter-mapping><filter-name>openEntityManagerInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/config/spring-mvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><session-config><session-timeout>20</session-timeout></session-config><error-page><exception-type>java.lang.Throwable</exception-type><location>/WEB-INF/views/error/500.jsp</location></error-page><error-page><error-code>500</error-code><location>/WEB-INF/views/error/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/WEB-INF/views/error/404.jsp</location></error-page>
</web-app>
View Code

  配置welcome-file-list,contextConfigLocation,encodingFilter,accessControlFilter(解决跨域访问),openEntityManagerInViewFilter(将一个JPAsession与一次完整的请求过程对应的线程相绑定,session在整个view层结束后才关闭。),Spring ContextLoaderListener,Spring MVC DispatcherServlet。

四、spring data jpa自定义repository工厂

  1.基础实体类

package com.hjz.entity;import org.hibernate.annotations.GenericGenerator;import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import java.io.Serializable;
import java.sql.Timestamp;@MappedSuperclass
public abstract class AbsIdEntity implements Serializable {private static final long serialVersionUID = 7988377299341530426L;public final static int IS_DELETE_YES = 1;// 标记删除public final static int IS_DELETE_NO = 0;// 未删除,保留的@Id@GenericGenerator(name="uuid", strategy="uuid")@GeneratedValue(generator="uuid")protected String id;@Column(name = "creationtime")protected Timestamp creationTimestamp = new Timestamp(System.currentTimeMillis());@Column(name = "lastmodifiedtime")protected Timestamp modificationTimestamp = new Timestamp(System.currentTimeMillis());@Column(name = "dr")protected int dr;// 是否删除。0:未删除;1:已删除/*** 主键,对应id字段*/public String getId() { return id; }public void setId(String id) { this.id = id; }/*** 创建日期,对应ts_insert字段*/public Timestamp getCreationTimestamp() { return creationTimestamp; }public void setCreationTimestamp(Timestamp creationTimestamp) { this.creationTimestamp = creationTimestamp; }/*** 修改日期,对应ts_update字段*/public Timestamp getModificationTimestamp() { return modificationTimestamp; }public void setModificationTimestamp(Timestamp modificationTimestamp) { this.modificationTimestamp = modificationTimestamp; }/*** 是否删除,对应dr字段* @return*/public int getDr() {return dr;}public void setDr(int dr) {this.dr = dr;}}
View Code

  首先说明,所有的实体类都会继承 基础实体类 AbsIdEntity。

  对应的VO类

package com.hjz.vo;import java.io.Serializable;public class PersonVO extends SuperVO implements Serializable{private static final long serialVersionUID = -4745138914786180462L;private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
View Code

  2.自定义工厂

package com.hjz.dao.impl;import java.io.Serializable;
import javax.persistence.EntityManager;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import org.springframework.data.repository.core.RepositoryInformation;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.core.support.RepositoryFactorySupport;import com.hjz.entity.AbsIdEntity;public class BaseDaoFactoryBean<R extends JpaRepository<T, Serializable>, T extends AbsIdEntity> extends JpaRepositoryFactoryBean<R, T, Serializable> {@Overrideprotected RepositoryFactorySupport createRepositoryFactory(final EntityManager entityManager) {return new JpaRepositoryFactory(entityManager) {protected SimpleJpaRepository<T, Serializable> getTargetRepository(RepositoryInformation information,    EntityManager entityManager) {return new BaseDaoImpl((Class<T>) information.getDomainType(), entityManager);}@Overrideprotected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {return BaseDaoImpl.class;}};}
}
View Code

   工厂中返回的自定义的JpaRepository, 如下。

  3.自定义JpaRepository

package com.hjz.dao.impl;import java.io.Serializable;
import java.sql.Timestamp;import javax.persistence.EntityManager;import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
import org.springframework.transaction.annotation.Transactional;import com.hjz.dao.BaseDao;
import com.hjz.entity.AbsIdEntity;
@Transactional
public class BaseDaoImpl<T extends AbsIdEntity> extends SimpleJpaRepository<T, Serializable> implements BaseDao<T> {private final EntityManager entityManager;public BaseDaoImpl(Class<T> domainClass, EntityManager entityManager) {super(domainClass, entityManager);this.entityManager = entityManager;}public BaseDaoImpl(JpaEntityInformation<T, Serializable> information, EntityManager entityManager){super(information, entityManager);this.entityManager = entityManager;}@Overridepublic <S extends T> S save(S entity) {entity.setModificationTimestamp(new Timestamp(System.currentTimeMillis()));return super.save(entity);}//进行逻辑删除
    @Overridepublic void delete(T entity) {entity.setDr(1);save(entity);}@Overridepublic void delete(Serializable id) {T entity = findOne(id);entity.setDr(1);this.save(entity);}}
View Code

  重写了删除方法,这里做逻辑删除

五、后台开发模式

  1.实体类

package com.hjz.entity;import java.io.Serializable;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;@Entity
@Table(name = "person")
public class PersonEntity extends AbsIdEntity implements Serializable{private static final long serialVersionUID = -1649223236097252346L;@Column(name = "name")private String name;@Column(name = "age")private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
View Code

  实体对应的VO

package com.hjz.vo;import java.io.Serializable;public class PersonVO extends SuperVO implements Serializable{private static final long serialVersionUID = -4745138914786180462L;private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
View Code

   2.repository类

package com.hjz.dao;import java.util.List;import javax.transaction.Transactional;import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;import com.hjz.entity.PersonEntity;public interface PersonDao extends BaseDao<PersonEntity>{@Query(value = "select * from person where dr = 0", nativeQuery = true)List<PersonEntity> findAllPersons();@Query(value = "select * from person where dr = 0 and id = ?1", nativeQuery = true)PersonEntity findOneById(String id);@Transactional@Modifying@Query(value = "update PersonEntity set dr = 1 where id in (?1)")int deletePersons(List<String> ids);
}
View Code

  3.service类

package com.hjz.service;import java.util.ArrayList;
import java.util.List;import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;import com.hjz.dao.PersonDao;
import com.hjz.entity.PersonEntity;
import com.hjz.vo.PersonVO;@Service
public class PersonService {@Autowiredprivate PersonDao personDao;public List<PersonVO> findAllPersons(){List<PersonVO> listVO = new ArrayList<>();List<PersonEntity> listEntity = personDao.findAllPersons();for(PersonEntity entity : listEntity) {PersonVO vo = new PersonVO();BeanUtils.copyProperties(entity, vo);listVO.add(vo);}return listVO;}public List<PersonVO> findPageablePersons(Pageable pageable){List<PersonVO> listVO = new ArrayList<>();Page<PersonEntity> pageEntity = personDao.findAll(new Specification<PersonEntity>() {@Overridepublic Predicate toPredicate(Root<PersonEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {return cb.equal(root.get("dr").as(Integer.class), 0);}}, pageable);for (PersonEntity entity : pageEntity) {PersonVO personVO = new PersonVO();BeanUtils.copyProperties(entity, personVO);listVO.add(personVO);}return listVO;}public long count() {return personDao.count(new Specification<PersonEntity>() {@Overridepublic Predicate toPredicate(Root<PersonEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {return cb.equal(root.get("dr").as(Integer.class), 0);}});}public PersonVO findOnePerson(String id){PersonVO vo = new PersonVO();PersonEntity entity = personDao.findOneById(id);BeanUtils.copyProperties(entity, vo);return vo;}public void deleteOnePerson(String id) {personDao.delete(id);}public PersonVO save(PersonVO vo){PersonEntity entity = new PersonEntity();BeanUtils.copyProperties(vo, entity);personDao.save(entity);BeanUtils.copyProperties(entity, vo);return vo;}public void deletePersons(List<String> ids) {personDao.deletePersons(ids);}
}
View Code

  4.controller类

package com.hjz.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSONObject;
import com.hjz.code.ReturnCode;
import com.hjz.page.PagableResponse;
import com.hjz.service.PersonService;
import com.hjz.vo.PersonVO;@Controller
@RequestMapping(value = "person")
public class PersonController {@Autowiredprivate PersonService personService;@RequestMapping(value = "save", method = RequestMethod.POST)@ResponseBodypublic JSONObject save(@RequestBody PersonVO personVO){JSONObject ret = new JSONObject();try {personService.save(personVO);ret.put("msg", "保存成功!");ret.put("code", ReturnCode.SUCCESS);} catch (Exception e) {e.printStackTrace();ret.put("msg", "保存失败!");ret.put("code", ReturnCode.FAILURE);}return ret;}@RequestMapping(value = "del")@ResponseBodypublic JSONObject del(@RequestParam(value="id") String id){JSONObject ret = new JSONObject();try {personService.deleteOnePerson(id);ret.put("msg", "删除成功!");ret.put("code", ReturnCode.SUCCESS);} catch (Exception e) {e.printStackTrace();ret.put("msg", "删除失败!");ret.put("code", ReturnCode.FAILURE);}return ret;}@RequestMapping(value = "delBatch", method = RequestMethod.POST)@ResponseBodypublic JSONObject delBatch(@RequestParam("ids") List<String> ids){JSONObject ret = new JSONObject();try {personService.deletePersons(ids);ret.put("msg", "批量删除成功!");ret.put("code", ReturnCode.SUCCESS);} catch (Exception e) {e.printStackTrace();ret.put("msg", "批量删除失败!");ret.put("code", ReturnCode.FAILURE);}return ret;}@RequestMapping(value = "page")public ModelAndView page(@RequestParam("pageNumber") int pageNumber, @RequestParam("pageSize") int pageSize) {PageRequest pageRequest = new PageRequest(pageNumber-1, pageSize);PagableResponse<PersonVO> response = new PagableResponse<PersonVO>();response.setPageNumber(pageNumber);response.setPageSize(pageSize);try {List<PersonVO> data = personService.findPageablePersons(pageRequest);long count = personService.count();response.setList(data);response.setCount(count);response.setCode(ReturnCode.SUCCESS);response.setMsg("获取人员信息成功!");} catch(Exception e) {e.printStackTrace();response.setCode(ReturnCode.FAILURE);response.setMsg("获取人员信息失败!"); }return new ModelAndView("person", "page", response);}
}
View Code

六、前端开发

  简单的使用jquery及其一些插件完成了数据的分页(jquery.paginate.js),数据的新增,删除(批量删除)等操作。具体的页面代码请看完整项目。演示效果如下图所示。

 

  

七、完整项目

   https://github.com/hjzgg/springmvcAndSpringDataJpa

转载于:https://www.cnblogs.com/hujunzheng/p/5883188.html

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

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

相关文章

git亲测命令

一、Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream branch_name origin/branch_name 或者 git branch branch_name git branch --set-upstream-toorigin/branch_name branch_name 二、查看本地分支所关…

mysql 7下载安装及问题解决

mysql 7安装及问题解决 一、mysql下载 下载地址&#xff1a;https://www.mysql.com/downloads/Community (GPL) DownloadsMySQL Community Server (GPL)Windows (x86, 64-bit), ZIP ArchiveNo thanks, just start my download.二、mysql安装 解压到指定目录在mysql bin目录下打…

tomcat开发远程调试端口以及利用eclipse进行远程调试

一、tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里&#xff1a;   SET CATALINA_OPTS-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address8899   Linux系统 在catalina.sh里&#xff1a;   CATALINA_OPTS&q…

webpack+react+redux+es6开发模式

一、预备知识 node, npm, react, redux, es6, webpack 二、学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入门教程 redux middleware 详解 Redux研究 React 入门实例教程 webpack学习demo NPM 使用介绍 三、工程搭建 之前有写过 webpackreactes6开发模式…

fiddler发送post请求

1.指定为 post 请求&#xff0c;输入 url Content-Type: application/x-www-form-urlencoded;charsetutf-8 request body中的参数格式&#xff1a;userNameadminicxp&userPassword123qwe!# 这种方式可以用 request.getParameter的方式来获得。 2.指定为 post 请求&#xff…

Kettle之数据抽取、转换、装载

Kettle 官网 ETL利器Kettle实战应用解析系列 利用kettle组件导入excel文件到数据库 kettle中实现动态SQL查询 java中调用kettle转换文件 kettle 7.x版本下载&#xff1a;https://pan.baidu.com/s/1nvnzzCH  密码&#xff1a;6f5c mac 下运行spoon.sh,  windows下为spoon.bat…

webpack+react+redux+es6开发模式---续

一、前言 之前介绍了webpackreactreduxes6开发模式 &#xff0c;这个项目对于一个独立的功能节点来说是没有问题的。假如伴随着源源不断的需求&#xff0c;前段项目会涌现出更多的功能节点&#xff0c;需要独立部署运行。为了更好地管理这些独立的功能节点&#xff0c;我们需要…

RabbitMQ安装和使用(和Spring集成)

一、安装Rabbit MQ   Rabbit MQ 是建立在强大的Erlang OTP平台上&#xff0c;因此安装Rabbit MQ的前提是安装Erlang。通过下面两个连接下载安装3.2.3 版本&#xff1a; 下载并安装 Eralng OTP For Windows (vR16B03)运行安装 Rabbit MQ Server Windows Installer (v3.2.3)具体…

单点登录实现(spring session+redis完成session共享)

一、前言 项目中用到的SSO&#xff0c;使用开源框架cas做的。简单的了解了一下cas&#xff0c;并学习了一下 单点登录的原理&#xff0c;有兴趣的同学也可以学习一下&#xff0c;写个demo玩一玩。 二、工程结构 我模拟了 sso的客户端和sso的服务端&#xff0c; sso-core中主要是…

加密策略

一、前言 这两天研究了一下项目中的密码加密&#xff0c;可以说得上是学到了很多。下面来大致说一下。 二、常用加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中&#xff0c;是否被篡改过。 BASE64 严格地说&#xff0c;属于编码格式&#xff0c;而非加密算法 …

Spring Data JPA: 实现自定义Repository

一、前言 由于项目中的 实体&#xff08;entity&#xff09;默认都是继承一个父类&#xff08;包含一些公共的属性&#xff0c;比如创建时间&#xff0c;修改时间&#xff0c;是否删除&#xff0c;主键id&#xff09;。为了实现逻辑删除&#xff0c;一般会自己实现RepositoryFa…

js冲刺一下

js中__proto__和prototype的区别和关系 1.对象有属性__proto__,指向该对象的构造函数的原型对象。  2.方法除了有属性__proto__,还有属性prototype&#xff0c;prototype指向该方法的原型对象。 深入浅出妙用 Javascript 中 apply、call、bind ***两道面试题*** 关于js中伪数…

Jackson序列化实例

参考文章 Jackson使用ContextualSerializer在序列化时获取字段注解的属性 使用BeanSerializerModifier定制jackson的自定义序列化(null值的处理) 关于使用ContextualSerializer的补充 BeanSerializerFactory中有如下代码&#xff0c; 关于设置SerializerModifier&#xff0c;如…

cas4.2.7实现单点登录

准备前参考&#xff1a;  cas server下载地址 cas client 下载地址 安全cookie setSecure详解 Spring通过构造方法注入的四种方式 cas 学习博文 自定义登录页和登录认证 cas server端的login-webflow详细流程 CAS服务端自定义数据库认证用户 准备工作 1. cas server下载之后解…

swagger restful api form映射实体对象和body映射实体对象配置

实体Model ModelAttribute一个具有如下三个作用&#xff1a; ①绑定请求参数到命令对象&#xff1a;放在功能处理方法的入参上时&#xff0c;用于将多个请求参数绑定到一个命令对象&#xff0c;从而简化绑定流程&#xff0c;而且自动暴露为模型数据用于视图页面展示时使用&…

ssh端口转发(之kettle ssh方式连接数据库)

ssh参数解释 格式  ssh [user]host [command] 选项&#xff1a; -1&#xff1a;强制使用ssh协议版本1&#xff1b; -2&#xff1a;强制使用ssh协议版本2&#xff1b; -4&#xff1a;强制使用IPv4地址&#xff1b; -6&#xff1a;强制使用IPv6地址&#xff1b; -A&#xff1a…

ThreadLocal和InheritableThreadLocal使用

InheritableThreadLocal代码 public class InheritableThreadLocal<T> extends ThreadLocal<T> {protected T childValue(T parentValue) {return parentValue;}ThreadLocalMap getMap(Thread t) {return t.inheritableThreadLocals;}void createMap(Thread t, T f…

mybatis generator修改默认生成的sql模板

相关连接&#xff1a; mybatis-generator扩展教程系列 -- 自定义sql xml文件 git项目地址 转载于:https://www.cnblogs.com/hujunzheng/p/7110510.html

oauth简单使用

一、oauth原理参考 理解OAuth 2.0 二、本例中采用授权码模式 大致流程 &#xff08;A&#xff09;用户访问客户端&#xff0c;后者将前者导向认证服务器。  &#xff08;B&#xff09;用户选择是否给予客户端授权。  &#xff08;C&#xff09;假设用户给予授权&#xff0c…

我眼中的服务提供和服务消费

服务提供和消费脑图 服务提供和消费脑图 参见: 服务提供者, 服务消费者, 服务注册中心 服务提供者 1.服务提供者启动&#xff0c;解析xml文件中配置的服务&#xff0c;这里使用Dom4j解析。 2.将服务的一些相关信息注册到 服务注册中心。 注&#xff1a;服务相关信息&#xff1a…