IDEA搭建springboot+mybatis项目

准备

1.安装IDEA
2.安装JDK
3.安装mysql
4.配置Mean仓库

创建springboot项目

  1. 打开IDEA,点击File–>New—>ProjectIDEA搭建springboot+mybatis项目_第1张图片

  2. 修改图中三处即可,点击下一步IDEA搭建springboot+mybatis项目_第2张图片 

  3. 添加项目依赖,此处添加三个依赖,Web,Mysql ,Mybatis。(也可不选,等项目创建完后,再往pom.xml里添加相应的依赖即可。点击next。IDEA搭建springboot+mybatis项目_第3张图片

    
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                mysql
                mysql-connector-java
                5.1.30
                compile
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                2.1.3
            
    

  4. 确定项目名,点击finish,如果弹出第二张图的选项,选择OK,创建相应的文件夹。IDEA搭建springboot+mybatis项目_第4张图片

  5. 对Maven仓库进行配置。点击左上角的File,选择菜单里的Settings选项。可直接搜索Maven,直接点击,不用打开子目录。右边即会展示如图配置项Maven仓库的默认配置都是在C盘的用户目录下,建议更换位置。勾选图中圈出的Override,再点击旁边的文件夹,就能对配置文件的位置进行修改了。
    建议先行创建文件夹,在D盘创建了一个Maven文件夹,并将配置文件settings.xml(下文有代码)放于该目录下,并在该目录下(与settings.xml同级)创建文件夹repository(以后的依赖都会存放于此),点。IDEA搭建springboot+mybatis项目_第5张图片

  6. settings.xml的代码:

    
    
    
    
    
    
      
    
      
    
      
    
      
      
        
      
    
      
      
        
      
    
      
      
        
    
        
      
    
      
      
    
      	
          alimaven
          aliyun maven
          http://maven.aliyun.com/nexus/content/groups/public/
          central
        
        
      
    
      
      
        
    
        
      
    
      
    
    

    IDEA搭建springboot+mybatis项目_第6张图片

  7. 创建数据库,名为user IDEA搭建springboot+mybatis项目_第7张图片

  8. 在resources文件夹下建立config文件夹,存放mybatis的配置文件 mybatis-config.xml,(地址报红可暂且不管。后面引入MyBatis依赖即可解决)代码如下:

    
    
    
        
        
        
            
        
    
    
  9. 可将application.properties文件改成application.yml文件,代码如下:

    # 配置端口
    server:
      port: 8081
    
    # 连接数据库
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        password: 123456
        username: root
        driver-class-name: com.mysql.jdbc.Driver
    
    # mybatis环境配置
    mybatis:
      config-location: classpath:config/mybatis-config.xml
      mapper-locations: classpath:mapper/*.xml
    

  10. 前面创建项目时,如果没有选择添加Web,Mysql Driver,Mybatis三个依赖,可在pom.xml中选择加入以下三个依赖(代码在第3点),刷新依赖即可。IDEA搭建springboot+mybatis项目_第8张图片

 11.运行启动类TestApplication,如图点击左上角(有些IDEA版本在右上角)的箭头;或者进入启动类TestApplication里,点击绿色的三角形里的绿色三角形run。成功启动项目控制台会有如下信息(JVM running for…).IDEA搭建springboot+mybatis项目_第9张图片

项目架构搭建

1.在test包下,创建4个包(与启动类TestApplication同级),分别是controller,dao,entity,还有service。
选中test文件夹,鼠标右键,选择new列表下的Packeage,

鼠标右键service包,在此包下再创建一个impl包,存放service实现类。IDEA搭建springboot+mybatis项目_第10张图片

2.在resources目录下,再新建一个mapper文件夹,并创建TestMapper.xml,代码如下:






    
    

    
    


 3.在entity包下创建实体类User,代码如下:

package com.demo.test.entity;

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

4.在dao包下创建UserDao接口,代码如下:

package com.demo.test.dao;

import com.demo.test.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;


//Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
@Component
public interface UserDao {

    //获取指定id 的用户
    User findById(@Param("id")String id);

    //原始登录
    String login(@Param("username")String username);

}


5.在service包下创建UserService接口,代码如下:

package com.demo.test.service;


import com.demo.test.entity.User;

public interface UserService {

    User findById(String id);

    String login(String username);
}

6.在service包下的impl包下,创建UserServiceImpl实现类,代码如下:

package com.demo.test.service.impl;

import com.demo.test.dao.UserDao;
import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了.一般用于service层的实现类
// 类似的还包括@Component、@Repository、@Controller。
@Service
public class UserServiceImpl implements UserService {

    //@Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作
    @Autowired
    private UserDao userDao;

    //获取指定id 的用户
    //Override下面的方法名是否是你父类中所有的,如果没有则报错。
    @Override
    public User findById(String id) {
        return userDao.findById(id);
    }

    //原始登录
    @Override
    public String login(String username) {
        return userDao.login(username);
    }
}

7.在controller包下,创建TestController,代码如下:

package com.demo.test.controller;

import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import java.util.Map;


@RestController     //@Controller+@ResponseBody,就不能返回jsp,html页面
@RequestMapping("/user")        //将HTTP请求映射给controller,即请求路径
public class UserController {

    @Autowired
    private UserService userService;

    //获取指定id的用户信息
    @GetMapping("/test")     //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
    public User findUser(@RequestParam(value = "id") String id){
        return userService.findById(id);
    }


    //原始登录接口
    @RequestMapping(value = "login")
    //使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。
    //Map是一个接口,即Interface Map,其中K-key类型和V-value的类型
    public ModelAndView login(@RequestParam Map map){

        String username = (String) map.get("name");
        String password = (String) map.get("pass");
        System.out.println("前端发来用户信息,用户名:"+username+"——密码:"+password);

        String result = userService.login(username);
        if (password.equals(result)){
            map.put("code",200);
            map.put("massage","成功接收数据");
        }
        else {
            map.put("code",201);
            map.put("massage","密码错误");
        }

        return new ModelAndView(new MappingJackson2JsonView(),map);

    }


}


8.最后,在启动类TestApplication中,添加上注解扫描@MapperScan(“com.demo.test.dao”),然后启动。IDEA搭建springboot+mybatis项目_第11张图片

9.项目成功启动后,打开浏览器,输入地址:
http://localhost:8080/user/login?name=zhangsan&pass=123456(name和pass为数据库的数据)

补充:

接口返回json数据

  1. 上文提到的使用User类型、ModelAndView类型返回的json数据都不熟很规范。下面将新建一个实体类CommonResult,作为返回的实体类。可直接放于Entity包下,代码如下:
    package com.demo.test.entity;
    
    
    public class CommonResult {
        private Integer code;
        private String massage;
        private T data;
    
        public CommonResult(Integer code,String massage){
    
            this(code,massage,null);
    
        }
    
        public CommonResult(Integer code, String massage, T data) {
            this.code = code;
            this.massage = massage;
            this.data = data;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getMassage() {
            return massage;
        }
    
        public void setMassage(String massage) {
            this.massage = massage;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        @Override
        public String toString() {
            return "CommonResult{" +
                    "code=" + code +
                    ", massage='" + massage + '\'' +
                    ", data=" + data +
                    '}';
        }
    }
    
    

 2,建完CommonResult实体类后,修改原本的controller层,应用此实体类作为返回类型,只修改了findUser方法的代码,代码如下:

package com.demo.test.controller;

import com.demo.test.entity.CommonResult;
import com.demo.test.entity.User;
import com.demo.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import java.util.Map;


@RestController     //@Controller+@ResponseBody,就不能返回jsp,html页面
@RequestMapping("/user")        //将HTTP请求映射给controller,即请求路径
public class UserController {

    @Autowired
    private UserService userService;

    //获取指定id的用户信息
    @GetMapping("/test")     //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
    public CommonResult findUser(@RequestParam(value = "id") String id){
        CommonResult commonResult = new CommonResult(200,"查询成功", userService.findById(id));
        return commonResult;
    }

    //原始登录接口
    @RequestMapping(value = "login")
    //使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。
    //Map是一个接口,即Interface Map,其中K-key类型和V-value的类型
    public ModelAndView login(@RequestParam Map map){

        String username = (String) map.get("name");
        String password = (String) map.get("pass");
        System.out.println("前端发来用户信息,用户名:"+username+"——密码:"+password);

        String result = userService.login(username);
        if (password.equals(result)){
            map.put("code",200);
            map.put("massage","成功接收数据");
        }
        else {
            map.put("code",201);
            map.put("massage","密码错误");
        }

        return new ModelAndView(new MappingJackson2JsonView(),map);

    }


}

IDEA搭建springboot+mybatis项目_第12张图片

将mybatis替换成mybtis-plus。


1.MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2.将pom.xml文件里的mybatis依赖,更换成mybatis-plus


        com.baomidou
        mybatis-plus-boot-starter
        3.4.1

完整pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.0
         
    
    com.demo
    test
    0.0.1-SNAPSHOT
    test
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            mysql
            mysql-connector-java
            8.0.25
            compile
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        





        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.1
        



        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


2.将application.yml文件里的mybatis头改成mybatis-plus,如图,只改图中红线一处,其余无需更改IDEA搭建springboot+mybatis项目_第13张图片

3.新建一个config文件夹,存放MybatisPlusConfig文件(分页插件配置,不做分页可不加)

package com.demo.test.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
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;

@Configuration
public class MybatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }

    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
}

IDEA搭建springboot+mybatis项目_第14张图片

4.在UserDao接口类中,继承BaseMapper,普通增删查改都无需再写接口 

 IDEA搭建springboot+mybatis项目_第15张图片

5.测试
打开最下方的Test文件,找到TestApplicationTests,进行测试IDEA搭建springboot+mybatis项目_第16张图片 

代码入下:

package com.demo.test;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.demo.test.dao.UserDao;
import com.demo.test.entity.User;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;

@SpringBootTest
class TestApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void contextLoads() {

        // 根据 ID 查询
        User user = userDao.findById("1");
        System.out.println("对应id的用户为:"+user);

        //分页、条件、模糊查询
        Page page = new Page<>(1, 5);
        page.addOrder(OrderItem.asc("age"));
        Page userIPage = userDao.selectPage(page, Wrappers.lambdaQuery().eq(User::getAge, 11).like(User::getUsername, "A"));
        Assertions.assertThat(page).isSameAs(userIPage);
        System.out.println("总条数 -------------> {}"+userIPage.getTotal());
        System.out.println("当前页数 --- -------------> {}"+userIPage.getCurrent());
        System.out.println("当前每页显示数 -----------> {}"+userIPage.getSize());
        List records = userIPage.getRecords();
        Assertions.assertThat(records).isNotEmpty();
        System.out.println(records);
    }

}

 IDEA搭建springboot+mybatis项目_第17张图片

Mybatis-Plus分页条件查询 

1.Dao层继承BaseMapper后,不进行复杂的操作,都可以不管了
2.在service层写上接口方法

// 分页查询
    IPage selectPage(IPage page, @Param("ew") Wrapper queryWrapper);

3.在impl中实现方法

//分页条件查询
    @Override
    public IPage selectPage(IPage page, Wrapper queryWrapper) {
        return userDao.selectPage(page,queryWrapper);
    }

4.在controller中写入

 //分页条件查询,按年龄查询,按用户名模糊查询都是可选参数
    @PostMapping("/selectPage")     //等价于@RequestMapping的GET请求方式,@RequestParam将请求参数绑定到你控制器的方法参数上
    public CommonResult selectPage(@RequestParam(value = "pageSize") Integer pageSize,@RequestParam(value = "current") Integer current,
                                   @RequestParam(value = "age",required=false) Integer age,@RequestParam(value = "username",required=false) String username){
        Page page = new Page<>(current, pageSize);

        QueryWrapper queryWrapper = new QueryWrapper<>();
        if (age != null){
            //不为空则加入条件
            queryWrapper.eq("age",age);                 //按年龄查询
        }
        if (!StringUtils.isEmpty(username)){
            //不为空则加入条件
            queryWrapper.like("username",username);     //按用户名模糊查询
        }
        CommonResult commonResult = new CommonResult(200,"查询成功", userService.selectPage(page,queryWrapper));
        return commonResult;
    }

在Apifox中http://localhost:8080/user/selectPage(Apifox可以下载电脑版,或者直接web版,web版要在浏览器中添加扩展程序插件)IDEA搭建springboot+mybatis项目_第18张图片

你可能感兴趣的:(mybatis,intellij-idea,spring,boot)