【springboot】【MybatisPlus】配置+自动代码生成+分页查询

配置(mybatis-plus-boot-starter)

依赖pox.xml

<!--   数据库   -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>

配置application.yml

server:
  port: 18891
#  context-path: /demo
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver

  devtools:
    restart:
      enabled: true
      # 需要热更新的包
      additional-paths: src/main/java,src/main/resources/static
      # 不需要热更新的包
      exclude: src/main/java/**/CodeGenerator.java

mybatis-plus:
  # xml文件,classpath在这儿指/resources
  mapper-locations: classpath*:com/example/demo/mapper/xml/*.xml
  global-config:
    db-config:
      # 主键类型
      id-type: id_worker
      # 字段策略
      field-strategy: not_empty
      # 数据库类型
      db-type: mysql
  configuration:
    # 配置返回数据库(column下划线命名&&返回java实体是驼峰命名)
    map-underscore-to-camel-case: true
    # call-setters-on-nulls: true
    # 打印SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    cache-enabled: false

logging:
  level:
    root: info

配置config/MybatisPlusConfig

package com.example.demo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor=new PaginationInterceptor();
        return paginationInterceptor;
    }
}

程序入口@MapperScan

@MapperScan(value = "com.example.demo.mapper")
@SpringBootApplication
public class DemoApplication {

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

}

自动生成代码配置(mybatis-plus-generator+velocity-engine-core)

新建类CodeGenerator

package com.example.demo.util;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.Scanner;

/**
 * @Description: mybatisPlus自动生成代码
 * 运行后输入表名,多表时用逗号(,)隔开
 * @Author: Lorogy
 * @Date: 2021/1/22 16:36
 */
public class CodeGenerator {
    private static String author = "Lorogy";//作者名称
    private static String projectPath = System.getProperty("user.dir");
    private static String outputDir = projectPath + "/src/main/java";//生成的位置
    private static String driver = "com.mysql.cj.jdbc.Driver";//驱动,注意版本
    //连接路径,注意修改数据库名称
    private static String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8";
    private static String username = "root";//数据库用户名
    private static String password = "123456";//数据库密码
    //private static String tablePrefix = "t_";//数据库表的前缀,如t_user
    private static String parentPackage = "com.example.demo";//顶级包结构
    private static String mapper = "mapper";//数据访问层包名称
    private static String mapperXml = "mapper.xml";//控制器层包名称
    private static String service = "service";//业务逻辑层包名称
    private static String serviceImpl = "service.impl";//业务逻辑层包名称
    private static String entity = "model";//实体层包名称
    private static String controller = "controller";//控制器层包名称

    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入表名" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 1. 全局配置
        GlobalConfig gConfig = new GlobalConfig();
        gConfig.setAuthor(author)//添加开发人员
                .setOutputDir(outputDir)//设置生成文件的输出目录
                .setOpen(true)//是否打开输出目录
                .setServiceName("%sService") //设置生成的service接口的名字的首字母是否为I,加%s则不生成I
                .setBaseResultMap(true)//映射文件中是否生成ResultMap配置
                .setBaseColumnList(true)//生成通用sql字段
                // .setSwagger2(true)//开启 swagger2 模式
                .setFileOverride(true);//是否开启覆盖

        // 2. 数据源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDriverName(driver)
                .setUrl(url)
                .setUsername(username)
                .setPassword(password);

        // 3. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent(parentPackage)//顶级包结构
                .setEntity(entity)//实体类
                .setMapper(mapper)//数据访问层
                .setXml(mapperXml)//mapper映射
                .setService(service)//业务逻辑层
                .setServiceImpl(serviceImpl)//业务逻辑层实现类
                .setController(controller);//控制器

        // 4. 策略配置
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setNaming(NamingStrategy.underline_to_camel)//设置数据库表映射到实体的命名策略,下划线转驼峰命名
                .setColumnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体的命名策略:下划线转驼峰命名(非必要,如果不配置则按照Naming执行)
                .setEntityLombokModel(true)//开启lombok注解
                .setRestControllerStyle(true)//生成RestController注解
                //.setControllerMappingHyphenStyle(true)//驼峰转连字符
                //.setTablePrefix(pkConfig.getModuleName() + "_")
                //.setVersionFieldName("version")//乐观锁
                .setInclude(scanner("(多个以英文逗号分割)").split(","));

        // 5. 整合配置
        mpg.setGlobalConfig(gConfig);
        mpg.setDataSource(dsConfig);
        mpg.setPackageInfo(pkConfig);
        mpg.setStrategy(stConfig);

        // 6 执行
        mpg.execute();
    }
}

运行

-可同时输入多个表名

在这里插入图片描述

  • 回车后生成目录

controller——控制器层
mapper——数据访问层
mapper.xml——mapper映射
model ——实体类
service——业务逻辑层接口
service.impl——接口实现类

分页查询(自带IPage)

实体

package com.example.demo.entity;

import lombok.Data;

@Data
public class PageEntity {
    private Integer pageNum;//请求页数
    private Integer pageSize;//请求数量
}

实现类

/**
     * @Description: 查询所有用户
     * @Param: []
     * @Return: java.util.List<com.example.demo.model.TbUser>
     */
    @Override
    public Object selectAllUser(PageEntity pageEntity) {
        IPage<TbUser> page=new Page<>(pageEntity.getPageNum(),pageEntity.getPageSize());
        page=tbUserMapper.selectPage(page,null);
        return page;
        //JSONObject jsonObject=new JSONObject();
        //jsonObject.put("current",page.getCurrent());//当前页数
        //jsonObject.put("size",page.getSize());//当前数量
        //jsonObject.put("total",page.getTotal());//总共数量
        //jsonObject.put("list",page.getRecords());//查询结果
        //return jsonObject;
    }

查询方式

通过XML查询

1.parameterType

可以是单个参数,也可以是实体对象
mapper方法参数:(Integer id)

<select id="[mapper对应方法名]" parameterType="java.lang.Integer" resultType="com.demo.entity.[返回对应实体类]">
        select * from user where id=#{id,jdbcType=INTERGER}
</select>

2.通过@Param传参

mapper方法参数:(@Param("id") Integer id,@Param("sex") String sex)

<select id="[mapper对应方法名]" parameterType="java.lang.Integer" resultType="com.demo.entity.[返回对应实体类]">
        select * from user where id=#{id} and sex=#{sex}
</select>

3.通过Map传参

mapper方法参数: (Map map)

<select id="[mapper对应方法名]" parameterType="java.lang.Integer" resultType="com.demo.entity.[返回对应实体类]">
        select * from user where id=#{id} and sex=#{sex}
</select>

4.也可以是数组或List传参

@Select方法

直接在mapper中通过@Select注解写SQL,不需要写mapper.xml

1.通过Map传参

将多个参数通过Map一次性传入

public interface RoleMapper extends BaseMapper<Role> {
   @Select(" select id,name from role where id in (select rid from user_role where uid=#{uid})")
   List<Role> getRoleList(Map record);
}

2.通过@Param传参

普通SQL

public interface MenuMapper extends BaseMapper<Menu> {
    @Select("select * from menu where id in (select mid from role_menu where rid=#{rid})")
    List<Menu> getMenuList(@Param("rid") Integer id);
}

动态SQL

public interface MenuMapper extends BaseMapper<Menu> {
    @Select("<script>"
            +"select * from menu where 1=1"
            +"<if test='rid!= null'>"
            +"and rid= #{rid}"
            +"</if>"
            +"</script>")
    List<Menu> getMenuList(@Param("rid") Integer id);
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot是一个用于创建独立的、基于生产级别的Spring应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一套强大的开发工具和约定,使开发人员能够更专注于业务逻辑的实现。 MyBatis Plus是MyBatis的增强工具,它提供了一系列的便利功能和增强特性,使得使用MyBatis更加简单和高效。它包括了代码生成器、分页插件、逻辑删除、乐观锁等功能,可以大大提高开发效率。 Redis是一个开源的内存数据库,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis具有高性能、高可用性和可扩展性的特点,常用于缓存、消息队列、分布式锁等场景。 Driver是指数据库驱动程序,它是用于连接数据库和执行SQL语句的软件组件。在Spring Boot中,我们可以通过配置数据源和引入相应的数据库驱动程序来实现与数据库的交互。 Knife4j是一款基于Swagger的API文档生成工具,它提供了更加美观和易用的界面,可以方便地查看和测试API接口。 Swagger是一套用于设计、构建、文档化和使用RESTful风格的Web服务的工具。它可以自动生成API文档,并提供了交互式的界面,方便开发人员进行接口测试和调试。 JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它通过在用户和服务器之间传递加密的JSON对象来实现身份验证和授权功能,避免了传统的基于Session的身份验证方式带来的一些问题。 Spring Security是Spring提供的一个安全框架,它可以集成到Spring Boot应用程序中,提供身份验证、授权、攻击防护等安全功能。通过配置Spring Security,我们可以实现对API接口的访问控制和权限管理。 关于Spring Boot + MyBatis Plus + Redis + Driver + Knife4j + Swagger + JWT + Spring Security的Demo,你可以参考以下步骤: 1. 创建一个Spring Boot项目,并引入相应的依赖,包括Spring Boot、MyBatis Plus、Redis、数据库驱动程序等。 2. 配置数据源和数据库驱动程序,以及MyBatis Plus的相关配置,如Mapper扫描路径、分页插件等。 3. 集成Redis,配置Redis连接信息,并使用RedisTemplate或者Jedis等工具类进行操作。 4. 集成Knife4j和Swagger,配置Swagger相关信息,并编写API接口文档。 5. 集成JWT和Spring Security,配置安全相关的信息,如登录认证、权限管理等。 6. 编写Controller层的代码,实现具体的业务逻辑。 7. 运行项目,通过Swagger界面进行接口测试。 希望以上内容对你有帮助!如果还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值