总述
数据层开发
数据层实现Dao层
理解了。通常情况下,数据层的实现会包括DAO(Data Access Object)层,它是用来实现数据访问逻辑的一部分。DAO层的主要责任是与数据存储(例如数据库)进行交互,执行数据的CRUD操作(创建、读取、更新、删除)。下面我会解释一下DAO层的基本概念和作用。
DAO层的作用
- 解耦数据访问逻辑:将数据访问逻辑与业务逻辑分离,提高代码的模块化和可维护性。
- 提供数据访问接口:通过DAO接口,其他层(如服务层)可以调用统一的方法来访问数据,而不必关心底层数据库的细节。
- 支持事务控制:DAO层通常会支持事务处理,确保数据操作的一致性和可靠性。
总结
数据层的实现中包括DAO层,它是实现数据访问的核心部分,定义了数据操作的接口并提供具体的实现。通过良好设计的DAO层,可以有效地管理和操作数据,同时提高系统的可扩展性和性能。
在配置文件里引入MyBatisPlus和Druid的坐标
MyBatisPlus 的坐标在添加起步依赖的时候不能手动添加
只能在maven项目的pom文件中添加坐标后重新构建
导入Mybatis的坐标
写配置文件 注意配置文件是yml
server: port: 80 #下面这些内容是为了让MyBatis映射 #指定Mybatis的Mapper文件 # 专门用来配置的对象datasource spring: datasource: druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC username: root password: 123456 # 配置mybatis-plus mybatis-plus: global-config: db—config: table-prefix: tbl_
接下来是做数据层接口
package com.bigdata1421.ssmp.dao; import com.bigdata1421.ssmp.domain.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; // Mybatis的数据层注解 @Mapper public interface UserDao { @Select("select * from tbl_user where id= #{id}") User getById(Integer id); }
测试运行
Mybatis plus快速开发方案
指定模块操作
数据层接口可以直接简写
package com.bigdata1421.ssmp.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.bigdata1421.ssmp.domain.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; // Mybatis的数据层注解 @Mapper public interface UserDao extends BaseMapper<User>{ //Mybatis-plus //mp快速开发方案 // @Select("select * from tbl_user where id= #{id}") // User getById(Integer id); }
测试类直接调用Mybatis-plus统一父类的方法即可
即可进行增删改查的操作
这就是开发者越来越强的原因
测试一下
Mybatis-plus添加数据的id用的是雪花算法
我们需要在配置文件中设置
测试
package com.bigdata1421.ssmp.dao; import com.bigdata1421.ssmp.domain.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class UserDaoTestCase { @Autowired private UserDao userDao; //根据ID查询 @Test void testGetById(){ System.out.println(userDao.selectById(1)); } //增 @Test void testSave(){ User user=new User(); user.setId(10); user.setName("李懿航"); user.setAge(20); user.setGender(1); userDao.insert(user); } //改 @Test void testUpdate(){ User user=new User(); user.setId(10); user.setName("李懿航"); user.setAge(20); user.setGender(1); userDao.updateById(user); } //删 @Test void testDelete(){ userDao.deleteById(10); } //查询所有数据 @Test void testGetAll(){ System.out.println( userDao.selectList(null);); } //分页查询 @Test void testGetPage(){ } //按条件查询 @Test void testGetBy(){ } }
开发方案
小结
开启MP运行日志
在yml配置文件里配置mybatis的信息
# 配置mybatis-plus mybatis-plus: global-config: db—config: table-prefix: tbl_ id-type: auto configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在控制台输出打印日志
后面功能上线运行后可不能开启日志
这些操作只能是我们在调试的打开日志
便于我们查看信息
分页查询
分页查询怎么去做呢
我们的分页操作就是在原始的查询操作上挂上limit关键字
往SQL语句后面添加默认内容
所以我们要创建一个拦截器
package com.bigdata1421.ssmp.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; //拦截器 //一个配置类注解 表示能被spring识别到 @Configuration public class MPconfig { //第三方bean创建注解 创建一个bean容器 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }
启动类所在包及其子包下的所有bean都会被识别加载
我们加了@Configuration注解 而且 放在启动类所在包及其子包下
所以能被扫描到
这样就能实现分页查询
//分页查询 @Test void testGetPage(){ IPage page=new Page(1,3); //这是那一页的数据 每一页显示多少数据 userDao.selectPage(page,null); }
小结
完全就是一个固定格式
内部就是帮你去拼SQL
我们要在调试过程中去查看SQL语句
这样才能看见SQL语句动态变化
条件查询
//按条件查询 @Test void testGetBy(){ //容器 QueryWrapper<User> qw=new QueryWrapper<>(); //条件 qw.like("name","高"); //查询 userDao.selectList(qw); }
运行后我们主要看SQL语句和查询结果
安全性高的写法
用方法引用去写
但是我们要提高Mybatis - plus 的版本
void testGetBy2(){ // select * from tbl_ where name like %高% //容器 QueryWrapper<User> qw2=new QueryWrapper<User>(); //条件 qw2.like(User::getName,"高"); //查询 userDao.selectList(qw2); }
以后
但是这种 如果传入的参数name是空
是会将 null 拼接到sql语句后进行查询的
这很显然不符合我们的规范
所以我们应该优化代码
小结
个人号推广
博客主页
多多!-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482