Springboot+Mybatis 学习笔记

Posted Panda_cv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot+Mybatis 学习笔记相关的知识,希望对你有一定的参考价值。

目录结构

1. controller层: 控制层–>调用业务层方法来控制业务逻辑

__
Controller,从字面上理解是控制器,所以它是负责业务调度的,所以在这一层应写一些业务的调度代码,而具体的业务处理应放在service中去写。实际是等待获取网页请求,调用服务层service。__

@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/addUser")
    public JsonResponse addUser(@RequestBody User user){
        int result = userService.addUser(user);
        if ( result == 1){
            return JsonResponse.success(user);
        }else {
            return JsonResponse.errorMsg(-1,"插入失败,请重新插入");
        }
    }

2. service层

service不单纯是对于dao的增删改查的调用,service是业务层,所以应该更切近于具体业务功能要求,所以在这一层,一个方法所体现的是一个可以对外提供的功能,比如购物商城中的生成订单方法,这里面就不简单是增加个订单记录那么简单,我们需要查询库存,核对商品等一系列实际业务逻辑的处理;

package com.cdut.managesystem.background.service;

import com.cdut.managesystem.background.dao.UserDao;
import com.cdut.managesystem.background.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public int addUser(User user){
        user.setUserId(UUID.randomUUID().toString());
        user.setCreateTime(DateAndTime.getNowTime());
        int exist =  userDao.addUser(user);
        if (exist > 0){
            return 1;
        }else {
            return 0;
        }
    }

    public List<User> findAllUser(){
        List<User> users = userDao.findAllUser();
        return users;
    }

    public User findUser(User user){
        return userDao.findUser(user);
    }
}

** 在具体的实现类加入@Service @Autowired 没有new对象了 **

3. dao层: 持久层,主要与数据库交互

Dao层首先会创建Dao接口,接着就可以在配置文件中定义该接口的实现类;然后就可以在模块中调用Dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一个类,Dao层的数据源和数据库连接的参数都是在配置文件中进行配置的。

package com.cdut.managesystem.background.dao;

import com.cdut.managesystem.background.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface UserDao {
    /**
     *
     * @param user
     * @return 影响的行数
     */
    int addUser(User user);
    
    List<User> findAllUser();

    User findUser(User user);
}

4. entity层: 实体层–>数据库在项目中的类

主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。

package com.cdut.managesystem.background.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class User {

    private String userId;
    private String userName;
    private String password;
    private String createTime;
}

5. resources下的mapper.userMap

resources\\mapper.userMap\\user.xml

<mapper namespace="com.cdut.managesystem.background.dao.UserDao">
    <sql id="userTable">user</sql>
    <insert id="addUser">
        INSERT INTO
        <include refid="userTable"></include>
        VALUES (#{userId},#{userName},#{password},#{createTime})
    </insert>

    <select id="findAllUser" resultType="User">
        SELECT
            user_id AS userId,
            user_name AS userName,
            password AS password,
            create_time AS createTime
        FROM 
        <include refid="userTable"></include>
    </select>

    <select id="findUser" resultType="User">
        SELECT
                user_id AS userId,
                user_name AS userName,
                password AS password
        FROM
             <include refid="userTable"></include>
        WHERE
               user_name = #{userName}
        AND
               password = #{password}
    </select>
</mapper>

连接数据库

resources\\applications.properties

##  数据源配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.data-username=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/manage_system?characterEncoding=UTF-8&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=520myself1996

#配置服务端口
server.port=8082

6. controller层 和service层 注解@


7. @Component 与 @Service 区别

@Service 业务逻辑中服务层,跟需求有关。
@Component 组件,在很多地方调用,通用性比较强,可以是工具类,可能在控制器或者服务层调用, 跟需求没啥大关系。

8. @Autowired 与 @Resource 区别

UserService是基本的用户,然后定义两个实现类 AdminServiceImpl(超级管理员),
在UserActionController定义UserService接口,并不知道是哪个实现。这个时候我希望调用的是AdminServiceImpl,则因修改成@Resource(name = “adminServiceImpl”)

如果想要实现两类则需要加入2个@Resource( … ) 可以自动找到2个实现类。

9. @Qualifier

以上是关于Springboot+Mybatis 学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Springboot+Mybatis 学习笔记

Spring boot 学习笔记 - 整合MyBatis

Springboot学习笔记7:整合Mybatis

SpringBoot学习笔记整合Mybatis

springboot学习笔记-2 一些常用的配置以及整合mybatis

Mybatis-Plus学习笔记