Mybatis-Plus在SpringBoot项目中的使用流程

Mybatis—Plus中文官网 https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术

当前ORM框架主要有五种:
(1)Hibernate 全自动 需要写hql语句
(2)iBATIS 半自动 自己写sql语句,可操作性强,小巧
(3)mybatis
(4)eclipseLink
(5)JFinal

  • maven引入mybatis-plus框架

    •    <project.myatis-plus.version>3.5.3.1</project.myatis-plus.version>
          <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-boot-starter</artifactId>
                  <version>${project.myatis-plus.version}</version>
              </dependency>
      
  • 配置文件配置mybatis-plus

    • spring:
       datasource: #配置数据库连接
          driver-class-name: com.mysql.cj.jdbc.Driver #mysql8以后的版本,要加cj
          
          #添加日期数据,保证数据库和java添加时间一致,加上serverTimezone=Asia/Shanghai
          url: jdbc:mysql://localhost:3307/book?useUnicode=true&amp&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
          username: root
          password: 545666
          type: com.alibaba.druid.pool.DruidDataSource  #使用德鲁伊数据源
      mybatis-plus:
        configuration:
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台打印日志
           #添加日期数据,保证数据库和java添加时间一致,加上serverTimezone=Asia/Shanghai
      
  • 实体类添加注解做映射关系

    • @Data   //生成tostring和get&&set方法
      @NoArgsConstructor  //生成无参构造方法
      @AllArgsConstructor //生成全部有参构造方法
      @TableName("booktype") //映射表名
      public class BookType {
          @TableId(value = "id",type = IdType.AUTO) //映射主键
          private Integer id;
          @TableField("bt_name")  //映射表的列名
          private String name;
          @TableField("bt_createtime")
          private Date createTime;
          @TableField("bt_updatetime")
          private Date updateTime;
          @TableField("bt_creator")
          private String creator;
      
  • 写dao接口extends BaseMapper<实体类>

    • public interface IBookTypeDao extends BaseMapper<BookType> {//继承BaseMapper,mybatis-plus已经将sql语句写好
      }
      
  • 写service接口和实现

    • @Service
      public class BookTypeServiceImpl implements IBookTypeService {
          @Autowired
          IBookTypeDao iBookTypeDao;
      
          @Override
          public List<BookType> findAll() {
              return iBookTypeDao.selectList(null);
          }
      
          @Override
          public  List<BookType> findOne() {
      //Preparing: SELECT id,bt_name AS name,bt_createtime AS createTime,bt_updatetime AS       updateTime,bt_creator AS creator FROM booktype WHERE (bt_name LIKE ?)
      // Parameters: %学%(String)  wrapper封装的模糊查询语句
              
              //wrapper用来封装添加的查询条件
              QueryWrapper<BookType> wrapper = new QueryWrapper<>();
      
              wrapper.like("bt_name","学");
      
              return iBookTypeDao.selectList(wrapper);
          }
      
          @Override
          public List<BookType> orderByCreateTimeDesc() {
              //wrapper用来封装添加的查询条件
              QueryWrapper<BookType> wrapper =new QueryWrapper<>();
              wrapper.orderByDesc("bt_createtime");
      
              return iBookTypeDao.selectList(wrapper);
          }
      }
      
  • DTO封装向前端传输的对象

    • DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象,即也是Controller中,Request或Response所封装的对象。

    • 写一个枚举类定义常量成功的代码和代表信息

      • /**
         * 定义常量代码信息
         */
        public enum ResultCode {
            //枚举类的实例对象必须在最前面先定义
            Query_BOOKTYPE_SUCCESS(2001,"查询图书类型成功"),
            ORDER_BOOKTYPE_SUCCESS(2002,"查询图书名成功"),
            Query_BOOKTYPE_NAME_SUCCESS(2003,"根据创建时间排序成功")
            ;
        
            private int code;
            private String msg;
        
            //构造器默认私有private
             ResultCode(int code, String msg) {
                this.code = code;
                this.msg = msg;
            }
        
            public int getCode() {
                return code;
            }
        
            public void setCode(int code) {
                this.code = code;
            }
        
            public String getMsg() {
                return msg;
            }
        
            public void setMsg(String msg) {
                this.msg = msg;
            }
        
    • 写一个HttpResp类,封装成功代码,时间,传输的数据

      • /**
         * 统一规定向controller的数据传输对象DTO
         *
         * @param <T>
         */
        @Data   //生成toString和get&&set方法
        @NoArgsConstructor  //生成无参构造方法
        @AllArgsConstructor //生成全部有参构造方法
        public class HttpResp<T> {
        
            //枚举定义的常量
            private ResultCode resultCode;
            //操作时间
            private Date time;
            //传输的数据
            private Object results;
        
            //前端拿到数据是通过实体类的get方法拿到的,单独写的方法要命名为getxxx,前端才能渲染相应数据
        
        }
        
        
  • 写好Controller层

    • @RestController
      @RequestMapping("/api/bt")
      public class BookTypeController {
          @Autowired
          private IBookTypeService ibt;
      
          @GetMapping("/findAll")
          public HttpResp findAll() {
           return new HttpResp(ResultCode.Query_BOOKTYPE_SUCCESS,new Date(),ibt.findAll());
          }
      
          @GetMapping("/findByName")
          public HttpResp findByName(){
              return new HttpResp(ResultCode.Query_BOOKTYPE_NAME_SUCCESS,new Date(),ibt.findOne("学"));
      
          }
      
          @GetMapping("/orderByCreate")
          public HttpResp orderByCreate(){
              return new HttpResp(ResultCode.ORDER_BOOKTYPE_SUCCESS,new Date(),ibt.orderByCreateTimeDesc());
      
          }
      
  • test单元测试

    • @SpringBootTest //获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的)
      @RunWith(SpringJUnit4ClassRunner.class) //让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持 SpringRunner继承于SpringJUnit4ClassRunner,为其简写模式。
      @Slf4j
      public class BookTypeServiceImplTest {
          @Autowired
          IBookTypeService ibt;
      
          @Test
          public void findAll() {
              log.info("测试查询结果是否正确");
              //测试用例(正规操作测试)
              Assert.assertEquals("政治军事",ibt.findAll().get(9).getName());
      
          }
          @Test
          public void findOne(){
              log.info("测试查询结果");
              //测试用例
              Assert.assertEquals("哲学宗教",ibt.findOne().get(2).getName());
      
          }
          @Test
          public void orderByCreate(){
              log.info("测试排序结果");
              //测试用例
             Assert.assertEquals(12,ibt.orderByCreateTimeDesc().size());
      
          }
      }
      
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值