SpringBoot+SpringMvc+MyBatis,SSM框架开发教学

  • 一、项目结构与代码实现

学过javaweb的同学对dao层,service层,action层,bean层很熟悉吧,ssm框架的项目结构是类似的。

entity层

entity层即数据库实体层,也被称为bean层,pojo层,model层。
一般数据库一张表对应一个实体类,类属性同表字段一一对应。

mapper层

mapper层即数据持久层,也被称为dao层。
mapper层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。

service层

service层即业务逻辑层。
service层的作用为完成功能设计。
service层调用mapper层接口,接收mapper层返回的数据,完成项目的基本功能设计。

controller层

controller层即控制层,也被成为action层。
controller层的功能为请求和响应控制。
controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返具体的页面和数据到客户端。

自己要建好这几个包:

此为创建完的所有文件:

正常的业务逻辑是:前端告诉我们需要写一个登录功能,这个时候我们来到controller层(也就是javaweb的action层)写一个登录的方法:

创建controller包,在其下面创建一个实现类:

代码:

package com.waisang.mybatisflex.controller;

import com.waisang.mybatisflex.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// controller层就相当于javaweb的action层
@RestController
public class indexController {
    @Autowired
    private UserService userService;
    @RequestMapping("/login")
    public long login(String username,String password){
        return userService.login(username,password);
    }
}

@RequestMapping("/login")是定义前端访问的接口

我们定义的是login也就是一会我们要通过login来访问后端接口,访问了login之后会调用这个login的方法,这个方法需要传入两个参数,一个username一个是password,方法返回了userService层的login方法。

下一步就是到server层实现这个login方法

首先创建Userservice接口,和创建实现此接口的实现类UserServiceImpl,为了方便管理实现类我们会给他放在一个统一的包里面(impl包)

UserService代码:

package com.waisang.mybatisflex.service;

import com.mybatisflex.core.service.IService;
import com.waisang.mybatisflex.entity.User;

// 当然service层还是service层
public interface UserService extends IService<User> {
    // 登录业务,service服务层用来定义需要用到的业务方法,然后再impl层写实现代码
    long login(String userName,String password);
}

⚠️⚠️⚠️注意⚠️⚠️⚠️继承IService接口的泛型应该写你自己所需要的类,也就是entity包里面的类

 

UserServiceImpl代码:

package com.waisang.mybatisflex.service.impl;

import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.waisang.mybatisflex.entity.User;
import com.waisang.mybatisflex.mapper.UserMapper;
import com.waisang.mybatisflex.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // @Autowired的作用:之前java声明一个变量是需要在构造函数实例化的,spring框架的好处就是,你使用自动装配@Autowired就省去了构造函数实例化的过程
    @Autowired
    private UserMapper userMapper;

    //以下演示构造函数,如果没有自动装配就需要使用以下的构造函数实例化userMapper
//    public UserServiceImpl(UserMapper userMapper) {
//        this.userMapper = userMapper;
//    }

    @Override
    public long login(String userName, String password) {
//        以下代码为QueryWrapper的实现方法,不建议现在学,因为可能看不懂,所有直接跳过
//        User u = new User();
//        QueryWrapper qw = new QueryWrapper();
//        qw.eq("user_name",userName);
//        qw.eq("password",password);
//        userMapper.selectCountByQuery(qw);
//        return (userMapper.selectCountByQuery(qw));

//        学习以下代码即可
          Long n = userMapper.login(userName,password);
          return n;
    }

}

因为我们是UserService接口的实现类所以继承UserService接口,并且实现login方法。 我们通过server层来调用mapper来做到数据库的数据访问。接下来就要实现mapper层的代码。

UserMapper代码:

package com.waisang.mybatisflex.mapper;

import com.mybatisflex.core.BaseMapper;
import com.waisang.mybatisflex.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
// mapper 层就相当于javaweb的dao层
public interface UserMapper extends BaseMapper<User> {
    // 登录
    @Select("select * from user where user_name=#{user_name} and password = #{password}")
    long login(@Param("user_name")String user_name,@Param("password") String password);
}

sql语句就不用我多说了吧,这里需要穿两个参数也不用我多说了吧

写到这里其实就大功告成了,接写来就到主类里面实现方法就可以了。

主类必须加上@MapperScan(com.xxx.xxx.mapper)不然扫描不到你的包

package com.waisang.mybatisflex;

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

@SpringBootApplication
@MapperScan("com.waisang.mybatisflex.mapper")
public class MybatisFlexApplication {

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

}

⚠️⚠️⚠️值得你注意的是⚠️⚠️⚠️ 你的application.yml必须有端口号

# DataSource Config
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password:
mybatis-flex:
  mapper-locations:
    - classpath*:/mapper/*.xml
server:
  port:8080 #端口号,可改
  • 二、测试

 运行主类

控制台没有报错

如果你跟着我的一步一步来那就访问以下的地址,如果不是请自己适配自己的变量名跟端口

访问 localhost:8080/login?username=admin&password=admin

出现1就成功

出现以下情况可能是你参数错了

 三、扩展

我们正常登录是现实登录成功或者登录失败对吧,很显然前端现实的1是有点不对的,所有我们做以下的改进。

在业务逻辑成更改返回的内容,如果数据库查找到信息我就返回“登录成功”否则返回“用户名密码错误”:

但是报错了,让我们来看看报错的原因是什么:

 

这个时候看login方法 发现我们定义的返回值是long但是我们现在要返回“登录成功”是String

那就吧这个long改成String,发现还是报错,再看,他说UserService跟UserServiceImpl方法返回值不一致。

也就是改了UserServiceImpl没有改UserServe,那就改成String ,并且吧controller的返回值也改成String

 

发现都不报错了,那就运行测试 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值