上一章
SpringBoot自学第8天——文件上传、异常处理、Druid数据源
文章目录
前言
(考科二耽搁了。昨天练一天车今天上午考试,好在是满分一把过)
今天还是把知识捡起来,自学之路不能断。
今天学习了一下mybatis-plus的整合(中国人编写的框架),百度里好像没多少人用原生mybatis,还有蛮多人推荐用fluent mybatis,所以我决定还是用mybatis-plus,(mybatis就不整合了,脑子里只留了个印象),毕竟资料摆在这儿,以后有机会再看看fluent mybatis。
(再次声明,这是根据雷神的教程编写的学习文章,视频链接在前面章节有,没看视频就会觉得文章很不完整,我这里基本只是个目录,写个基本流程,方便日后查找资料而已)
一、整合Mybatis-plus
1. 添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
2. 安装MybatisX插件 并重启IDEA
二、创建数据库,使用Mybatis
1. 创建数据库表,并添加数据
我这里在MySQL8.0版本中 创建了一个名为eb的数据库,其中有一个user表。注意MySQL8版本连接的URL,我之前的项目URL写错了。(那时候没用到数据库,只整合了druid,所以没发现错误)
MySql 8版本写法:jdbc:mysql://localhost:3306/DatabaseName?SSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
2. 写一个po文件夹内的bean类对应表结构
代码如下(示例):
//注解来对应表名称(如果类名与表明相同就不用写,比如这里就可以不用写)
@TableName("user")
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
//当主键名id名不为'id'时,需要用注解来标明这是一个主键id
@TableId
Integer uid;
String user;
String pass;
}
3. 写一个mapper文件夹下的数据库映射接口类
直接继承mybatis plus的一个基类,这个基类拥有者基本的查询实现,比如一些简单的增删改查。
4. 写一个测试函数,来使用mapper
保证表内有数据
@Autowired
UserMapper mapper;
@Test
void userMapperTest(){
log.info("\nUser"+mapper.selectById(2));
}
运行结果:
三、封装成service层,开始正式使用
1. 创建service文件夹,创建一个UserService
接口类继承于Mybatis plus自带的service接口IService<T>
public interface UserService extends IService<User> {
//写两个接口,只是为了自定义名称,这两个实现已经被mybatis plus完成了
User getUserById(Integer id);
List<User> getAllUsers();
}
2. 实现接口 继承于mybatis plus已经实现的类ServiceImpl<UserMapper,User>
(这个是真的牛)
记得加@Service注解
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
@Autowired
UserMapper userMapper;
@Override
public User getUserById(Integer id) {
//return userMapper.selectById(id); 都可以
return this.getById(id);
}
@Override
public List<User> getAllUsers() {
return this.list();
}
}
3. 编写TableController
,添加一个页面的映射,来请求数据库的内容
@Controller
public class TableController {
@Resource
UserService userService;
@GetMapping("/dynamic_table.html")
public String dynamic_table(Model model){
model.addAttribute("userList",userService.getAllUsers());
return "table/dynamic_table";
}
}
html网页截取(thymeleaf语法,获取userList的内容):
<table class="display table table-bordered" id="hidden-table-info">
<thead>
<tr>
<th> User ID </th>
<th> UserName </th>
<th class="hidden-phone"> Password </th>
</tr>
</thead>
<tbody>
<tr class="gradeX" th:each="user,status:${userList}">
<td th:text="${status.count}"></td>
<td th:text="${user.user}"></td>
<td th:text="${user.pass}"></td>
</tr>
</tbody>
</table>
运行截图:
mybatis plus分页配置
添加config类:
@Configuration
public class MyConfig implements WebMvcConfigurer {
/**
* Mybatis plus分页配置 只要配置这一个bean就可以了
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//分页查询配置成MySQL数据库语法
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
//设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInnerInterceptor.setOverflow(true);
//设置最大查询限制
//paginationInnerInterceptor.setMaxLimit();
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
分页的使用
@GetMapping("/dynamic_table.html")
public String dynamic_table(@RequestParam(value = "page",defaultValue = "1") Integer page,
@RequestParam(value = "limit",defaultValue = "5") Integer limit,
Model model){
//这一句是上一步骤中测试userService的语句
model.addAttribute("userList",userService.getAllUsers());
//新建一个Page对象,第一个参数:查询第几页 第二个参数:每页的数据条数
Page<User> userPage = new Page<>(page, limit);
//用userService调用page()函数就可以查询某页的数据
Page<User> pages = userService.page(userPage, null);
//把数据放入request域,以便用EL表达式取值
model.addAttribute("page",pages);
return "table/dynamic_table";
}
运行结果:
需要一些前端知识,项目已踩完视频的坑。
总结
测试项目gitee源码地址:SpringBoot自学第9天——Mybatis plus的整合与使用