IDEA2019开发Spring Boot整合Mybatis实现User的CRUD(增读更删)

    本实例适合刚开始学习spring boot的有一定开发基础的同学们,使用当前比较流行的IntelliJ IDEA 2019开发工具,利用spring boot框架,采用Java语言,结合MySQL数据库设计实现用户User的增加、读取、更新、删除。首先,我们先了解一下基本概念。

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。而SpringBoot是一个全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

    IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。DEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主,支持HTML,CSS,PHP,MySQL,Python等。

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

  好了,简单了解了这些概念后,下面我们进入主题。

开发工具

IntelliJ IDEA 2019.1.1 x64

新建工程

选择左侧的Spring Initializr,jdk要求1.8及以上,选择默认的Default下一步:

我们可以不改这些信息直接下一步,如果想改名字可以自己修改Group及Artifact,和最下边的package包名,这里我把Group改成com,Artifact改为sjzeis,选择下一步。

选择项目所需要的依赖,这个页面是选择你工程中需要用到的依赖,因为我们的目标是web项目使用mybatis所以在web模块中勾选Spring Web,在SQL中依次勾选Jdbc API、Mybatis Framework、Mysql Driver。然后下一步直到finish即可。

接着项目就会下载我们需要的依赖,如果之前没有下过,可能会稍等几分钟。

配置项目相关信息

来看下建好后的pom.xml文件,上一步选择的依赖,在pom.xml文件中 已经自动添加到我们的文件中了。下面为本项目的pom.xml文件内容。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com</groupId>
    <artifactId>sjzeis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sjzeis</name>
    <description>sjzeis project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

修改配置文件

    Spring Boot通过pom.xml中引入模块化的Stater,使得常规的开发场景可以很快把应用搭建起来。在使用Spring Boot的过程中,除了可以在pom.xml中配置一些内容外,一些项目相关的配置也可以在application.properties中通过配置来完成。

    application.properties文件为默认项目配置文件,默认为空的,我们可以在配置文件中配置端口、名字等一般属性,也可以配置自定义属性、参数引用、多环境配置等,可以参考 https://www.jianshu.com/p/c023083f51b4 一文说明介绍。 application.properties文件在项目-src-main-resources下。

     本项目如果使用application.properties文件,可以在文件中添加端口、数据源、mydatis等相关数据,下面为文件内容。

server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

    但是还是习惯yml标记语言文件的天然的树状结构,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读。在IDEA下书写起来也比较方便,其实SpringBoot底层会把application.yml文件解析为application.properties。所以将本项目原有的application.properties文件重构-重命名为:application_bak.properties,或者直接删除即可,这样项目不再加载该文件。接下来创建application.yml和application-dev.yml配置文件。在一个项目中可以配置多套环境,便于在团队开发中可以做到项目的分离独自开发,再整合的形式。在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境

application.yml为主加载配置文件,内容如下:

spring:
  profiles:
    active: dev

application-dev.yml为主环境说明文件,内容如下:

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

    项目在加载时自动加载application.yml配置文件,根据配置文件中的spring.profiles.active=dev,就会再加载application-dev.yml配置文件中的内容。上面文件配置了端口号8080,数据源的驱动类、地址、登录用户名和口令,以及mybatis映射mapper路径的指定。特别需要注意的是:本项目中driver-class-name: com.mysql.cj.jdbc.Driver,是新版本org.springframework.boot和org.mybatis.spring.boot中规定的驱动,老版本的写driver-class-name: com.mysql.jdbc.Driver

项目编写及业务流程

User数据库的定义

创建User实体类实现业务流程

    一、创建项目路径包来,展示业务流程。在项目src-main-java-com-sjzeis下分别创建包:controller、entity、mapper、service,用来实现控制层、实体层、映射层、业务层。这里面简单介绍一下业务流程及各层业务的作用如下:

    1. entity实体层(别名: model层 ,domain层),用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法。如:user表的实体User。

    2. mapper映射层(别名:dao层),用于对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与*Mapper.xml内相互一一映射。如:public interface UserMapper {...}。

    3. service业务层,用于给controller层的类提供接口进行调用。一般就是自己写的方法封装起来,就是声明一下,存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。如:public class UserService {...}。

    4. controller控制层(别名:web 层),用于负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller控制器导入service层,因为service中的方法是我们使用到的,controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。如:public class UserController {...}。

 二、在src-main-resources下创建mapper包用于存放*Mapper.xml文件

项目结构如图:

如果想直接创建对应的包而不是目录,可以在java目录上点击鼠标右键,选择标记目标目录为-测试源 根,如图:

创建entity实体类User

package com.sjzeis.entity;

public class User {
    private int userid;
    private String username;
    private String password;

    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    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;
    }

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

创建Mapper映射操作UserMapper类

package com.sjzeis.mapper;

import com.sjzeis.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    public List<User> findAllUser();
    public List<User> findUserByUserId(int userid);
}

创建Mapper映射对应的UserMapper.xml文件

<?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="com.sjzeis.mapper.UserMapper">
    <resultMap id="result" type="com.sjzeis.entity.User">
        <result column="userid" jdbcType="INTEGER" property="userid" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="password" jdbcType="VARCHAR" property="password" />
    </resultMap>

    <select id="findAllUser" resultType="com.sjzeis.entity.User">
        select  * from users;
    </select>

    <select id="findUserByUserId" resultType="com.sjzeis.entity.User">
        select * from users where userid=#{userid};
    </select>
</mapper>

注意该文件放在resources目录下的mapper包中,具体包名位置(namespace)要和上边的映射UserMapper类对应 。

创建service业务UserService类

package com.sjzeis.service;

import com.sjzeis.entity.User;
import com.sjzeis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired(required=false)
    public UserMapper userMapper;

    public List<User> findAllUser(){
        return userMapper.findAllUser();
    }

    public List<User> findUserByUserId(int userid){
        return userMapper.findUserByUserId(userid);
    }
}

创建 controller控制层UserController类

package com.sjzeis.controller;

import com.sjzeis.entity.User;
import com.sjzeis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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 UserService userService;

    @RequestMapping("/getAllUser")
    public List<User> findAll(){
        return userService.findAllUser();
    }

    @RequestMapping("/getUserByUserID/{userid}")
    public List<User> findUserByUserId(@PathVariable int userid){
        return userService.findUserByUserId(userid);
    }
}

最终框架结构

测试 

通过点击IDEA右上角的启动按钮,或者在SjzeisApplication类中鼠标右键选择运行启动main方法,来启动项目。

地址栏输入 http://localhost:8080/user/getAllUser/,显示如下:

地址栏输入 http://localhost:8080/user/getUserByUserID/1,显示如下:

    通过测试的数据显示,项目测试成功!

    以上为spring boot 整合mybatis实现的User读取,接下来是添加UserMapper类的增加、更新和删除方法,配置UserMapper.xml文件,添加UserService和UserController相关功能。完整代码如下。

完整UserMapper类

package com.sjzeis.mapper;

import com.sjzeis.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    public List<User> findAllUser();
    public List<User> findUserByUserId(int userid);
    public List<User> findUserByUsername(String username);
    public int insertUser(User user);
    public int updateUser(User user);
    public int deleteUser(User user);
}

完整UserService类

package com.sjzeis.service;

        import com.sjzeis.entity.User;
        import com.sjzeis.mapper.UserMapper;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.stereotype.Service;

        import java.util.List;

@Service
public class UserService {
    @Autowired(required=false)
    public UserMapper userMapper;

    public List<User> findAllUser(){
        return userMapper.findAllUser();
    }

    public List<User> findUserByUserId(int userid){
        return userMapper.findUserByUserId(userid);
    }

    public List<User> findUserByUsername(String username){
        return userMapper.findUserByUsername(username);
    }

    public User insertUser(User user){
        userMapper.insertUser(user);
        return user;
    }

    public int updateUser(User user){
        return userMapper.updateUser(user);
    }

    public int deleteUser(User user){
        return userMapper.deleteUser(user);
    }
}

完整UserController类

package com.sjzeis.controller;

import com.sjzeis.entity.User;
import com.sjzeis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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 UserService userService;

    @RequestMapping("/getAllUser")
    public List<User> findAll(){
        return userService.findAllUser();
    }

    @RequestMapping("/getUserByUserID/{userid}")
    public List<User> findUserByUserId(@PathVariable int userid){
        return userService.findUserByUserId(userid);
    }

    @RequestMapping("/getUserByUsername/{username}")
    public List<User> findUserByUsername(@PathVariable String username){
        return userService.findUserByUsername(username);
    }

    @RequestMapping("/insertUser")
    public User insertUser(User user){
        return userService.insertUser(user);
    }

    @RequestMapping("/updateUser")
    public int updateUser(User user){
        return userService.updateUser(user);
    }

    @RequestMapping("/deleteUser")
    public int deleteUser(User user){
        return userService.deleteUser(user);
    }
}

完整UserMapper.xml文件

<?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="com.sjzeis.mapper.UserMapper">
    <resultMap id="result" type="com.sjzeis.entity.User">
        <result column="userid" jdbcType="INTEGER" property="userid" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="password" jdbcType="VARCHAR" property="password" />
    </resultMap>

    <select id="findAllUser" resultType="com.sjzeis.entity.User">
        select  * from users;
    </select>

    <select id="findUserByUserId" resultType="com.sjzeis.entity.User">
        select * from users where userid=#{userid};
    </select>
    
    <select id="findUserByUsername" resultType="com.sjzeis.entity.User">
        select * from users where username=#{username};
    </select>

    <insert id="insertUser" parameterType="com.sjzeis.entity.User" keyProperty="userid" useGeneratedKeys="true">
        insert into users(username,password) values (#{username},#{password});
    </insert>

    <update id="updateUser" parameterType="com.sjzeis.entity.User">
        update users set username=#{username},password=#{password} where userid=#{userid};
    </update>

    <delete id="deleteUser" parameterType="com.sjzeis.entity.User">
        delete from users where userid=#{userid};
    </delete>
</mapper>

 启动项目运行测试如下。

以上为本实例的简单讲解,后续会讲一些@注解的使用,以及实例的详细介绍,敬请期待!

本实例代码下载:https://download.csdn.net/download/u011924274/11995379

 

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问,我可以回答关于 Spring Boot 整合 MyBatis-Plus 的增改查项目问题。这样的项目通常都需要进行以下配置和实现: 1. 引入 MyBatis-Plus 和 MyBatis-Spring-Boot-Starter 依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 配置 MyBatis-Plus: 在 application.properties 文件中添加以下配置: ``` mybatis-plus.mapper-locations=classpath:mapper/*.xml mybatis-plus.type-aliases-package=com.example.demo.model ``` 3. 实现对应的 Mapper: 定义一个对应的实体类和对应的 Mapper 接口,如下所示: ``` // User.java 实体类 @Data public class User { private Long id; private String name; private Integer age; } // UserMapper.java 接口类 @Repository public interface UserMapper extends BaseMapper<User> {} ``` 4. 实现改查: 定义一个对应的 Service 类,通过调用 UserMapper 接口中的方法实现改查操作,如下所示: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> listUsers() { return userMapper.selectList(null); } @Override public int saveUser(User user) { return userMapper.insert(user); } @Override public int updateUser(User user) { return userMapper.updateById(user); } @Override public int deleteUserById(Long id) { return userMapper.deleteById(id); } } ``` 以上就是 Spring Boot 整合 MyBatis-Plus 的增改查项目的主要流程和实现细节,如果有任何问题欢迎随时咨询!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值