&代表在后台运行 nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 nohup java -jar sam-service-mongo-0.0.1.jar -server -Xms256m -Xmx1024m -Xss256k > ./run.log 2>&1 & nohup java -jar sam-service-mongo-0.0.1.jar > ./run.log 2>&1 & http://localhost:16031/test/hello 执行顺序 @RestController-->@Service-->interface --------------------------------------------------------------------------------------------------------------------------- import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; /** * @author fenglei.ma 2017/12/21 17:21 */ @RestController @RequestMapping("/dict/entity") public class DictEntityController extends BaseController { private static final Logger logger = Logger.getLogger(DictEntityController.class); @Autowired private DictEntityService dictEntityService; /** 保存 */ @RequestMapping(value = "/save", method = RequestMethod.POST) public RespObj save(DictEntity entity) { logger.info("param -> entity" + entity); dictEntityService.save(entity); return build(); } /** 删除 */ @RequestMapping(value = "/remove", method = RequestMethod.POST) public RespObj remove(Long id) { logger.info("param -> id :" + id); dictEntityService.remove(id); return build(); } /** 列表 */ @RequestMapping(value = "/list", method = RequestMethod.POST) public RespObj list(RequestVO vo) { logger.info(vo.toString()); if (vo.getPage() == null) { vo.setPage(0); } if (vo.getPage() < 0) { vo.setPage(0); } if (vo.getSize() == null) { vo.setSize(10); } return build(dictEntityService.findByEntityWithPage(vo)); } @RequestMapping(value = "getall", method = RequestMethod.POST) public RespObj getAll(RequestVO param) { logger.info("param ->" + param.toString()); if (param.getPage() == null) { param.setPage(0); } if (param.getPage() < 0) { param.setPage(0); } if (param.getSize() == null) { param.setSize(10); } return build(dictEntityService.getAll(param)); } /** 修改 */ @RequestMapping(value = "update", method = RequestMethod.POST) public RespObj update(Long id, String name, String word, Integer type) { logger.info("param --> id :" + id + ",name :" + name + ",type:" + type); dictEntityService.update(id, name, word, type); return build(); } /** 根据 name 和 word 查询 */ @RequestMapping(value = "/find/nameword", method = RequestMethod.POST) public RespObj findByNameAanWordZ(RequestVO param) { logger.info("param ->" + param); DictEntity entity = new DictEntity(); BeanUtils.copyProperties(param, entity); List<DictEntity> result = dictEntityService.findByNameAndWord(entity); return build(result); } /** 根据 ids查询 */ @RequestMapping(value = "/find/ids", method = RequestMethod.POST) public RespObj findByNameAanWordZ(String ids) { logger.info("param -> ids" + ids); // Strings.isNullOrEmpty(o) List<Long> parseIds = Arrays.asList(ids.split(",")).stream() .map((t) -> Long.valueOf(t)).filter((o) -> !Objects.isNull(o)).collect(Collectors.toList()); List<DictEntity> result = dictEntityService.findByIdIn(parseIds); return build(result); } } --------------------------------------------------------------------------------------------------------------------------- import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; /** * @author fenglei.ma 2017/12/21 16:52 */ @Service public class DictEntityService { @Autowired private DictEntityDao dictEntityDao; public void save(DictEntity entity) { dictEntityDao.save(entity); } public List<DictEntity> findByNameAndWord(DictEntity entity){ return dictEntityDao.findByNameAndWord(entity.getName(), entity.getWord()); } public List<DictEntity> findByIdIn(List<Long> ids){ return dictEntityDao.findByIdIn(ids); } public void remove(Long id) { dictEntityDao.updateState(id, WordConstants.STATE_1); // dictEntityDao.delete(id); } public PageDto<DictEntity> findByEntityWithPage(RequestVO vo) { Specification<DictEntity> specification = new Specification<DictEntity>() { @Override public Predicate toPredicate(Root<DictEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> list = new ArrayList<Predicate>(); if(StringUtils.isNotBlank(vo.getName())) { list.add(criteriaBuilder.like(root.get("name").as(String.class), "%"+vo.getName()+"%")); } if(vo.getType() != null) { list.add(criteriaBuilder.equal(root.get("type").as(Integer.class), vo.getType())); } list.add(criteriaBuilder.equal(root.get("state").as(Integer.class), WordConstants.STATE_2)); Predicate[] p = new Predicate[list.size()]; return criteriaBuilder.and(list.toArray(p)); } }; Sort sort = new Sort(Direction.DESC, "id"); Pageable pageable = new PageRequest(vo.getPage(), vo.getSize(), sort); Page<DictEntity> pageResult = dictEntityDao.findAll(specification, pageable); return new PageDto<>(pageResult.getTotalElements(), pageResult.getContent()); } public PageDto<DictEntity> getAll(RequestVO vo){ Specification<DictEntity> specification = new Specification<DictEntity>() { @Override public Predicate toPredicate(Root<DictEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) { query.orderBy(cb.desc(root.get("crt").as(Date.class))); return query.getRestriction(); } }; Page<DictEntity> findAll = dictEntityDao.findAll(specification, new PageRequest(vo.getPage(), vo.getSize())); return new PageDto<>(findAll.getTotalElements(), findAll.getContent()); } public void update(Long id, String name, String word, Integer type){ dictEntityDao.update(id, name, word, type); } } ------------------------------------------------------------------------ package com.csf.study.service; import com.csf.study.domain.dao.DictEntityDao; import com.csf.study.domain.entity.DictEntity; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.List; /** * Created by fenglei.ma on 2018/4/23. 15:10 * jdbcTemplate 使用 */ @Service public class EntityService { private static final Logger logger = Logger.getLogger(EntityService.class); @Autowired private DictEntityDao dictEntityDao; // 使用spring 的 jdbcTemplate 进行查询 @Autowired private JdbcTemplate jdbcTemplate; // 使用jdbcTemplate 查询 自动将sql转化为对应的实体类 public List<DictEntity> findAll() { String sql = "select * from dict_xiaoma f where 1=1 "; List<DictEntity> dataList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(DictEntity.class)); return dataList; } public List<DictEntity> getEntityList() { String sql = "select * from dict_xiaoma f where 1=1 "; return jdbcTemplate.query(sql, new RowMapper<DictEntity>() { @Override public DictEntity mapRow(ResultSet rs, int rowNum) throws SQLException { DictEntity entity = new DictEntity(); entity.setName(rs.getString("name")); entity.setWord(rs.getString("word")); entity.setCrt(rs.getDate("crt")); entity.setCru(rs.getString("cru")); entity.setState(rs.getInt("state")); entity.setType(rs.getInt("type")); entity.setUpt(rs.getDate("upt")); return entity; } }); } @Transactional public void insertEntity() { Long maxId = dictEntityDao.findMaxId(); String sql = "insert into dict_xiaoma(id,name,word,state,type,crt,upu,upt) values(?,?,?,?,?,?,?,?)"; int numrow= jdbcTemplate.update(sql, new Object[]{maxId + 1, "吴欢", "wuhuan123", 2, 2, new Date(), "SO4793471", new Date()}); logger.info(" 添加成功 " + numrow + " 条数据"); } @Transactional public void update() { String sql = "update dict_xiaoma set name = ? , lastmodified_by = ? where id = ? "; int numrow= jdbcTemplate.update(sql, new Object[]{"新上古" ,"EF7114-A485522-B111", 8}); logger.info(numrow + " 条数据 修改成功"); } } --------------------------------------------------------------------------------------------------------------------------- import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.transaction.annotation.Transactional; import org.springframework.data.jpa.repository.Query; /** * @author fenglei.ma 2017/12/21 16:49 */ public interface DictEntityDao extends JpaRepository<DictEntity, Long>, JpaSpecificationExecutor<DictEntity> { @Modifying @Transactional @Query("update DictEntity u set u.state = :state where u.id = :id") int updateState(@Param("id") Long id, @Param("state") Integer state); @Modifying @Transactional @Query("update DictEntity u set u.name = :name, u.word = :word, u.type = :type where u.id = :id") int update(@Param("id") Long id, @Param("name") String name, @Param("word") String word, @Param("type") Integer type); // 根据字段自动映射 根据name查询 List<DictEntity> findByName(String name); // 根据 name 和 word 查询 List<DictEntity> findByNameAndWord(String name, String word); List<DictEntity> findByIdIn(List<Long> ids); @Query("select max(id) from DictEntity") Long findMaxId(); } --------------------------------------------------------------------------------------------------------------------------- import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; /** * @author fenglei.ma 2017/12/21 16:36 * mysql 版本实体类 */ @Entity // 实体类的注解 @Table(name = "dict_xiaoma") public class DictEntity implements Serializable { private static final long serialVersionUID = 1L; // 自增主键 @Id // 映射到表格中id的属性 @GeneratedValue // 自增的属性 private Long id; private String name; private String word; private Integer type; private Integer state; private String cru; private String upu; @Column(name = "lastmodified_by") // 将字段设置为 lastmodified_by @JsonIgnore // json序列化时字段被忽视 // @CreatedBy private String lastmodifiedBy; @Column(insertable = true) // true 为 insert sql 时进行插入 @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") // @CreatedDate private Date crt; @Column(insertable = true) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 指明时间存储格式 // @LastModifiedDate private Date upt; } --------------------------------------------------------------------------------------------------------------------------- /** * @author fenglei.ma 分页封装 */ public class PageDto<T> { private Long total; private List<T> result; public PageDto(Long total, List<T> result) { this.total = total; this.result = result; } } --------------------------------------------------------------------------------------------------------------------------- 配置文件信息 application.properties # 端口 server.port=16031 path.upload=/usr/loc/upload # msyql配置 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://192.168.250.208:3306/pandora spring.datasource.username=ada_user spring.datasource.password=ada_user #spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop # 是否打开验证 management.security.enabled=false # 是否打印出自动生产的SQL spring.jpa.show-sql=true # 项目启动是否根据实体类生成表格 spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.jackson.serialization.indent_output=false --------------------------------------------------------------------------------------------------------------------------- 日志配置信息 log4j.properties log4j.rootLogger=DEBUG,Console,LogFile,ErrorFile # Console appender # log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Threshold=INFO log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n # Save the log info to the log file # log4j.appender.LogFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.LogFile.File=/app/log/spring-boot-stuty/pring-boot-stuty.log log4j.appender.LogFile.Append=true log4j.appender.LogFile.Threshold=INFO log4j.appender.LogFile.layout=org.apache.log4j.PatternLayout log4j.appender.LogFile.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n # Save the log error to the log file # log4j.appender.ErrorFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.ErrorFile.File=/app/log/pring-boot-stuty/pring-boot-stuty_error.log log4j.appender.ErrorFile.Append=true log4j.appender.ErrorFile.Threshold=ERROR log4j.appender.ErrorFile.layout=org.apache.log4j.PatternLayout log4j.appender.ErrorFile.layout.ConversionPattern=%d{ISO8601} %5p %c{1}:%L - %m%n --------------------------------------------------------------------------------------------------------------------------- pom配置文件 pom.xml <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>com.csf</groupId> <artifactId>spring-boot-study</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>spring-boot-study</name> <url>http://www.ityouknow.com/</url> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath /><!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <starter.log4j.version>1.3.8.RELEASE</starter.log4j.version> <guava.version>20.0</guava.version> </properties> <dependencies> <!-- 核心模块 包括自动配置支持、日志和yaml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <!-- 排除spring boot对[spring-boot-starter-logging]的依赖,并增加依赖包[spring-boot-starter-log4j.jar] --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- web模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 测试模块 包括JUnit、Hamcrest、Mockito --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- jpa模块 数据持久化 利用Hibernate生成各种自动化的sql --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 开发环境的调试 热启动 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <!-- 实体数据库表映射 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <!-- 日志模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>${starter.log4j.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--//热启动 该配置必须--> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project> --------------------------------------------------------------------------------------------------------------------------- 启动类 package com.csf.study; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author fenglei.ma 2017/12/21 15:15 */ @SpringBootApplication public class StudyApplication { public static void main(String[] args) { SpringApplication.run(StudyApplication.class, args); } } --------------------------------------------------------------------------------------------------------------------------- package com.csf.study.web; import com.csf.study.domain.dao.DictEntityDao; import com.csf.study.params.RequestVO; import com.csf.study.service.EntityService; import org.apache.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.csf.study.domain.entity.DictEntity; import com.csf.study.dto.base.RespObj; import java.util.Date; import java.util.List; /** * @author fenglei.ma 2017/12/21 17:37 */ @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class DictEntityControllerTest { private static final Logger logger = Logger.getLogger(DictEntityControllerTest.class); @Autowired private DictEntityController dictEntityController; @Autowired private EntityService entityService; @Autowired private DictEntityDao dictEntityDao; // 新增操作 @Test public void tesdDaofindById() throws Exception { DictEntity entity = new DictEntity(); entity.setName("成都样子"); entity.setWord("趋势"); entity.setType(3); entity.setUpt(new Date()); entity.setCrt(new Date()); entity.setUpu("SO893171"); entity.setState(2); entity.setLastmodifiedBy("47542004755"); RespObj result = dictEntityController.save(entity); logger.info("结果为 = " + result); } // 更新操作 @Test public void updateId() throws Exception { DictEntity one = dictEntityDao.findOne(4l); one.setCru("74275121"); one.setLastmodifiedBy("144111111111"); one.setUpt(new Date()); one.setUpu("SO7141"); RespObj result = dictEntityController.save(one); logger.info("结果为 = " + result); } @Test public void tesd() throws Exception { RequestVO param = new RequestVO(); param.setName("liu.fengxi"); param.setWord("小仙"); RespObj result = dictEntityController.findByNameAanWordZ(param); logger.info("结果为 = " + result); } @Test public void findAll() throws Exception { List<DictEntity> all = entityService.findAll(); logger.info("结果为 = " + all); } @Test public void getEntityList() throws Exception { List<DictEntity> all = entityService.getEntityList(); logger.info("结果为 = " + all); entityService.insertEntity(); } @Test public void jdbcInsert() throws Exception { entityService.update(); } }