4.IDEA Spring + MyBatis全过程

上章 讲了 MyBatis Plus 的使用,使用起来也非常简单,当然如果想让它自动生成代码帮你完成更多的功能,可以利用模板完成,因为是为了让大家了解一下整体过程不必深入太多。下面我们要使用IDEA 实现MyBatis功能实现,其中用到了Swager接口管理的技术,如果不清楚请点击这里查看
接下来的示例我会用 朝雨忆轻尘 博客的示例数据库给大家演示

1.准备好测试的数据库
数据库使用提Mysql
相关的表写字段

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(50) NOT NULL COMMENT '用户名',
  `nick_name` varchar(150) DEFAULT NULL COMMENT '昵称',
  `avatar` varchar(150) DEFAULT NULL COMMENT '头像',
  `password` varchar(100) DEFAULT NULL COMMENT '密码',
  `salt` varchar(40) DEFAULT NULL COMMENT '加密盐',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
  `status` tinyint(4) DEFAULT NULL COMMENT '状态  0:禁用   1:正常',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '机构ID',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `last_update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  `last_update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` tinyint(4) DEFAULT '0' COMMENT '是否删除  -1:已删除  0:正常',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COMMENT='用户管理';

-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', 'admin', '管理员', null, 'bd1718f058d8a02468134432b8656a86', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13612345678', '1', '4', 'admin', '2018-08-14 11:11:11', 'admin', '2018-08-14 11:11:11', '0');
INSERT INTO `sys_user` VALUES ('2', 'liubei', '刘备', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '7', 'admin', '2018-09-23 19:43:00', 'admin', '2019-01-10 11:41:13', '0');
INSERT INTO `sys_user` VALUES ('3', 'zhaoyun', '赵云', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '7', 'admin', '2018-09-23 19:43:44', 'admin', '2018-09-23 19:43:52', '0');
INSERT INTO `sys_user` VALUES ('4', 'zhugeliang', '诸葛亮', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '7', '11', 'admin', '2018-09-23 19:44:23', 'admin', '2018-09-23 19:44:29', '0');
INSERT INTO `sys_user` VALUES ('5', 'caocao', '曹操', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '8', 'admin', '2018-09-23 19:45:32', 'admin', '2019-01-10 17:59:14', '0');
INSERT INTO `sys_user` VALUES ('6', 'dianwei', '典韦', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '10', 'admin', '2018-09-23 19:45:48', 'admin', '2018-09-23 19:45:57', '0');
INSERT INTO `sys_user` VALUES ('7', 'xiahoudun', '夏侯惇', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '8', 'admin', '2018-09-23 19:46:09', 'admin', '2018-09-23 19:46:17', '0');
INSERT INTO `sys_user` VALUES ('8', 'xunyu', '荀彧', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '10', 'admin', '2018-09-23 19:46:38', 'admin', '2018-11-04 15:33:17', '0');
INSERT INTO `sys_user` VALUES ('9', 'sunquan', '孙权', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '10', 'admin', '2018-09-23 19:46:54', 'admin', '2018-09-23 19:47:03', '0');
INSERT INTO `sys_user` VALUES ('0', 'zhouyu', '周瑜', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '11', 'admin', '2018-09-23 19:47:28', 'admin', '2018-09-23 19:48:04', '0');
INSERT INTO `sys_user` VALUES ('11', 'luxun', '陆逊', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '11', 'admin', '2018-09-23 19:47:44', 'admin', '2018-09-23 19:47:58', '0');
INSERT INTO `sys_user` VALUES ('12', 'huanggai', '黄盖', null, 'fd80ebd493a655608dc893a9f897d845', 'YzcmCZNvbXocrsz9dm8e', '[email protected]', '13889700023', '1', '11', 'admin', '2018-09-23 19:48:38', 'admin', '2018-09-23 19:49:02', '0');

2.创建Sprint boot 项目(前面已经讲过了请看我前面的文章)

3.添加pom.xml依赖

<!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

4.配置Swager 类
在这里插入图片描述

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    
    

    @Bean
    public Docket createRestApi(){
    
    
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
    
    
        return new ApiInfoBuilder()
                .title("SpringBoot API Doc")
                .description("This is a restful api document of Spring Boot.")
                .version("1.0")
                .build();
    }

}

5.MyBatis 配置类 MybatisConfig.java

package com.example.demo.config;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

@Configuration
@MapperScan("com.example.demo.**.dao")    // 扫描DAO
public class MybatisConfig {
    
    
    @Autowired
    private DataSource dataSource;

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
    
    
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage("com.example.demo.**.model");    // 注意这里扫描Model

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath*:**/sqlmap/*.xml"));    // 扫描映射文件

        return sessionFactory.getObject();
    }
}

6.配置连接
将application.properties文件改名为application.yml ,并在其中添加MySQL数据源连接信息
在这里插入图片描述

server:
  port: 8080 #Server 端口,如果这里没有就是默认的8080
spring:
  datasource:
    #数据库驱动 我用的是Mysql
    driverClassName: com.mysql.cj.jdbc.Driver
    #这里是数据库配置信息,其中testdb是我自己的数据库,实现过程中换成你自己的
    url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
    #数据库的账号
    username: root
    #数据库密码
    password: 123456

7.创建包文件
在这里插入图片描述
8.通过Mybatis 生成相关代码并复制对应代码到对应位置
在这里插入图片描述
9.修改对应代码以实现特定功能
9-1.SysUser

package com.example.demo.model;
import java.util.Date;

public class SysUser {
    
    
    private Integer id;
    private String name;
    private String nick_name;
    private String avatar;
    private String password;
    private String salt;
    private String email;
    private String mobile;
    private int status;
    private Long dept_id;
    private String create_by;
    private Date create_time;
    private String last_update_by;
    private Date last_update_time;
    private int del_flag;

    public Integer getId() {
    
    
        return id;
    }

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

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getNick_name() {
    
    
        return nick_name;
    }

    public void setNick_name(String nick_name) {
    
    
        this.nick_name = nick_name;
    }

    public String getAvatar() {
    
    
        return avatar;
    }

    public void setAvatar(String avatar) {
    
    
        this.avatar = avatar;
    }

    public String getPassword() {
    
    
        return password;
    }

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

    public String getSalt() {
    
    
        return salt;
    }

    public void setSalt(String salt) {
    
    
        this.salt = salt;
    }

    public String getEmail() {
    
    
        return email;
    }

    public void setEmail(String email) {
    
    
        this.email = email;
    }

    public String getMobile() {
    
    
        return mobile;
    }

    public void setMobile(String mobile) {
    
    
        this.mobile = mobile;
    }

    public int getStatus() {
    
    
        return status;
    }

    public void setStatus(int status) {
    
    
        this.status = status;
    }

    public Long getDept_id() {
    
    
        return dept_id;
    }

    public void setDept_id(Long dept_id) {
    
    
        this.dept_id = dept_id;
    }

    public String getCreate_by() {
    
    
        return create_by;
    }

    public void setCreate_by(String create_by) {
    
    
        this.create_by = create_by;
    }

    public Date getCreate_time() {
    
    
        return create_time;
    }

    public void setCreate_time(Date create_time) {
    
    
        this.create_time = create_time;
    }

    public String getLast_update_by() {
    
    
        return last_update_by;
    }

    public void setLast_update_by(String last_update_by) {
    
    
        this.last_update_by = last_update_by;
    }

    public Date getLast_update_time() {
    
    
        return last_update_time;
    }

    public void setLast_update_time(Date last_update_time) {
    
    
        this.last_update_time = last_update_time;
    }

    public int getDel_flag() {
    
    
        return del_flag;
    }

    public void setDel_flag(int del_flag) {
    
    
        this.del_flag = del_flag;
    }

    public SysUser() {
    
    
    }

    public SysUser(Integer id, String name, String nick_name, String avatar, String password, String salt, String email, String mobile, int status, Long dept_id, String create_by, Date create_time, String last_update_by, Date last_update_time, int del_flag) {
    
    
        this.id = id;
        this.name = name;
        this.nick_name = nick_name;
        this.avatar = avatar;
        this.password = password;
        this.salt = salt;
        this.email = email;
        this.mobile = mobile;
        this.status = status;
        this.dept_id = dept_id;
        this.create_by = create_by;
        this.create_time = create_time;
        this.last_update_by = last_update_by;
        this.last_update_time = last_update_time;
        this.del_flag = del_flag;
    }
}

9-2、SysUserService 接口

package com.example.demo.service;

import com.example.demo.model.SysUser;

import java.util.List;

public interface SysUserService {
    
    
    /**
     * 根据用户ID查找用户
     * @param userId
     * @return
     */
    SysUser findByUserId(Long userId);

    /**
     * 查找所有用户
     * @return
     */
    List<SysUser> findAll();
}

9-3、创建SysUserMapper (接口)

package com.example.demo.dao;

import com.example.demo.model.SysUser;

import java.util.List;

public interface SysUserMapper {
    
    
    SysUser selectByPrimaryKey(Long id);

    /**
     * 查询全部用户
     * @return
     */
    List<SysUser> selectAll();

    /**
     * 分页查询用户
     * @return
     */
    List<SysUser> selectPage();
}

9-4、SysUserController

package com.example.demo.controller;

import com.example.demo.service.SysUserService;
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;

@RestController
@RequestMapping("user")
public class SysUserController {
    
    
    @Autowired
    private SysUserService sysUserService;

    @GetMapping(value="/findByUserId")
    public Object findByUserId(@RequestParam Long userId) {
    
    
        return sysUserService.findByUserId(userId);
    }

    @GetMapping(value="/findAll")
    public Object findAll() {
    
    
        return sysUserService.findAll();
    }
}

9-5、SysUserServiceImpl

package com.example.demo.service.impl;

import com.example.demo.dao.SysUserMapper;
import com.example.demo.model.SysUser;
import com.example.demo.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SysUserServiceImpl implements SysUserService {
    
    
    @Autowired
    private SysUserMapper sysUserMapper;

    @Override
    public SysUser findByUserId(Long userId) {
    
    
        return sysUserMapper.selectByPrimaryKey(userId);
    }

    @Override
    public List<SysUser> findAll() {
    
    
        return sysUserMapper.selectAll();
    }



}

9-6、SysUserMapper.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.example.demo.dao.SysUserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.model.SysUser">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="nick_name" property="nick_name" />
        <result column="avatar" property="avatar" />
        <result column="password" property="password" />
        <result column="salt" property="salt" />
        <result column="email" property="email" />
        <result column="mobile" property="mobile" />
        <result column="status" property="status" />
        <result column="dept_id" property="dept_id" />
        <result column="create_by" property="create_by" />
        <result column="create_time" property="create_time" />
        <result column="last_update_by" property="last_update_by" />
        <result column="last_update_time" property="last_update_time" />
        <result column="del_flag" property="del_flag" />
    </resultMap>
    <sql id="Base_Column_List" >
    id, name, nick_name, avatar, password, salt, email, mobile,status,dept_id,create_by,create_time,last_update_by,
    last_update_time,last_update_time,del_flag
  </sql>
    <select id="selectAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from sys_user

    </select>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from sys_user
        where id=#{id,jdbcType=BIGINT}
    </select>
    <select id="selectPage"  resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from sys_user
    </select>

</mapper>

10.配置运行环境 pom.xml在build 节点添加

<!-- 打包时拷贝MyBatis的映射文件 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/sqlmap/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

11.编译运行测试
http://127.0.0.1:8080/swagger-ui.html#/
在这里插入图片描述
全文结束,先能成功测试,再研究细节。下一节我们就从细节着手,在原有基础上新增接口。欢迎关注

猜你喜欢

转载自blog.csdn.net/weixin_44690195/article/details/106755645