这一次的总结是最关键的部分,主要涉及了ORM的三种操作,这些操作是项目的难点,三种操作包括多对一、多对多、一对多三种模式,接下来展示项目代码

1.多对一

clazz表对应grade表和charge表

bean

extend

ClazzVM.java

package com.briup.apps.poll.bean.extend;

import com.briup.apps.poll.bean.Grade;
import com.briup.apps.poll.bean.User; public class ClazzVM {
private Long id;
private String name;
private String description;
private Grade grade;
private User charge;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public User getCharge() {
return charge;
}
public void setCharge(User charge) {
this.charge = charge;
}
}

dao

extend

ClazzVMMapper.java

package com.briup.apps.poll.dao.extend;

import java.util.List;

import com.briup.apps.poll.bean.extend.ClazzVM;

public interface ClazzVMMapper {

    List<ClazzVM> selectAll();

    ClazzVM selectById(long id);
}

resources/mapper/extend/ClazzVMMapper.xml

和dao层功能相对应,实现查找功能

<?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="com.briup.apps.poll.dao.extend.ClazzVMMapper">
<select id="selectAll" resultMap="ClazzVMResultMap">
select * from poll_clazz
<!-- id,name,description,grade_id,charge_id -->
</select>
<select id="selectById" parameterType="long" resultMap="ClazzVMResultMap">
select * from poll_clazz where id = #{id}
<!-- id,name,description,grade_id,charge_id -->
</select> <!-- 定义结果集 -->
<resultMap type="com.briup.apps.poll.bean.extend.ClazzVM" id="ClazzVMResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="description" property="description"/>
<association
column="grade_id"
property="grade"
select="com.briup.apps.poll.dao.GradeMapper.selectByPrimaryKey">
</association>
<association
column="charge_id"
property="charge"
select="com.briup.apps.poll.dao.UserMapper.selectByPrimaryKey">
</association>
</resultMap>
</mapper>

标记的部分是将clazz表中的属性一一对应,在查找clazz的时候同时查找出clazz对应的年级和班主任信息

service

Impl

ClazzVMserviceImpl,java    实现所有IClazzVMService定义的功能,调用数据库层

IClazzVMService    定义方法,具体实现由Impl实现

package com.briup.apps.poll.service;

import java.util.List;

import com.briup.apps.poll.bean.Clazz;
import com.briup.apps.poll.bean.extend.ClazzVM; public interface IClazzService {
List<Clazz> findAll() throws Exception; List<ClazzVM> findAllClazzVM() throws Exception; void saveOrUpdateClazz(Clazz clazz) throws Exception; void deleteById(long id) throws Exception; void batchDelete(long[] ids) throws Exception;
}
package com.briup.apps.poll.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.briup.apps.poll.bean.Clazz;
import com.briup.apps.poll.bean.ClazzExample;
import com.briup.apps.poll.bean.extend.ClazzVM;
import com.briup.apps.poll.dao.ClazzMapper;
import com.briup.apps.poll.dao.extend.ClazzVMMapper;
import com.briup.apps.poll.service.IClazzService; @Service
public class ClazzServiceImpl implements IClazzService {
@Autowired
private ClazzMapper clazzMapper;
@Autowired
private ClazzVMMapper clazzVMMapper; @Override
public List<Clazz> findAll() throws Exception {
ClazzExample example = new ClazzExample();
return clazzMapper.selectByExampleWithBLOBs(example);
} @Override
public List<ClazzVM> findAllClazzVM() throws Exception {
return clazzVMMapper.selectAll();
} @Override
public void saveOrUpdateClazz(Clazz clazz) throws Exception {
if(clazz.getId()!=null){
clazzMapper.updateByPrimaryKey(clazz);
} else {
clazzMapper.insert(clazz);
}
} @Override
public void deleteById(long id) throws Exception {
clazzMapper.deleteByPrimaryKey(id); } @Override
public void batchDelete(long[] ids) throws Exception {
for(long id : ids) {
clazzMapper.deleteByPrimaryKey(id);
}
} }

controller   调用service接口

ClazzController.java

package com.briup.apps.poll.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.briup.apps.poll.bean.Clazz;
import com.briup.apps.poll.bean.extend.ClazzVM;
import com.briup.apps.poll.service.IClazzService;
import com.briup.apps.poll.util.MsgResponse; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; @Api(description="班级相关接口")
@RestController
@RequestMapping("/clazz")
public class ClazzController {
@Autowired
private IClazzService clazzService; @ApiOperation(value="保存或修改班级信息",
notes="如果参数中包含ID表示修改操作,否则表示保存操作")
@PostMapping("saveOrUpdateClazz")
public MsgResponse saveOrUpdateClazz(Clazz clazz){
try {
clazzService.saveOrUpdateClazz(clazz);
return MsgResponse.success("保存或更新成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
}
@ApiOperation(value="批量删除班级信息",
notes="参数为数组")
@PostMapping("batchDeleteClazz")
public MsgResponse batchDeleteClazz(long[] ids){
try {
clazzService.batchDelete(ids);
return MsgResponse.success("批量删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="通过ID删除班级信息",
notes="")
@GetMapping("deleteClazzById")
public MsgResponse deleteClazzById(long id){
try {
clazzService.deleteById(id);
return MsgResponse.success("删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="查询所有班级",
notes="班级中携带班级所属年级信息以及班主任信息")
@GetMapping("findAllVM")
public MsgResponse findAllVM(){
try {
List<ClazzVM> list = clazzService.findAllClazzVM();
return MsgResponse.success("success", list);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="查询所有班级",notes="单表")
@GetMapping("findAll")
public MsgResponse findAll(){
try {
List<Clazz> list = clazzService.findAll();
return MsgResponse.success("success", list);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
}
}

补充:多对一的保存和更新操作不需要保存班级和班主任信息,只需要保存两者id

2.一对多

question表对应options表,在查找question时需要把options的信息一起显示,保存问题时需要将问题和该问题的选项同时保存

bean

extend

QuestionVM.java

package com.briup.apps.poll.bean.extend;

import java.util.List;

import com.briup.apps.poll.bean.Options;

public class QuestionVM {
private Long id;
private String name;
private String questionType; private List<Options> options; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getQuestionType() {
return questionType;
} public void setQuestionType(String questionType) {
this.questionType = questionType;
} public List<Options> getOptions() {
return options;
} public void setOptions(List<Options> options) {
this.options = options;
} }

dao

extend

QuestionVMMapper.java   只实现的时查询功能

package com.briup.apps.poll.dao.extend;

import java.util.List;

import com.briup.apps.poll.bean.extend.QuestionVM;

public interface QuestionVMMapper {

    List<QuestionVM> selectAll();

}

/resources/extend/QuestionVMMapper.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="com.briup.apps.poll.dao.extend.QuestionVMMapper">
<select id="selectAll"
resultMap="QuestionVMResultMap">
select * from poll_question
<!-- id,name,questionType -->
</select> <!-- 定义结果集 -->
<resultMap type="com.briup.apps.poll.bean.extend.QuestionVM" id="QuestionVMResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="questionType" property="questionType"/>
<collection
column="id"
property="options"
javaType="ArrayList"
ofType="com.briup.apps.poll.bean.Options"
select="selectOptionsByQuestionId">
</collection>
</resultMap> <!-- 通过题目id查询属于该题目的选项信息 -->
<select id="selectOptionsByQuestionId"
parameterType="long"
resultType="com.briup.apps.poll.bean.Options">
select * from poll_options where question_id = #{id}
</select> </mapper>

service

impl

QuestionVMServiceImpl.java

IQuestionVMService

package com.briup.apps.poll.service;

import java.util.List;

import com.briup.apps.poll.bean.Question;
import com.briup.apps.poll.bean.extend.QuestionVM; public interface IQuestionService {
List<Question> findAll() throws Exception; List<QuestionVM> findAllQuestionVM() throws Exception; void saveOrUpdateQuestionVM(QuestionVM questionVM) throws Exception; void deleteById(long id) throws Exception; void batchDelete(long[] ids) throws Exception;
}
package com.briup.apps.poll.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.briup.apps.poll.bean.Options;
import com.briup.apps.poll.bean.OptionsExample;
import com.briup.apps.poll.bean.Question;
import com.briup.apps.poll.bean.QuestionExample;
import com.briup.apps.poll.bean.extend.QuestionVM;
import com.briup.apps.poll.dao.OptionsMapper;
import com.briup.apps.poll.dao.QuestionMapper;
import com.briup.apps.poll.dao.extend.QuestionVMMapper;
import com.briup.apps.poll.service.IQuestionService; @Service
public class QuestionServiceImpl implements IQuestionService {
@Autowired
private QuestionMapper questionMapper;
@Autowired
private QuestionVMMapper questionVMMapper;
@Autowired
private OptionsMapper optionsMapper; @Override
public List<Question> findAll() throws Exception {
QuestionExample example = new QuestionExample();
return questionMapper.selectByExample(example);
} @Override
public List<QuestionVM> findAllQuestionVM() throws Exception {
return questionVMMapper.selectAll();
} /**
* 保存或修改问题(包含选项)
* */
@Override
public void saveOrUpdateQuestionVM(QuestionVM questionVM) throws Exception {
//1. 分离questionVM,从中获取到Question Options
List<Options> options = questionVM.getOptions();
Question question = new Question();
question.setId(questionVM.getId());
question.setName(questionVM.getName());
question.setQuestiontype(questionVM.getQuestionType()); //question 问题对象,options 所有问题的选项
//2. 判断保存还是修改
if(question.getId() == null){
//2.1 保存
if(question.getQuestiontype().equals("简答题")){
//2.1.1 保存简答题,只需要保存题目相关信息
questionMapper.insert(question);
} else {
//2.1.2 保存单选和多选题的时候需要先保存题目信息,再保存选项信息
questionMapper.insert(question);
//如何获取刚刚插入到问题的ID
long questionId = question.getId();
for(Options option : options){
//为每个option设置question_id
option.setQuestionId(questionId);
//保存选项
optionsMapper.insert(option);
}
}
} else {
//2.2 修改
//2.2.1 修改题目信息
questionMapper.updateByPrimaryKey(question);
//2.2.2 修改选项信息(添加新选项,删除旧选项,对原来选项修改)
//1. 删除该题目原有的选项
OptionsExample example = new OptionsExample();
example.createCriteria().andQuestionIdEqualTo(question.getId());
optionsMapper.deleteByExample(example);
//2. 重新添加选项
long questionId = question.getId();
for(Options option : options){
//为每个option设置question_id
option.setQuestionId(questionId);
//保存选项
optionsMapper.insert(option);
}
}
} @Override
public void deleteById(long id) throws Exception {
questionMapper.deleteByPrimaryKey(id); } @Override
public void batchDelete(long[] ids) throws Exception {
for(long id : ids) {
questionMapper.deleteByPrimaryKey(id);
}
} }

补充:在实现保存功能时,没有输入Question的id,所以如果想要获取该id,需要修改QuestionMapper.xml中的insert方法

<insert id="insert" keyProperty="id" useGeneratedKeys="true" parameterType="com.briup.apps.poll.bean.Question">

加入两个属性keyProperty和useGeneratedKeys,这样就可以获取该问题的id了。

controller

QuestionController.java

package com.briup.apps.poll.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.briup.apps.poll.bean.Question;
import com.briup.apps.poll.bean.extend.QuestionVM;
import com.briup.apps.poll.service.IQuestionService;
import com.briup.apps.poll.util.MsgResponse; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; @Api(description="题库相关的接口")
@RestController
@RequestMapping("/question")
public class QuestionController {
@Autowired
private IQuestionService questionService; @ApiOperation(value="通过ID删除问题",
notes="删除题目的同时会把题目下所有的选项也给删除掉")
@GetMapping("deleteQuestionById")
public MsgResponse deleteQuestionById(long id){
try {
questionService.deleteById(id);
return MsgResponse.success("删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="批量删除问题",
notes="")
@PostMapping("batchDeleteQuestion")
public MsgResponse batchDeleteQuestion(long[] ids){
try {
questionService.batchDelete(ids);
return MsgResponse.success("删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
} } @ApiOperation(value="保存或修改问题",
notes="当id不为空表示修改,否则表示更新,保存和更新的时候需要提交选项数据")
@PostMapping("saveOrUpdateQuestion")
public MsgResponse saveOrUpdateQuestion(QuestionVM questionVM){
try {
questionService.saveOrUpdateQuestionVM(questionVM);
return MsgResponse.success("保存成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
} } @ApiOperation(value="查询所有问题",notes="单表")
@GetMapping("findAllQuestion")
public MsgResponse findAllQuestion(){
try {
List<Question> list = questionService.findAll();
// 返回成功信息
return MsgResponse.success("success", list);
} catch (Exception e) {
e.printStackTrace();
// 返回失败信息
return MsgResponse.error(e.getMessage()) ;
}
} @ApiOperation(value="查询所有问题",notes="问题中包含该问题所有的属性信息")
@GetMapping("findAllQuestionVM")
public MsgResponse findAllQuestionVM(){
try {
List<QuestionVM> list = questionService.findAllQuestionVM();
// 返回成功信息
return MsgResponse.success("success", list);
} catch (Exception e) {
e.printStackTrace();
// 返回失败信息
return MsgResponse.error(e.getMessage()) ;
}
}
}

3.多对多

问卷和问题的关系是多对多关系,他们之间有个关系表qq,用来保存question_id和questionnaire_id

bean

extend

QuestionnaireVM.java

package com.briup.apps.poll.bean.extend;

import java.util.List;

import io.swagger.annotations.Api;

@Api(value="问卷模型,问卷中包含多个问题,如果问题是单选和多选题,该问题也应该包含选项信息")
public class QuestionnaireVM {
private Long id;
private String name;
private String description; private List<QuestionVM> questionVMs; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public List<QuestionVM> getQuestionVMs() {
return questionVMs;
} public void setQuestionVMs(List<QuestionVM> questionVMs) {
this.questionVMs = questionVMs;
}
}

dao

extend

QuestionnaireVMMapper.java

package com.briup.apps.poll.dao.extend;

import com.briup.apps.poll.bean.extend.QuestionnaireVM;

public interface QuestionnaireVMMapper {

    QuestionnaireVM selectById(long id);
}

/resources/extend/QuestionnaireVMMapper.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="com.briup.apps.poll.dao.extend.QuestionnaireVMMapper">
<select id="selectById" resultMap="QuestionnaireVMResultMap">
select * from poll_questionnaire where id = #{id}
<!-- id,name,description -->
</select> <!-- 定义结果集 -->
<resultMap type="com.briup.apps.poll.bean.extend.QuestionnaireVM" id="QuestionnaireVMResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="description" property="description"/>
<collection
column="id"
property="questionVMs"
javaType="ArrayList"
ofType="com.briup.apps.poll.bean.extend.QuestionVM"
select="com.briup.apps.poll.dao.extend.QuestionVMMapper.selectByQuestionnaireId">
</collection>
</resultMap> </mapper>

补充:注意这里调用了QuestionVMMapper.java中的功能,通过questionnaire的id查找所有的question。

新的QuestionVMMapper.java多声名了一个selectByQuestionnaireId的方法

package com.briup.apps.poll.dao.extend;

import java.util.List;

import com.briup.apps.poll.bean.extend.QuestionVM;

public interface QuestionVMMapper {

    List<QuestionVM> selectAll();

    List<QuestionVM> selectByQuestionnaireId(long id);
}

新的QuestionVMMapper.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="com.briup.apps.poll.dao.extend.QuestionVMMapper">
<select id="selectAll"
resultMap="QuestionVMResultMap">
select * from poll_question
<!-- id,name,questionType -->
</select> <select id="selectByQuestionnaireId"
parameterType="long"
resultMap="QuestionVMResultMap">
select * from poll_question where id in (
select question_id
from poll_qq
where questionnaire_id = #{id}
) </select> <!-- 定义结果集 -->
<resultMap type="com.briup.apps.poll.bean.extend.QuestionVM" id="QuestionVMResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="questionType" property="questionType"/>
<collection
column="id"
property="options"
javaType="ArrayList"
ofType="com.briup.apps.poll.bean.Options"
select="selectOptionsByQuestionId">
</collection>
</resultMap> <!-- 通过题目id查询属于该题目的选项信息 -->
<select id="selectOptionsByQuestionId"
parameterType="long"
resultType="com.briup.apps.poll.bean.Options">
select * from poll_options where question_id = #{id}
</select> </mapper>

主要就是调用了QustionVMMapper.xml中标记的部分

service

impl

QuestionnaireServiceImpl.java

package com.briup.apps.poll.service;

import java.util.List;

import com.briup.apps.poll.bean.Questionnaire;
import com.briup.apps.poll.bean.extend.QuestionnaireVM; public interface IQuestionnaireService {
List<Questionnaire> findAll() throws Exception; QuestionnaireVM findById(long id) throws Exception; void saveOrUpdate(Questionnaire questionnaire , long[] questionIds) throws Exception; void deleteById(long id) throws Exception; void batchDelete(long[] ids) throws Exception;
}
package com.briup.apps.poll.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.briup.apps.poll.bean.Questionnaire;
import com.briup.apps.poll.bean.QuestionnaireExample;
import com.briup.apps.poll.bean.QuestionnaireQuestion;
import com.briup.apps.poll.bean.QuestionnaireQuestionExample;
import com.briup.apps.poll.bean.extend.QuestionnaireVM;
import com.briup.apps.poll.dao.QuestionnaireMapper;
import com.briup.apps.poll.dao.QuestionnaireQuestionMapper;
import com.briup.apps.poll.dao.extend.QuestionnaireVMMapper;
import com.briup.apps.poll.service.IQuestionnaireService; @Service
public class QuestionnaireServiceImpl implements IQuestionnaireService {
@Autowired
private QuestionnaireMapper qnMapper;
@Autowired
private QuestionnaireVMMapper qnVMMapper;
@Autowired
private QuestionnaireQuestionMapper qqMapper; @Override
public List<Questionnaire> findAll() throws Exception {
QuestionnaireExample example = new QuestionnaireExample();
return qnMapper.selectByExampleWithBLOBs(example);
} @Override
public QuestionnaireVM findById(long id) throws Exception {
return qnVMMapper.selectById(id);
} @Override
public void saveOrUpdate(Questionnaire questionnaire,
long[] questionIds) throws Exception {
//1. 判断是保存操作还是更新
if(questionnaire.getId() == null){
//1.1 保存
//1.1.1 保存问卷信息 {id:null,name:'',description:''}
qnMapper.insert(questionnaire);
long questionnaireId = questionnaire.getId();
//1.1.2 维护问卷和问题的关系 qq
for(long questionId : questionIds){
QuestionnaireQuestion qq = new QuestionnaireQuestion();
qq.setQuestionId(questionId);
qq.setQuestionnaireId(questionnaireId);
qqMapper.insert(qq);
}
} else {
//1.2 修改
//1.2.1 修改问卷信息
qnMapper.updateByPrimaryKey(questionnaire);
long questionnaireId = questionnaire.getId();
//1.2.2 删除问卷下所有的问卷问题关系
// delete from poll_qq where questionnaire_id = #{id}
QuestionnaireQuestionExample example = new QuestionnaireQuestionExample();
example.createCriteria().andQuestionnaireIdEqualTo(questionnaireId);
qqMapper.deleteByExample(example);
//1.2.3 保存新的问卷问题关系
for(long questionId : questionIds){
QuestionnaireQuestion qq = new QuestionnaireQuestion();
qq.setQuestionId(questionId);
qq.setQuestionnaireId(questionnaireId);
qqMapper.insert(qq);
}
}
} @Override
public void deleteById(long id) throws Exception {
qnMapper.deleteByPrimaryKey(id);
} @Override
public void batchDelete(long[] ids) throws Exception {
for(long id : ids) {
qnMapper.deleteByPrimaryKey(id);
}
} }

controller

QuestionnaireController.java

package com.briup.apps.poll.web.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.briup.apps.poll.bean.Questionnaire;
import com.briup.apps.poll.bean.extend.QuestionnaireVM;
import com.briup.apps.poll.service.IQuestionnaireService;
import com.briup.apps.poll.util.MsgResponse; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; @Api(description="问卷相关的接口")
@RestController
@RequestMapping("/questionnaire")
public class QuestionnaireController {
@Autowired
private IQuestionnaireService qnService; @ApiOperation(value="批量删除问卷",
notes="删除问卷的同时会把问卷和问题的关系解除掉,而问题保留")
@PostMapping("batchDeleteQuestion")
public MsgResponse batchDeleteQuestion(long[] ids){
try {
qnService.batchDelete(ids);
return MsgResponse.success("批量删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
} }
@ApiOperation(value="根据ID删除问卷信息",
notes="删除问卷的同时会把问卷和问题的关系解除掉,而问题保留")
@GetMapping("deleteQuestionnaireById")
public MsgResponse deleteQuestionnaireById(long id){
try {
qnService.deleteById(id);
return MsgResponse.success("删除成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="保存或修改问卷信息",
notes="如果问卷参数中包含id执行更新操作,否则执行修改操作")
@PostMapping("saveOrUpdateQuestionnaire")
public MsgResponse saveOrUpdateQuestionnaire(Questionnaire questionnaire,long[] questionIds){
try {
qnService.saveOrUpdate(questionnaire, questionIds);
return MsgResponse.success("保存或修改成功", null);
} catch (Exception e) {
e.printStackTrace();
return MsgResponse.error(e.getMessage());
}
} @ApiOperation(value="通过ID查询问卷",notes="问卷下具有问题信息")
@GetMapping("findQuestionnaireVMById")
public MsgResponse findQuestionnaireVMById(long id){
try {
QuestionnaireVM qnVM = qnService.findById(id);
// 返回成功信息
return MsgResponse.success("success", qnVM);
} catch (Exception e) {
e.printStackTrace();
// 返回失败信息
return MsgResponse.error(e.getMessage()) ;
}
} @ApiOperation(value="查询所有问卷",notes="单表")
@GetMapping("findAllQuestionnaire")
public MsgResponse findAllQuestionnaire(){
try {
List<Questionnaire> list = qnService.findAll();
// 返回成功信息
return MsgResponse.success("success", list);
} catch (Exception e) {
e.printStackTrace();
// 返回失败信息
return MsgResponse.error(e.getMessage()) ;
}
}
}

至此,三个ORM框架例子就是这样,但是要是想学好ORM框架仍然需要继续努力!!!

完成一个springboot项目的完整总结------三的更多相关文章

  1. 完成一个springboot项目的完整总结-------二

    我们接着上篇继续写,继续进行springboot项目 一. swagger2 接口描述,测试每个接口是否有效 1. 添加依赖 pom.xml 在编辑pom.xml之前,要先关闭spring-boot项 ...

  2. 完成一个springboot项目的完整总结一

    一. 项目的基础环境的搭建 1.javaJDK的安装和配置环境变量 2.mysql 3.eclipse 二.项目高级环境的搭建 使用maven前,一定要先安装JDK 1) 解压maven到briup目 ...

  3. springboot:快速构建一个springboot项目

    前言: springboot作为springcloud的基础,springboot的热度一直很高,所以就有了这个springboot系列,花些时间来了解和学习为自己做技术储备,以备不时之需[手动滑稽] ...

  4. spting Boot 创建一个springBoot项目

    spting Boot 创建一个springBoot项目 1)学习springBoot使用软件:IDEA软件(前面的文章有安装idea的过程). 也可以使用另一种方法在https://start.sp ...

  5. 第一个springboot项目

    公司最近的项目在使用springboot和springcloud中的一些组件,刚开始就是主要写一些业务代码,并不了解具体要去怎么配置等,所以最近刚好有时间,就学习学习,记录总结一下,初学,欢迎指正. ...

  6. 【spring Boot】1.创建第一个springBoot项目

    入手springBoot,搭建第一个springBoot项目. 看官方文档还是有点别扭. https://docs.spring.io/spring-boot/docs/current-SNAPSHO ...

  7. 使用IDEA创建一个springboot项目

    工欲善其事,必先利其器. 不难发现,还是有很多小朋友在使用eclipse开发java项目.当你接触IDEA后,一切都变得美好了. 使用IDEA创建一个springboot项目是一件极其简单的事情.界面 ...

  8. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...

  9. 使用idea创建第一个springboot项目

    版权声明:版权归作者所有,转载请注明出处. https://blog.csdn.net/qq_34205356/article/details/81098354 前言:如今springboot越来越火 ...

随机推荐

  1. 谷歌浏览器调试swoole长连接方法

    谷歌浏览器调试swoole长连接方法network标签里面的ws 看frames  

  2. docker+k8s基础篇一

    Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...

  3. 学习数据结构Day2

    之前学习过了数组的静态实现方法,同时将数组的所有有可能实现的方法都统一实现了一遍,之后支持了泛型的相关 概念,接下来就是如何对数组进行扩容的操作也就是实现动态数组. private void resi ...

  4. 关于MySQL的内连接,外连接的总结

    首先创建两个数据库表,用户表u,账户表a 先看一下数据库表: u表: a表: 1. 内连接.    关键字:inner join SQL语句: select u.*,a.ID as aid,a.mon ...

  5. redis 安装使用 & SpringBoot Redis配置

    1.安装 https://www.cnblogs.com/dingguofeng/p/8709476.html https://www.runoob.com/redis/redis-keys.html ...

  6. MySQL分库备份

    1.需求概述 每天00:00备份MySQL数据库数据: 每一个库生成一个文件,使用gzip压缩,文件名:backup_库名_yyyymmdd.sql.gz,注意yyyymmdd需要是前一天: 备份文件 ...

  7. C语言中特殊字符含义

    字符 中文 英文 说明  \n  换行符  newline     \t      Tab键  \b    backspace  退格键                        

  8. flutter 动画

    AnimatedCrossFade AnimatedCrossFade让俩个子widget 交替淡入淡出. class AnimatedCrossFade1 extends StatefulWidge ...

  9. ASP.NET 一般处理程序 接收文件上传

    public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain&qu ...

  10. js点击按钮复制内容到粘贴板

    复制内容到粘贴板,就是要选择需要复制的内容并执行document.execCommand("copy")命令: //复制内容到粘贴板 function copyToClipboar ...