大纲:
动态SQL查询
留言板
1. 动态SQL
1.1 <if>
我们都注册过一些信息,有的信息是非必填项,改如何实现呢?
这个时候就需要使⽤动态标签来判断了
⽐如添加的时候性别gender为⾮必填字段,具体实现如 下:
注解:
如果性别为空:
如果性别不为空:
xml:
和注解中script标签的内容是一样的
1.2 <trim>
xml:
1.3 <where>
xml:
不适用<where>标签时
若所有条件为空:
则会多了where
可以通过where 1 = 1更改:
使用标签:
如果查询条件都为空,where标签会自动去除 where关键字.
也会去除最前面的and字符
注解:
1.4 <set>
不使用<set>标签
使用:
1.5 <foreach>
<foreach>标签此时就相当于where id in (...) 的括号中的内容
1.6 <sql> <include>
把一些重复的sql可以提取出来,使用<sql>来标识,使用<include>使用
<sql>::定义可重⽤的SQL⽚段
<include>:通过属性refid,指定包含的SQL⽚段
2. 留言板
2.1 数据库准备
2.2 前端
2.3 后端
MessageInfo:
@Data
public class MessageInfo {
private Integer id;
private Integer deleteFlag;
private Date createTime;
private Date updateTime;
private String from;
private String to;
private String message;
}
MessageController:
@Slf4j
@RequestMapping("/message")
@RestController
public class MessageController {
//private List<MessageInfo> messageInfos = new ArrayList<>();
@Autowired
private MessageService messageService;
@RequestMapping("/publish")
public Boolean publishMessage(MessageInfo messageInfo) {
log.info("发表留言");
//进行参数的校验
if (!StringUtils.hasLength(messageInfo.getFrom())
|| !StringUtils.hasLength(messageInfo.getTo())
|| !StringUtils.hasLength(messageInfo.getMessage())){
return false;
}
//添加留言
messageService.addMessage(messageInfo);
return true;
}
@RequestMapping("/getMessageInfo")
public List<MessageInfo> getMessageInfo(){
return messageService.getMessageInfo();
}
}
MessageService:
@Service
public class MessageService {
@Autowired
private MessageMapper messageMapper;
public void addMessage(MessageInfo messageInfo){
messageMapper.insertMessage(messageInfo);
}
public List<MessageInfo> getMessageInfo(){
return messageMapper.selectAllMessage();
}
}
MessageMapper:
@Mapper
public interface MessageMapper {
@Insert("insert into message_info(`from`,`to`,`message`) values(#{from},#{to},#{message})")
public void insertMessage(MessageInfo messageInfo);
@Select("select * from message_info where delete_flag=0")
List<MessageInfo> selectAllMessage();
}