新增文献接口开发
This commit is contained in:
13
src/main/java/com/genepioneer/GenepioneerApplication.java
Normal file
13
src/main/java/com/genepioneer/GenepioneerApplication.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.genepioneer;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@MapperScan("com.genepioneer.mapper") // 扫描mapper包
|
||||
@SpringBootApplication
|
||||
public class GenepioneerApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(GenepioneerApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.genepioneer.controller;
|
||||
|
||||
import com.genepioneer.common.Result;
|
||||
import com.genepioneer.dto.LiteratureDTO;
|
||||
import com.genepioneer.service.LiteratureService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/literature")
|
||||
@Tag(name = "文献管理", description = "文献相关接口")
|
||||
public class LiteratureController {
|
||||
|
||||
@Autowired
|
||||
private LiteratureService literatureService;
|
||||
|
||||
// 接收前端POST请求,保存文献数据
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增文献")
|
||||
public Result<String> addLiterature(@RequestBody LiteratureDTO literatureDTO) {
|
||||
try {
|
||||
literatureService.addLiterature(literatureDTO);
|
||||
// 成功:返回200码
|
||||
return Result.success("新增文献成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// 失败:返回500码、自定义失败提示
|
||||
return Result.error("新增文献失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
17
src/main/java/com/genepioneer/dto/LiteratureDTO.java
Normal file
17
src/main/java/com/genepioneer/dto/LiteratureDTO.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.genepioneer.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class LiteratureDTO {
|
||||
// 字段名要和前端提交的参数名一致
|
||||
private Integer year;
|
||||
private String articleTitle;
|
||||
private String journalName;
|
||||
private BigDecimal impactFactor;
|
||||
private String sampleSource;
|
||||
private String literatureType;
|
||||
private String literatureUrl;
|
||||
|
||||
}
|
||||
16
src/main/java/com/genepioneer/entity/LiteratureInfo.java
Normal file
16
src/main/java/com/genepioneer/entity/LiteratureInfo.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.genepioneer.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data // Lombok注解,自动生成get/set/toString等方法
|
||||
public class LiteratureInfo {
|
||||
private Long id;
|
||||
private Integer year;
|
||||
private String articleTitle; // 对应表中article_title
|
||||
private String journalName; // 对应journal_name
|
||||
private BigDecimal impactFactor; // 对应impact_factor
|
||||
private String sampleSource; // 对应sample_source
|
||||
private String literatureType; // 对应literature_type
|
||||
private String literatureUrl; // 对应literature_url
|
||||
}
|
||||
14
src/main/java/com/genepioneer/mapper/LiteratureMapper.java
Normal file
14
src/main/java/com/genepioneer/mapper/LiteratureMapper.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.genepioneer.mapper;
|
||||
|
||||
import com.genepioneer.entity.LiteratureInfo;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface LiteratureMapper {
|
||||
|
||||
// 插入文献数据(字段对应entity的属性)
|
||||
@Insert("INSERT INTO literature_info(year, article_title, journal_name, impact_factor, sample_source, literature_type,literature_url) " +
|
||||
"VALUES(#{year}, #{articleTitle}, #{journalName}, #{impactFactor}, #{sampleSource}, #{literatureType},#{literatureUrl})")
|
||||
int insertLiterature(LiteratureInfo literatureInfo);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.genepioneer.service;
|
||||
|
||||
import com.genepioneer.dto.LiteratureDTO;
|
||||
|
||||
public interface LiteratureService {
|
||||
// 新增文献
|
||||
void addLiterature(LiteratureDTO literatureDTO);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.genepioneer.service.impl;
|
||||
|
||||
import com.genepioneer.dto.LiteratureDTO;
|
||||
import com.genepioneer.entity.LiteratureInfo;
|
||||
import com.genepioneer.mapper.LiteratureMapper;
|
||||
import com.genepioneer.service.LiteratureService;
|
||||
import org.springframework.beans.BeanUtils; // Spring工具类,用于对象属性拷贝
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class LiteratureServiceImpl implements LiteratureService {
|
||||
|
||||
@Autowired
|
||||
private LiteratureMapper literatureMapper;
|
||||
|
||||
@Override
|
||||
public void addLiterature(LiteratureDTO literatureDTO) {
|
||||
// 把DTO转成Entity
|
||||
LiteratureInfo literatureInfo = new LiteratureInfo();
|
||||
BeanUtils.copyProperties(literatureDTO, literatureInfo); // 自动拷贝同名属性
|
||||
|
||||
// 调用Mapper插入数据库
|
||||
literatureMapper.insertLiterature(literatureInfo);
|
||||
}
|
||||
}
|
||||
36
src/main/java/com/genepioneer/service/impl/UserService.java
Normal file
36
src/main/java/com/genepioneer/service/impl/UserService.java
Normal file
@@ -0,0 +1,36 @@
|
||||
package com.genepioneer.service.impl;
|
||||
|
||||
import com.genepioneer.common.exception.CustomException;
|
||||
import com.genepioneer.common.utils.MD5Util;
|
||||
import com.genepioneer.dto.LoginDTO;
|
||||
import com.genepioneer.entity.User;
|
||||
import com.genepioneer.mapper.UserMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
|
||||
@Service
|
||||
public class UserService {
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
public User login(LoginDTO loginDTO) {
|
||||
// 1. 获取登录账号(用户名/手机号)和密码
|
||||
String loginAccount = loginDTO.getLoginAccount();
|
||||
String password = loginDTO.getPassword();
|
||||
|
||||
// 2. 根据用户名/手机号查询用户
|
||||
User user = userMapper.selectByUsernameOrPhone(loginAccount);
|
||||
if (user == null) {
|
||||
throw new CustomException("用户名/手机号不存在");
|
||||
}
|
||||
|
||||
// 3. 校验密码(MD5比对)
|
||||
String md5Password = MD5Util.encrypt(password);
|
||||
if (!md5Password.equals(user.getPassword())) {
|
||||
throw new CustomException("密码错误");
|
||||
}
|
||||
|
||||
return user;
|
||||
}
|
||||
}
|
||||
1
src/main/resources/application.properties
Normal file
1
src/main/resources/application.properties
Normal file
@@ -0,0 +1 @@
|
||||
spring.application.name=genepioneer
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.genepioneer;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
@SpringBootTest
|
||||
@MapperScan("com.genepioneer. mapper")
|
||||
class GenepioneerApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
||||
37
src/test/java/com/genepioneer/test/LiteratureApiTest.java
Normal file
37
src/test/java/com/genepioneer/test/LiteratureApiTest.java
Normal file
@@ -0,0 +1,37 @@
|
||||
package com.genepioneer.test;
|
||||
|
||||
import com.genepioneer.dto.LiteratureDTO;
|
||||
import com.genepioneer.service.LiteratureService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
//@SpringBootTest
|
||||
public class LiteratureApiTest {
|
||||
|
||||
@Autowired
|
||||
private LiteratureService literatureService;
|
||||
|
||||
// 测试 Service 层(直接验证业务逻辑)
|
||||
@Test
|
||||
public void testAddLiterature() {
|
||||
// 构建测试数据
|
||||
LiteratureDTO dto = new LiteratureDTO();
|
||||
dto.setYear(2024);
|
||||
dto.setArticleTitle("基因测序技术的最新应用");
|
||||
dto.setJournalName("基因组学报");
|
||||
dto.setImpactFactor(new BigDecimal("12.3"));
|
||||
dto.setSampleSource("小鼠组织样本");
|
||||
dto.setLiteratureType("实验研究");
|
||||
|
||||
try {
|
||||
literatureService.addLiterature(dto);
|
||||
System.out.println("单元测试:新增文献成功");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("单元测试:新增文献失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user