文件路径:

          

添加依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>lf.wonder</groupId>
<artifactId>xweb</artifactId>
<version>1.0.0</version>
<packaging>war</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies> <!--spring boot 的依赖 START-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring boot 的依赖 END--> <!--mybatis 的依赖 START-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--mybatis 的依赖 END--> <!--mysql 的依赖 START-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mysql 的依赖 END--> <!--jsp 的依赖 START-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--jsp 的依赖 END--> <!--swagger 的依赖 START-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency> <dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
<!--swagger 的依赖 END--> <!--c3p0 的依赖 START-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!--c3p0 的依赖 END--> <!--redis 的依赖 START-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency> <!--redis sessions 共享 的依赖-->
<!-- <dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>-->
<!--redis 的依赖 END--> <!--mongodb 的依赖 START-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
<!--mongodb 的依赖 END--> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency> </dependencies> <build> <finalName>fly</finalName>
<!--配置文件读取路径-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources> <plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

添加application.properties文件

# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp #swagger
modulePath=/lf

添加c3p0.properties文件

# c3p0 配置
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/bsdmxm?useUnicode=true&characterEncoding=utf8
c3p0.user=root
c3p0.password=mysql
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.minPoolSize=2
c3p0.maxPoolSize=10
c3p0.maxIdleTime=1800000
c3p0.acquireIncrement=3
c3p0.maxStatements=1000
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=60
c3p0.acquireRetryAttempts=30
c3p0.acquireRetryDelay=1000
c3p0.breakAfterAcquireFailure=false
c3p0.testConnectionOnCheckout=false

添加mongoDB.properties文件

#mongodb://用户名:密码@ip:端口/数据库
spring.data.mongodb.uri=mongodb://lf:123456@127.0.0.1:27017/wonder

添加mybatis.properties文件

#mybatis 配置
# mybatis xml配置文件的路径
mybatis.config-locations=classpath:config/mybatis-config.xml
# mybatis xml文件的路径
mybatis.mapper-locations=classpath:lf/mapper/xml/*.xml
# 实体类的路径
mybatis.type-aliases-package=lf.entity

添加redis.properties文件

#Redis 配置
#最大连接数
redis.pool.maxTotal=1024
#最大空闲连接数
redis.pool.maxIdle=100
#最小空闲连接数, 默认0
redis.pool.minIdle=10
#获取连接时的最大等待毫秒数
redis.pool.maxWaitMillis=300000
#在获取连接的时候检查有效性, 默认false
redis.pool.testOnBorrow=true
#在return给pool时,是否提前进行validate操作
redis.pool.testOnReturn=true
#在空闲时检查有效性, 默认false
redis.pool.testWhileIdle=true
#IP
redis.ip=localhost
#Port
redis.port=6379
#密码(默认为空)
redis.pass=

添加mybatis-donfig.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>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>

添加applicationContext-jedis.xml配置文件(redis配置)

<?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-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd"> <!-- redis配置开始 -->
<!-- 配置 JedisPoolConfig 实例 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.pool.maxTotal}" />
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="minIdle" value="${redis.pool.minIdle}" />
<property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
<property name="testWhileIdle" value="${redis.pool.testWhileIdle}" />
</bean> <!-- 配置JedisConnectionFactory -->
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name="poolConfig" ref="poolConfig" />
<property name="port" value="${redis.port}" />
<property name="hostName" value="${redis.ip}" />
<property name="password" value="${redis.pass}" />
<property name="timeout" value="5000" ></property>
</bean > <!-- 配置RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
<property name="connectionFactory" ref="connectionFactory" />
<property name="keySerializer" >
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer" >
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean > <!-- 配置RedisUtil bean -->
<bean id="redisUtil" class="lf.utils.redis.RedisUtil" >
<property name="redisTemplate"><ref bean= "redisTemplate"/></property>
<property name="redisIp" value="${redis.ip}" />
</bean> </beans>

添加jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body> <h1>欢迎登陆甘雨路主页</h1>
<div>登陆时间:${time}</div>
<div>登陆人:${loginName}</div> </body>
</html>

添加实体类

package lf.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date; @ApiModel(description = "用户实体")
public class BsdUser implements Serializable {
@ApiModelProperty("主键")
private Long id;
@ApiModelProperty("组织id")
private Long orgId;
@ApiModelProperty("用户类型(0,品牌商1,服务商2,零售商,3客服)")
private Integer userType;
@ApiModelProperty("登录名")
private String loginName;
@ApiModelProperty("电话")
private String phone;
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty("简称")
private String shortName;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("联系人")
private String contactUserName;
@ApiModelProperty("地址")
private String address;
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty("级别(0,普通会员,1,一级会员,2,二级会员,3三级会员,4,四级会员,5,五级会员)")
private Integer level;
@ApiModelProperty("状态(0,无效,1有效,2未审核,3审核未通过)")
private Integer state;
@ApiModelProperty("银行卡")
private String bankCard;
@ApiModelProperty("总积分")
private Long totalPoints;
@ApiModelProperty("上级组织id")
private Long superiorId;
@ApiModelProperty("创建人id")
private Long createdBy;
@ApiModelProperty("最后更新人")
private Long lastUpdatedBy;
@ApiModelProperty("创建日期")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createdDate;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@ApiModelProperty("最后更新日期")
private Date lastUpdatedDate;
@ApiModelProperty("软删除标志")
private Integer removeFlag;
@ApiModelProperty("图片地址")
private String imgUrl;
@ApiModelProperty("消费总金额")
private BigDecimal totalPaymentAmount;
@ApiModelProperty("佣金")
private BigDecimal commission;
@ApiModelProperty("运费")
private BigDecimal freight;
@ApiModelProperty("编号")
private String code;
@ApiModelProperty("已经支付定金")
private Long depositPaid;
@ApiModelProperty("注册信息附件信息传")
private String registerAttachmentUrl;
@ApiModelProperty("支付密码")
private String payPassWord;
@ApiModelProperty("钱包余额")
private BigDecimal balance;
@ApiModelProperty("现金卷余额")
private BigDecimal cashRoll; private static final long serialVersionUID = 1L; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public Long getOrgId() {
return orgId;
} public void setOrgId(Long orgId) {
this.orgId = orgId;
} public Integer getUserType() {
return userType;
} public void setUserType(Integer userType) {
this.userType = userType;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code == null ? null : code.trim();
} public String getLoginName() {
return loginName;
} public void setLoginName(String loginName) {
this.loginName = loginName == null ? null : loginName.trim();
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
} public String getShortName() {
return shortName;
} public void setShortName(String shortName) {
this.shortName = shortName == null ? null : shortName.trim();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name == null ? null : name.trim();
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password == null ? null : password.trim();
} public String getContactUserName() {
return contactUserName;
} public void setContactUserName(String contactUserName) {
this.contactUserName = contactUserName == null ? null : contactUserName.trim();
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address == null ? null : address.trim();
} public BigDecimal getLongitude() {
return longitude;
} public void setLongitude(BigDecimal longitude) {
this.longitude = longitude;
} public String getRegisterAttachmentUrl() {
return registerAttachmentUrl;
} public void setRegisterAttachmentUrl(String registerAttachmentUrl) {
this.registerAttachmentUrl = registerAttachmentUrl == null ? null : registerAttachmentUrl.trim();
} public BigDecimal getLatitude() {
return latitude;
} public void setLatitude(BigDecimal latitude) {
this.latitude = latitude;
} public Integer getLevel() {
return level;
} public void setLevel(Integer level) {
this.level = level;
} public String getImgUrl() {
return imgUrl;
} public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl == null ? null : imgUrl.trim();
} public Integer getState() {
return state;
} public void setState(Integer state) {
this.state = state;
} public String getBankCard() {
return bankCard;
} public void setBankCard(String bankCard) {
this.bankCard = bankCard == null ? null : bankCard.trim();
} public BigDecimal getTotalPaymentAmount() {
return totalPaymentAmount;
} public void setTotalPaymentAmount(BigDecimal totalPaymentAmount) {
this.totalPaymentAmount = totalPaymentAmount;
} public Long getTotalPoints() {
return totalPoints;
} public void setTotalPoints(Long totalPoints) {
this.totalPoints = totalPoints;
} public Long getSuperiorId() {
return superiorId;
} public void setSuperiorId(Long superiorId) {
this.superiorId = superiorId;
} public BigDecimal getCommission() {
return commission;
} public void setCommission(BigDecimal commission) {
this.commission = commission;
} public BigDecimal getFreight() {
return freight;
} public void setFreight(BigDecimal freight) {
this.freight = freight;
} public Long getDepositPaid() {
return depositPaid;
} public void setDepositPaid(Long depositPaid) {
this.depositPaid = depositPaid;
} public String getPayPassWord() {
return payPassWord;
} public void setPayPassWord(String payPassWord) {
this.payPassWord = payPassWord == null ? null : payPassWord.trim();
} public BigDecimal getBalance() {
return balance;
} public void setBalance(BigDecimal balance) {
this.balance = balance;
} public BigDecimal getCashRoll() {
return cashRoll;
} public void setCashRoll(BigDecimal cashRoll) {
this.cashRoll = cashRoll;
} public Long getCreatedBy() {
return createdBy;
} public void setCreatedBy(Long createdBy) {
this.createdBy = createdBy;
} public Date getCreatedDate() {
return createdDate;
} public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
} public Long getLastUpdatedBy() {
return lastUpdatedBy;
} public void setLastUpdatedBy(Long lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
} public Date getLastUpdatedDate() {
return lastUpdatedDate;
} public void setLastUpdatedDate(Date lastUpdatedDate) {
this.lastUpdatedDate = lastUpdatedDate;
} public Integer getRemoveFlag() {
return removeFlag;
} public void setRemoveFlag(Integer removeFlag) {
this.removeFlag = removeFlag;
}
}
package lf.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; @ApiModel(description = "用户实体(mongodb)")
public class MDBUser {
@ApiModelProperty("主键")
private String id; @ApiModelProperty("用户名")
private String username; @ApiModelProperty("密码")
private String password; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

添加mapper的xml层

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="lf.mapper.BsdUserMapper">
<resultMap id="BsdUserResultMap" type="lf.entity.BsdUser">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="org_id" jdbcType="BIGINT" property="orgId" />
<result column="user_type" jdbcType="INTEGER" property="userType" />
<result column="code" jdbcType="VARCHAR" property="code" />
<result column="login_name" jdbcType="VARCHAR" property="loginName" />
<result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="short_name" property="shortName" jdbcType="VARCHAR" />
<result column="register_attachment_url" property="registerAttachmentUrl" jdbcType="VARCHAR" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="contact_user_name" jdbcType="VARCHAR" property="contactUserName" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="longitude" jdbcType="DECIMAL" property="longitude" />
<result column="latitude" jdbcType="DECIMAL" property="latitude" />
<result column="level" jdbcType="INTEGER" property="level" />
<result column="img_url" jdbcType="VARCHAR" property="imgUrl" />
<result column="state" jdbcType="INTEGER" property="state" />
<result column="bank_card" jdbcType="VARCHAR" property="bankCard" />
<result column="total_payment_amount" jdbcType="DECIMAL" property="totalPaymentAmount" />
<result column="commission" jdbcType="DECIMAL" property="commission" />
<result column="freight" jdbcType="DECIMAL" property="freight" />
<result column="total_points" jdbcType="BIGINT" property="totalPoints" />
<result column="superior_id" jdbcType="BIGINT" property="superiorId" />
<result column="created_by" jdbcType="BIGINT" property="createdBy" />
<result column="created_date" jdbcType="TIMESTAMP" property="createdDate" />
<result column="last_updated_by" jdbcType="BIGINT" property="lastUpdatedBy" />
<result column="last_updated_date" jdbcType="TIMESTAMP" property="lastUpdatedDate" />
<result column="remove_flag" jdbcType="INTEGER" property="removeFlag" />
<result column="deposit_paid" jdbcType="DECIMAL" property="depositPaid" />
<result column="pay_pass_word" jdbcType="VARCHAR" property="payPassWord" />
<result column="balance" jdbcType="DECIMAL" property="balance" />
<result column="cash_roll" jdbcType="DECIMAL" property="cashRoll" />
</resultMap>
<sql id="BsdUser_Column_List">
id, org_id, user_type, code, login_name, phone, name,short_name,register_attachment_url,password, contact_user_name,
address, longitude, latitude, level, img_url, state, bank_card, total_payment_amount,commission,freight,
total_points, superior_id, created_by, created_date, last_updated_by, last_updated_date,
remove_flag, deposit_paid, pay_pass_word, balance, cash_roll
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
select
<include refid="BsdUser_Column_List" />
from bsd_user
where id = #{id}
</select> <select id="getUserById" parameterType="java.lang.Long" resultMap="BsdUserResultMap">
select
<include refid="BsdUser_Column_List" />
from bsd_user
where id = #{id}
</select> </mapper>

添加mapper接口层

package lf.mapper;

import lf.entity.BsdUser;
import org.mapstruct.Mapper; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; public interface BsdUserMapper{ /**
* 根据用户id获取用户信息
* @param id
* @return
*/
public BsdUser getUserById(Long id); }

添加service服务层接口

package lf.service;

import lf.entity.BsdUser;

public interface BsdUserSerive {
/**
* 根据用户id获取用户
* @param id
* @return
*/
public BsdUser getUserById(Long id);
}
package lf.service;

import io.swagger.annotations.ApiModel;
import lf.entity.BsdUser;
import lf.entity.MDBUser; @ApiModel("操作MongoDB(User)的接口类")
public interface MDBUserService { public void saveUser(MDBUser user); public MDBUser findUserByUserName(String userName); public int updateUser(MDBUser user); public void deleteUserById(Long id);
}

天机service服务层的实现类

package lf.service.impl;

import lf.entity.BsdUser;
import lf.mapper.BsdUserMapper;
import lf.service.BsdUserSerive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service
public class BsdUserSeriveImpl implements BsdUserSerive{ @Autowired
private BsdUserMapper userMapper;
/**
* 根据用户id获取用户信息
* @param id
* @return
*/
@Override
public BsdUser getUserById(Long id) {
return userMapper.getUserById(id);
}
}
package lf.service.impl;

import com.mongodb.WriteResult;
import io.swagger.annotations.ApiModel;
import lf.entity.BsdUser;
import lf.entity.MDBUser;
import lf.service.MDBUserService;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component; import javax.annotation.Resource; @ApiModel("操作MongoDB(User)的实现类")
@Component
public class MDBUserServiceImpl implements MDBUserService{ @Resource
private MongoTemplate template; /**
* 创建对象
* @param user
*/
@Override
public void saveUser(MDBUser user) {
template.save(user);
} /**
* 根据用户名查询对象
* @param userName
* @return
*/
@Override
public MDBUser findUserByUserName(String userName) {
Query query=new Query(Criteria.where("username").is(userName));
MDBUser user = template.findOne(query , MDBUser.class);
return user;
} /**
* 更新对象
* @param user
*/
@Override
public int updateUser(MDBUser user) {
Query query=new Query(Criteria.where("id").is(user.getId()));
Update update= new Update().set("userName", user.getUsername()).set("passWord", user.getPassword());
//更新查询返回结果集的第一条
WriteResult result =template.updateFirst(query,update,MDBUser.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,UserEntity.class);
if(result!=null)
return result.getN();
else
return 0;
} /**
* 删除对象
* @param id
*/
@Override
public void deleteUserById(Long id) {
Query query=new Query(Criteria.where("id").is(id));
template.remove(query,BsdUser.class);
} }

添加controller控制层

package lf.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lf.entity.BsdUser;
import lf.entity.MDBUser;
import lf.service.MDBUserService;
import lf.utils.CommonDTO;
import lf.utils.CommonUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @Api(description = "用户控制器(mongodb)")//swagger注解用于类
@Controller // 控制器注解
@RequestMapping(value="${modulePath}/mongo/user")
public class MDBUserController { @Resource
private MDBUserService userService; @ResponseBody
@RequestMapping(value = "/save",method = RequestMethod.POST)
public CommonDTO<MDBUser> saveUser(@RequestBody @ApiParam("用户") MDBUser user){
CommonDTO<MDBUser> detailDTO = new CommonDTO<>(0,1);
try {
userService.saveUser(user);
detailDTO.setData(user);
} catch (Exception e) {
e.printStackTrace();
detailDTO.setStatus(1);
detailDTO.setCode(400);
detailDTO.setMsg("获取用户信息异常:"+e.getMessage()); }
return detailDTO;
} @ResponseBody
@RequestMapping(value = "/find",method = RequestMethod.GET)
public CommonDTO<MDBUser> getUser(@RequestParam @ApiParam("用户名") String userName){
CommonDTO<MDBUser> detailDTO = new CommonDTO<>(0,1);
try {
MDBUser user = userService.findUserByUserName(userName);
detailDTO.setData(user);
} catch (Exception e) {
e.printStackTrace();
detailDTO.setStatus(1);
detailDTO.setCode(400);
detailDTO.setMsg("获取用户信息异常:"+e.getMessage()); }
return detailDTO;
} }
package lf.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lf.entity.BsdUser;
import lf.service.BsdUserSerive;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource;
import java.util.Date; @Controller
@RequestMapping(value="${modulePath}/page")
@Api(description = "页面跳转控制器")
public class PageController {
@Resource
private BsdUserSerive userSerive;
/**
* 进入公司主页
*/
@RequestMapping(value = "/company",method = RequestMethod.GET)
public String gotoCompanyPage(Model model/*,@RequestParam @ApiParam("用户id") Long id*/){
//BsdUser user = userSerive.getUserById(id);
model.addAttribute("time",new Date());
model.addAttribute("loginName","甘雨路");
//model.addAttribute("loginName",user.getName());
return "main";
} }
package lf.controller;

import io.swagger.annotations.*;
import lf.entity.BsdUser;
import lf.service.BsdUserSerive;
import lf.utils.CommonDTO;
import lf.utils.CommonUtil;
import lf.utils.redis.RedisUtil;
import org.springframework.stereotype.Controller;
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 javax.annotation.Resource; @Api(description = "用户控制器")//swagger注解用于类
@Controller // 控制器注解
@RequestMapping(value="${modulePath}/user")
public class UserController { @Resource
private RedisUtil redisUtil; @Resource
private BsdUserSerive userSerive; @ResponseBody
@RequestMapping(value = "/info",method = RequestMethod.GET)
public CommonDTO<BsdUser> getUserbyId(@RequestParam @ApiParam("用户id") Long id){
CommonDTO<BsdUser> detailDTO = new CommonDTO<>(0,1);
try {
BsdUser user = null;
// 从缓存中获取数据
user = (BsdUser)redisUtil.get(CommonUtil.USER_INFO_KEY + id);
if (user == null){
user = userSerive.getUserById(id);
// 将数据存入缓存
redisUtil.set(CommonUtil.USER_INFO_KEY + id,user);
System.out.println("从数据库获取的数据");
}else {
System.out.println("从缓存中获取数据");
} //BsdUser user = userSerive.getUserById(id);
detailDTO.setData(user);
} catch (Exception e) {
e.printStackTrace();
detailDTO.setStatus(1);
detailDTO.setCode(400);
detailDTO.setMsg("获取用户信息异常:"+e.getMessage()); } return detailDTO;
} }

添加工具类

package lf.utils.redis;

import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.*; import java.io.Serializable;
import java.util.Set;
import java.util.concurrent.TimeUnit; /**
* redis cache 工具类
*
*/
public final class RedisUtil {
private Logger logger = Logger.getLogger(RedisUtil.class);
private RedisTemplate<Serializable, Object> redisTemplate;
private String redisIp; /**
* 批量删除对应的value
*
* @param keys
*/
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
} /**
* 批量删除key
*
* @param pattern
*/
public void removePattern(final String pattern) {
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0)
redisTemplate.delete(keys);
} /**
* 删除对应的value
*
* @param key
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
} /**
* 判断缓存中是否有对应的value
*
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
} /**
* 读取缓存
*
* @param key
* @return
*/
public Object get(final String key) {
// LogUtil.error("-----------------------------redisIp"+redisIp);
// System.err.println("-----------------------------redisIp"+redisIp);
Object result = null;
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
result = operations.get(key);
return result;
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
// LogUtil.error("-----------------------------redisIp"+redisIp);
// System.err.println("-----------------------------redisIp" + redisIp);
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value, Long expireTime) {
// LogUtil.error("-----------------------------redisIp"+redisIp);
// System.err.println("-----------------------------redisIp"+redisIp);
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public void setRedisTemplate(RedisTemplate<Serializable, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
} public String getRedisIp() {
return redisIp;
} public void setRedisIp(String redisIp) {
this.redisIp = redisIp;
} /**
* 设置新值,同时返回旧值
* @param lockKey
* @param stringOfLockExpireTime
* @return
*/
public String getSet(final String lockKey, final String stringOfLockExpireTime) {
String result = redisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection redisConnection) throws DataAccessException {
byte[] bytes = redisConnection.getSet(lockKey.getBytes(), stringOfLockExpireTime.getBytes());
if(bytes != null) {
return new String(bytes);
}
return null;
}
});
return result;
} /**
* 如果不存在key则插入
* @param lockKey
* @param stringOfLockExpireTime
* @return true 插入成功, false 插入失败
*/
public boolean setnx(final String lockKey, final String stringOfLockExpireTime) {
return redisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
return redisConnection.setNX(lockKey.getBytes(), stringOfLockExpireTime.getBytes());
}
});
} /**
* setnx 和 getSet方式插入的数据,调用此方法获取
* @param key
* @return
*/
public String getInExecute(final String key) {
String result = redisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection redisConnection) throws DataAccessException {
byte[] bytes = redisConnection.get(key.getBytes());
if (bytes == null) {
return null;
} else {
return new String(bytes);
}
}
});
return result;
} /**
* 将缓存保存在map集合中
* @param redisKey
* @param mapKey
* @param mapValue
* @return
*/
public boolean putInMap(final String redisKey, String mapKey, Object mapValue) {
boolean result = false;
try {
HashOperations<Serializable, Object, Object> operations = redisTemplate.opsForHash();
operations.put(redisKey, mapKey, mapValue);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public Object getOneFromMap(final String redisKey, String mapKey) {
HashOperations<Serializable, Object, Object> operations = redisTemplate.opsForHash();
return operations.get(redisKey, mapKey);
} public Object getAllFromMap(final String redisKey) {
HashOperations<Serializable, Object, Object> operations = redisTemplate.opsForHash();
return operations.values(redisKey);
} public void removeFromMap(final String redisKey, Object obj) {
HashOperations<Serializable, Object, Object> operations = redisTemplate.opsForHash();
operations.delete(redisKey, obj);
} public boolean setList(final String key, Object value) {
boolean result = false;
try {
ListOperations<Serializable, Object> listOperations = redisTemplate.opsForList();
listOperations.leftPush(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} public Object getList(final String key) {
ListOperations<Serializable, Object> listOperations = redisTemplate.opsForList();
return listOperations.range(key,0,listOperations.size(key));
} }
package lf.utils;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import java.util.Map; /**
* 详情Dto
* @param <T>
*/
@ApiModel(description = "详情DTO")
public class CommonDTO<T>{ @ApiModelProperty(value = "提示信息")
private String msg; @ApiModelProperty(value = "0 代表无错误 1代表有错误")
private Integer status; @ApiModelProperty(value = "总记录")
private Integer total; @ApiModelProperty(value = "业务数据")
private T data; @ApiModelProperty(value = "200 代表无错误 400代表有错误--->加入这个字段是原生需求")
private Integer code; @ApiModelProperty(value = "当前页码")
private Integer pageNo = 1; @ApiModelProperty(value = "当前页码,默认:10")
private Integer pageSize = Integer.valueOf(10); // 页面大小,设置为“-1”表示不进行分页(分页无效) @ApiModelProperty(value = "总记录数")
private long totalSize;// 总记录数,设置为“-1”表示不查询总数 private Map<String,Object> DataMap; public CommonDTO(Integer status) {
if (status == 0){
this.status = status;
this.code = 200;
this.msg = "操作成功";
}
this.data = null;
} public CommonDTO(Integer status, Integer total) {
if (status == 0){
this.status = status;
this.code = 200;
this.msg = "操作成功";
}
this.data = null;
this.total = total;
} public Map<String, Object> getDataMap() {
return DataMap;
} public void setDataMap(Map<String, Object> dataMap) {
DataMap = dataMap;
} public Integer getCode() {return code;} public void setCode(Integer code) {this.code = code;} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public Integer getStatus() {
return status;
} public void setStatus(Integer status) {
this.status = status;
} public Integer getTotal() {
return total;
} public void setTotal(Integer total) {
this.total = total;
} public T getData() {
return data;
} public void setData(T data) {
this.data = data;
} public Integer getPageNo() {
return (pageNo!=null&&pageNo>0)?pageNo:-1;
} public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
} public Integer getPageSize() {
return (pageSize!=null&&pageSize>0)?pageSize:10;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} /**
* 获取设置总数
* @return
*/
public long getTotalSize() {
return totalSize;
} /**
* 设置数据总数
* @param count
*/
public void setTotalSize(long totalSize) {
this.totalSize = totalSize;
if (pageSize >= totalSize){
pageNo = 1;
}
} @Override
public String toString() {
return "CommonDTO{" +
"msg='" + msg + '\'' +
", status=" + status +
", total=" + total +
", data=" + data +
'}';
}
}
package lf.utils;

import io.swagger.annotations.Api;

@Api(value = "常量类")
public class CommonUtil { public static final String USER_INFO_KEY = "USER_INFO_KEY";
}

添加相关框架配置启动类

package lf.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration
public class DatasourceConfiguration { @Bean(name = "dataSource")
@Qualifier(value = "dataSource")
@Primary
@ConfigurationProperties(prefix = "c3p0")
public DataSource dataSource()
{
return DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();
}
}
package lf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex; @Configuration
@EnableSwagger2
public class SwaggerConfig { @Bean
public Docket api_lf(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("api_lf")
.genericModelSubstitutes(DeferredResult.class)
.useDefaultResponseMessages(false)
.forCodeGeneration(false)
.pathMapping("/")
.select()
.paths(or(regex("/lf/.*")))
.build()
.apiInfo(apiInfo()); } /**
* 构建api文档详细信息
*/
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo(
"甘雨路 API",// 标题
"API 描述说明",//描述
"1.0",//版本
"NO terms of service",
"lf@qq.com",// 创建人
"The Apache License, Version 2.0",
"http://www.apache.org/licenses/LICENSE-2.0.html"
);
return apiInfo;
} }

添加SpringBoot启动类

package lf;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @SpringBootApplication
@EnableAutoConfiguration
@MapperScan("lf.mapper") // mapper层的路径
@PropertySource({"classpath:mongoDB.properties",
"classpath:c3p0.properties",
"classpath:mybatis.properties",
"classpath:redis.properties"})// 读取.properties 文件路径
@ImportResource({"classpath:config/applicationContext-jedis.xml"})// 读取文件路径
public class SkyRainbowApplication extends SpringBootServletInitializer { public static void main(String[] args) {
/**
* Spring boot 程序入口
*/
SpringApplication.run(SkyRainbowApplication.class,args);
} /**
* 需要把web项目打成war包部署到外部tomcat运行时需要改变启动方式
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SkyRainbowApplication.class);
} public void addResourceHandlers(ResourceHandlerRegistry registry) {
//配置模板资源路径
registry.addResourceHandler("/**").addResourceLocations("classpath:/");
registry.addResourceHandler("/fly").addResourceLocations("classpath:/fly");
} public SkyRainbowApplication(){
super();
setRegisterErrorPageFilter(false);
} }

Spring boot 、mybatis、swagger、c3p0、redis 和mongodb 整合的更多相关文章

  1. spring boot+mybatis+swagger搭建

    环境概述 使用的开发工具:idea 2018 3.4 环境:jdk1.8 数据库:MariaDB (10.2.21) 包管理:Maven 3.5 Web容器:Tomcat 8.0 开发机系统:Wind ...

  2. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  3. Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结

    Spring Boot + MyBatis + Druid + Redis + Thymeleaf 整合小结 这两天闲着没事想利用**Spring Boot**加上阿里的开源数据连接池**Druid* ...

  4. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

  5. 7、Spring Boot 2.x 集成 Redis

    1.7 Spring Boot 2.x 集成 Redis 简介 继续上篇的MyBatis操作,详细介绍在Spring Boot中使用RedisCacheManager作为缓存管理器,集成业务于一体. ...

  6. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

  7. Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)

    摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决 ...

  8. spring boot + mybatis + druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  9. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  10. spring boot + mybatis + druid配置实践

    最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案. pom.xml需要引入mybatis 启动依赖: < ...

随机推荐

  1. java静态代理和动态代理(一)

    代理Proxy: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题. 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为 ...

  2. LambdaMART简介——基于Ranklib源码(一 lambda计算)

    学习Machine Learning,阅读文献,看各种数学公式的推导,其实是一件很枯燥的事情.有的时候即使理解了数学推导过程,也仍然会一知半解,离自己写程序实现,似乎还有一道鸿沟.所幸的是,现在很多主 ...

  3. maven安装之后,或者升级之后遇到的问题:could not find or load main class org.codehaus.plexus.class.....

    从maven2升级到maven3或者从maven3降级到maven2,M2_HOME环境变量改变后,在终端执行mvn -v,出现如下错误: Exception in thread "main ...

  4. 中南林业科技大学第十一届程序设计大赛-C:有趣的二进制

    链接:https://www.nowcoder.com/acm/contest/124/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言26214 ...

  5. 常见web安全攻防总结

    Web 安全的对于 Web 从业人员来说是一个非常重要的课题 , 所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助.今天这边文章主要的内容就是分析 ...

  6. flow flow-typed 定义简单demo

    flow-typed 安装 全局 npm install -g flow-typed 测试代码 一个简单全局函数 目录根目录 flow-typed userLibDef.js declare func ...

  7. 安装CentOS 6.x出现Disk sda contains BIOS RAID metadata

    今天在安装CentOS 6.6的时候,当进到检测硬盘步骤的时候,总是过不去,报错如下:Disk sda contains BIOS RAID metadata, but is not part of ...

  8. docker默认配置文件不存在问题解决

    Docker默认的配置文件/etc/default/docker或者/etc/sysconfig/docker都不起作用,查看了一下/lib/systemd/system/docker.service ...

  9. emacs之配置2,UI基本设置

    在-下建立目录emacsConfig,里面建立一些自己写的el脚本,下面是名字随便,我的 emacsConfig/ui-setting.el ;关闭Emacs的默认启动界面 (setq inhibit ...

  10. 深入浅出spring IOC中三种依赖注入方式

    深入浅出spring IOC中三种依赖注入方式 spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和 ...