Mybatis四层架构

371 阅读3分钟

一.创建项目page_demo

image.png

image.png

二.添加依赖

<!-- MyBatisPlus依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<!--LomBok依赖-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId> <optional>true</optional>
</dependency>
<!--mysql依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

image.png

三.创建配置文件(application.yml),添加配置源信息

spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/practice?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: 123456
#mybatisPlus相关配置
mybatis-plus:
  mapper-locations: classpath:mappers/*.xml
  configuration:
    # 配置MyBatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 统一配置包名(实体类)
  type-aliases-package: demo.entity

image.png

四.创建类

4.1创建demo包 并在包根目录向创建Demo主运行类(添加注解)

@SpringBootApplication:是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。

@MapperScan("demo.dao"):在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类(demo和dao都是包)

添加位置:主方法类上面

4.2创建包和类

image.png

4.2.1 在demo包下创建Demo类,加入主方法,作为程序的入口

注意:Demo在demo根目录

package demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("demo.dao")
public class Demo {

    public static void main(String[] args) {
        SpringApplication.run(Demo.class,args);
    }
}

4.2.2在dame包下创建entity包,创建User类,封装实体

package demo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data   // getter setter()方法 tostring()
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String userName;
    private String passwd;
    private String createDate;
}

4.2.1添加配置文件UsermApper.xml,添加实体User与数据库t_user映射

<?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="demo.dao.UserMapper">
    <!--建立映射 将数据库t_user表和java实体User建立关联-->
    <resultMap id="userResult" type="User">
        <result column="id" property="id"></result>
        <result column="user_name" property="userName"></result>
        <result column="passwd" property="passwd"></result>
        <result column="create_date" property="createDate"></result>
    </resultMap>
</mapper>

image.png

column="数据库列名" property="实体类对应"

resultMap 元素定义了一个 cargo,它的属性 id 代表它的标识,type 代表使用哪种类作为其映射的类,可以是别名或者全限定名。id 是作为唯一标识的,当和其他对象实例对比的时候,这个 id 很有用,尤其是应用到缓存和内嵌的结果映射。

property: 映射数据库列的字段或属性,如果 JavaBean 的属性与给定的名称匹配,就会使用匹配的名字,否则 MyBatis 将搜索给定名称的字段,两种情况下你都可以使用逗点的属性形式,比如,你可以映射到 “”username:,也可以映射到 “address.street.number”

4.2.2在dao包下创建UserMapper抽象类,添加要实现的方法(模板);

DAO持久层,也叫数据访问层,实现对数据库的访问

package demo.dao;

import demo.entity.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

4.2.3 在dao包下创建controller包,创建UserController类

@RestController注解,代表返回的是json格式的数据,这个注解是Spring4之后新加的注解,原来返回json格式的数据需要@ResponseBody配合@Controller一起使用;如果我们在项目中使用的是@Conrtroller注解的话,不加@Response注解,则当直接返回一个字符串的时候,就好比返回的是一个模板页面,类似我们返回一个jsp页面一样。所以我们需要加上模板引擎(这种返回html一类的模板的开发方式现在一般不会再用了,因为现在都是前后端分离式的开发,后台服务器一般只需要返回json格式的数据即可)

package demo.controller;

/**
 * 测试类
 */
import demo.dao.UserMapper;
import demo.entity.User;
import demo.servise.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/list")
    public List<User> findUserList(int pageIndex,int pageSize){
        return userService.queryUserList(pageIndex,pageSize);
    }

}

4.2.4.在servise包下创建IUserServise接口和UserServiceImpl类,实现抽象接口,实现具体业务

业务层:(Service)调用DAO层,实现解耦合目的,虽然不要它也可以运行项目,但是会使项目后期的延展和维护变得困难

接口IUserService

package demo.servise;

import demo.entity.User;

import java.util.List;

public interface IUserService {
    List<User> queryUserList(int pageIndex,int pageSize);
}

接口实现类UserServiseImpl

@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。

package demo.servise.impl;

import demo.dao.UserMapper;
import demo.entity.User;
import demo.servise.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiseImpl implements IUserService {

    @Autowired(required = false)
    private UserMapper userMapper;

    @Override
    public List<User> queryUserList(int pageIndex,int pageSize) {
        List<User> users = userMapper.selectAll((pageIndex-1)*pageSize,pageSize);
        return users;
    }
}

运行结果

image.png