Spring Boot 结合 Mybatis 对 MySQL 数据库操作


这里结合我最近在做的私信来说一下吧

环境

IDE: IDEA 2020.01
JDK: 1.8
SQL : MySQL 5.5

引入依赖

在pom文件中添加依赖,并在右上角点击在这里插入图片描述即可

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
 		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

等到更新完成后可以在右方的maven中点击Dependencies进行查看依赖的引入。
在这里插入图片描述

application.properties

配置MySQL的相关

spring.datasource.url=jdbc:mysql:///doctor?characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=yourName 
spring.datasource.password=yourPassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Bean

这里的@Data 注解就使用到了我们前面的 lombok 依赖,它可以自动帮你生成getter/setter以及 toString 方法

@Data
public class Message {
    private String id;
    private String sender;
    private String receiver;
    private String content;
    private Long gmtCreate;
    private Integer hasRead;
    private String forUser;
}

如果你没有下载过 lombok 的插件,你可以点击 File -> Settings -> Plugins ,并下载相关的插件,否则你在使用 get/set 方法的时候会爆红(但是程序可以正常运行,不太雅观)
在这里插入图片描述

xxxMapper 和 xxxMapper.xml

MyBatis的相关知识你可以去自行百度了解一下,这里不再进行赘述。

这是我们 mapper 文件中的两个操作,插入和查找。

我们可以看到在插入的时候是可以直接写对象的,而不是将参数一个个在方法中写出并在 SQL 语句中对应赋值。如果采用笔者这种写法的话,需要把 values 后的赋值顺序弄清楚,否则会出现顺序错乱。当然你也可以在 values 前加上 (列1,列2 …)

@Mapper
public interface MessageMapper {

    @Insert("insert into message values (#{id},#{sender},#{receiver},#{gmtCreate},#{content},#{hasRead},#{forUser})")
    public void insertMsg(Message message);

    public List<Message> selectMessages(@Param("sender") String sender,
                                        @Param("receiver")String receiver,
                                        @Param("forUser")String forUser);

 }

第一个 Insert 是使用了注解,记得使用 Mapper 文件的注解 @Mapper

第二个 Select 是使用 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.youyiwen.Mapper.MessageMapper">
    <select id="selectMessages" resultType="com.youyiwen.Bean.Message">
        select * from message where
        ((sender = #{sender} and receiver = #{receiver}) or (sender = #{receiver} and receiver = #{sender}))
        and for_user = #{forUser}
        order by gmt_create
    </select>
</mapper>

需要注意的一点是 在返回一个 List 的时候,xml 文件中的 resultType 仍然是个体对象

MessageDTO

DTO 将在展示的时候用到,如果不需要则可以直接跳过。

@Data
public class MessageDTO {
    private Message message;
    private User sender;
    private User receiver;
}

MessageService

public interface MessageService {
    public List<MessageDTO> messagesList(String sender, String receiver,String forUser);
}

MessageServiceImpl

面向对象,面向接口

这里注意要加@Service,否则的话,就找不到 Service 了

还有在引入 Mapper 文件,要使用@Autowired 自动注入,虽然会出现波浪线,但是没有关系的!

@Service
public class MessageServiceImpl implements MessageService {
    @Autowired
    private MessageMapper messageMapper;

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<MessageDTO> messagesList(String sender,String receiver,String forUser) {
        List<MessageDTO> list = new ArrayList<>();
        List<Message> messagesList = messageMapper.selectMessages(sender,receiver,forUser);
        for (Message message : messagesList) {
            MessageDTO messageDTO = new MessageDTO();
            User senderUser = userMapper.selectUserByName(message.getSender());
            User receiveUser = userMapper.selectUserByName(message.getReceiver());
            messageDTO.setMessage(message);
            messageDTO.setSender(senderUser);
            messageDTO.setReceiver(receiveUser);
            list.add(messageDTO);
        }
        return list;
    }
}

MessageController

鉴于MessageController中有一堆不相关的内容,这里只给出使用到的部分。

    @Autowired
    private MessageService messageService;
@GetMapping("/userCenter/communicate/{receiver}")
    public String chatWithOthers(@PathVariable("receiver") String receiver,
                                 Model model, HttpSession session) {
       List<MessageDTO> list = messageService.messagesList(sender, receiver, sender);
        model.addAttribute("messages", list);
       return "communicate";
    }

结果展示

在这里插入图片描述

这里的结果牵扯到我的另一篇文章,如果你有兴趣的话可以去看一下另一篇文章
ajax 长轮询实现 私信(聊天)功能

有疑问请看这里

鉴于笔者水平限制,如果您在文中对笔者的某些描述有所疑惑或发现错误,欢迎在评论或私信中指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值