上文 SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发我们已经开发完了实体类
我们就可以做数据层了
目前来讲 数据层技术 使用了最大的自然是 MyBatis 但其实MyBatis-Plus在国内很多中小企业还是使用的挺多的
这次 我们主要是通过MyBatis-Plus和Druid来做这件事情
这两个工具的坐标呢 我们之前是已经导进去了
然后 找到项目配置文件 application.yml
添加如下数据库配置代码
spring:
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: root
mybatis-plus:
global-config:
db-config:
id-type: auto
这里这个不要直接复制 首先 前面的没什么 但 URL 我只想的是本地 3306端口 如果你没设置过 一般都是一样的 然后 指定后面的 下面的test数据库
类型 我们设置的 MySql
然后 下面 用户名和密码 因为我一直没动过 所以都是默认的 root
下面的配置 则是在告诉他 我们的id使用数据自增的特性
然后 做数据层接口
在启动类同目录下 创建 dao包
下面创建一个接口 叫 bookDao
参考代码如下
package com.example.bookconfig.dao;
import com.example.bookconfig.domain.book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface bookDao {
@Select("select * from book where id = #{id}")
book getById(Integer id);
}
我们想用 @Mapper 声明MyBatis
然后 写了一个函数 用Select挂了sql上去 函数接收一个 参数id 数字类型 sql的意思大体就是通过id寻找对应的一条数据
但是 现在我们数据库的book显然没有数据啊 那么 我们就来给他加一条 还是打开MySql管理工具
进入查询 输入并运行sql
INSERT INTO `book`(`type`,`name`,`description`)
VALUES(1,"小猫猫","超级可爱");
这就是个添加语句 因为 id是一个主键自动增长的字段 我们不用管 所以 type 1 name 小猫猫 description 超级可爱
运行成功后 我们再次查看book表
可以看到 这条数据就加进去了
然后 我们来到测试类
编写代码如下
package com.example.bookconfig;
import com.example.bookconfig.dao.bookDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BookConfigApplicationTests {
@Autowired
private bookDao bookDao;
@Test
void contextLoads() {
System.out.println(bookDao.getById(1));
}
}
这里 调用了 我们刚刚写的bookDao接口中的getById方法查询了id等于1的数据
我们右键运行测试类
运行结果如下
也是成功帮我找到了这条数据
当然 我们这里只是试一下能不能跑起来 Mp不会这么开发 他让我自己这样写sql太麻烦了 很多东西它都帮你封装好了
我们直接将bookDao接口 的代码修改如下
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.bookconfig.domain.book;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface bookDao extends BaseMapper<book> {
}
我们自己通过继承BaseMapper接口 来使用其中的函数 然后 泛型为 操作book实体类 你不指定实体类 你肯定要告诉他你要操作哪个表 哪个类对吧
他就会通过你给他的类 去寻找同名的表
这里 我们按住Ctrl 鼠标点进去看一下
这个接口中就自带这么多操作
我们测试类直接将getById 改成 selectById就好了
运行结果如下
很明显 根据id查询就OK了 然后 我们来测试一下其他几个方法
先是添加
我们在测试类编写如下代码
package com.example.bookconfig;
import com.example.bookconfig.dao.bookDao;
import com.example.bookconfig.domain.book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class BookConfigApplicationTests {
@Autowired
private bookDao bookDao;
@Test
void contextLoads() {
book book = new book();
book.setType(0);
book.setName("母猪的产后护理");
book.setDescription("深度研究母猪产后护理的高级哲学以及母猪的历史价值");
bookDao.insert(book);
}
}
简单说 我们定义了一个book对象 通过set方法 将他的几个值都给了内容
还是那句话 id不需要管 因为是有自增属性的
然后 通过BaseMapper提供的insert方法将对象的内容插入到数据库中去 我们运行完代码查看数据库
book book = new book();
book.setId(1);
book.setType(0);
book.setName("java从入门到放弃");
book.setDescription("讲述当代打工人从入学被坑到弃坑投奔其他行业的悲惨经历");
bookDao.updateById(book);
BaseMapper更改数据的方式叫updateById
因为他要根据id做更改 所以 我们还是要用set将id赋值 告诉他改第几条
然后 我们记好数据库中 id为1数据的内容
我们运行代码 再去数据库中查看book表 数据如下 很明显已经修改成功了
然后 我们编写代码如下
bookDao.deleteById(2);
没错 根据id删除的方法叫 deleteById
我们将id为2 就是我们刚加进去的数据给他干掉
运行代码然后 去数据库刷新 book表
很明显 第二条数据就被干掉了
不过这样 不太方便我们看查询全部数据的效果 我们重新执行一次添加的代码将数据加回来
这样就会好一点
然后 我们在测试类中编写代码如下
System.out.println(bookDao.selectList(null));
selectList是用来查询全部的方法 但是 这个要写条件 但我们就想查全部 那就直接 传个null给他
运行结果如下
可以看到 他是查询到了全部的数据