springboot集成mybatis-plus连接sqlserver

15 篇文章 0 订阅
1 篇文章 0 订阅

这里写一篇通过 mybatis generator类,自动生成 sqlserver代码类,通过springboot集成。连接sqlserver的总结。

1、创建springboot的项目

开发工具选择 idea,还是通过快速创建springboot项目的方式来创建一个springboot的web项目。
在这里插入图片描述
接下来只勾选一些必要的包,其他的手动引入就可以了
在这里插入图片描述
在这里插入图片描述

2、编辑 pom.xml

maven的项目就这点好,直接编辑Pom.xml就可以管理包
因为要连接sqlserver,所以导入sqlserver的驱动,因为连接的是sqlserver2012以上的版本,所以导入的驱动也要新的。

 <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.2</version>
            <scope>runtime</scope>
        </dependency>

要使用 mybatis-plus连接数据库,所以导入 mybatis-plus

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.2</version>
        </dependency>

数据库连接池也要选一下,用druid吧

  <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

其他的 也要比如 热部署,日志处理都要集成进来。完整的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.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xyzh.mybatisPlus</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.2</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
        </dependency>
    </dependencies>

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

</project>

3、配置文件设置

mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  global-config:
    db-config:
      id-type: auto
      table-underline: true
      logic-not-delete-value: 0
      logic-delete-value: 1
spring:
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:sqlserver://172.20.100.232:1433;databaseName=XXX
    username: sa
    password: ###
  application:
    name: microservice-provider
server:
  port: 8002

这段配置文件大致就是驱动类设置,mybatis-plus 关键参数设置,别的也没什么。

4、配置generator类

在src目录中找到最底层的包,然后新建一个 generator的包,创建SqlserverGenerator类,代码及注解如下:
package com.xyzh.mybatisplus.demo.generator;

import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;

public class SqlserverGenerator {
    /**
     * RUN THIS
     */
    //生成文件所在项目路径
    private static String baseProjectPath = "D:\\java\\demo";

    //基础包名
    private static String basePackage="com.xyzh.mybatisplus.demo";
    //设置作者
    private static String authorName="adrian";
    //这里是要生成的表名(如果全部要生成的话,这里注释掉)
    //private static String[] tables= {"t_role","t_resource","t_role_resource","t_user_role"};
    //可以设置table前缀
    private static String prefix="t_";

    //数据库配置四要素
    private static String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static String url = "jdbc:sqlserver://172.20.100.232:1433;databaseName=XXX";
    private static String username = "sa";
    private static String password = "###";


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

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(baseProjectPath + "/src/main/java");
        // TODO 设置用户名
        gc.setAuthor("adrian");
        gc.setOpen(true);
        // service 命名方式
        gc.setServiceName("%sService");
        // service impl 命名方式
        gc.setServiceImplName("%sServiceImpl");
        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        // XML 二级缓存
        gc.setEnableCache(false);
        // XML ResultMap
        gc.setBaseResultMap(true);
        // XML columList
        gc.setBaseColumnList(false);
        mpg.setGlobalConfig(gc);

        // TODO 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(url);
        dsc.setDriverName(driverName);
        dsc.setUsername(username);
        dsc.setPassword(password);
        mpg.setDataSource(dsc);

        // TODO 包配置
        PackageConfig pc = new PackageConfig();
        //pc.setModuleName(scanner("模块名"));
        pc.setParent("com.xyzh.meetingsys");
        pc.setEntity("entity");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        mpg.setPackageInfo(pc);

        // 自定义需要填充的字段
        List<TableFill> tableFillList = new ArrayList<>();
        
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输入文件名称
                return projectPath + "/src/main/resources/mapper/"
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        // 设置逻辑删除键(这个是逻辑删除的操作)
        strategy.setLogicDeleteFieldName("deleted");
        // TODO 指定生成的bean的数据库表名(如果全部生成,这里要注释掉)
        //strategy.setInclude("userinfos");
        //strategy.setSuperEntityColumns("id");
        // 驼峰转连字符
        strategy.setControllerMappingHyphenStyle(true);
        mpg.setStrategy(strategy);
        // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

这里只有一个地方说明下,就是 此处选择的模板引擎是 freemarker,所以pom里面需要导入 freemarker的依赖。
再有就是其实 durid 对于 sqlserver支持的不是很好,所以有些数据类型 比如datetime,需要额外注意

5、运行 generator

直接运行 generator
生成的结构如下:
在这里插入图片描述

6、实现查询功能

mybatis-plus 比 mybatis 好一些的地方在于能自动生成很多的操作方法,但是这些方法,还是不够用,所以还需要自己定义sql操作方法

自定义sql 操作方法的方式可以写在 mapper.xml中,也可以卸载mapper类当中,
本文采取 mapper类当中编写
找到我们要增加方法的 mapper类,如图:
在这里插入图片描述
直接增加两个新的方法:
mapper:

 @Select("SELECT * FROM internalMeetingUserInfo where isDeleted=0 and  internalStatus= #{internalStatus}")
     List<InternalMeetingUserInfo> selectUsersByInternalStatus(@Param("internalStatus") int internalStatus);

    @Select("SELECT * FROM internalMeetingUserInfo &{ew.customSqlSegment}")
    List<InternalMeetingUserInfo> selectUsersByWrapper(@Param(Constants.WRAPPER) Wrapper<InternalMeetingUserInfo> userWrapper);

mapper中增加之后,需要在 service,service-impl ,controller中都要增加对应的方法

service

List<InternalMeetingUserInfo> selectUserByInternalStatus(Integer interStatus);

service-impl

  @Autowired
    InternalMeetingUserInfoMapper internalMeetingUserInfoMapper;

    @Override
    public List<InternalMeetingUserInfo> selectUserByInternalStatus(Integer interStatus) {
        return internalMeetingUserInfoMapper.selectUsersByInternalStatus(interStatus);
    }

到这里,会发现 autowired 报错,告诉我们internalMeetingUserInfoMapper 对象 这里不能自动装配
这是因为 mapper 类没有 被 程序发现,需要用 scan 标签类告知程序 mapper的位置。
所以需要在应用程序启动类 DemoApplication上 加上注解 @MapperScan(“com.xyzh.mybatisplus.demo.mapper”)

另外还需要在 mapper类的上面加上 组件的注解,这里用 @Component 注解

controller

@Autowired
    InternalMeetingUserInfoService internalMeetingUserInfoService;

    @RequestMapping(value="/userinfo/{userStatus}",method = RequestMethod.GET)
    @ResponseBody
    public List<InternalMeetingUserInfo> selectUserByInterStatus(@PathVariable("userStatus") Integer userStatus){

        List<InternalMeetingUserInfo> users=internalMeetingUserInfoService.selectUserByInternalStatus(userStatus);
        return users;
    }

然后运行程序,运行 application类。

到这里,其实 配置工作,就已经做完了。
但是记录一点错误信息。
因为我的数据库中,有 datetime类型的字段,而通过autogenerator 生成后,对应的entity中的字段 是
localdatetime类型,所以 这里显示,写入,更新都会出错。
错误信息:Error attempting to get column ‘passportDate’ from result set. Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQLFeatureNotSupportedException
在这里插入图片描述

我这里手动将 localdatetime类型,改为Date类型,并且写一个 自定义的转换类,用于显示

先在entity包中,找到对应的实体,
将数据类型LocalDateTime都改为 Date

在 controller 中增加转换方法:

 @InitBinder
    public  void initBinder(WebDataBinder binder, WebRequest request){
        //转换日期
        DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm");
        binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat,true));
    }

这样就解决了问题,
但是,如果写这样的方法,就需要到每个controller中增加,
我可以写一个全局的转换方法。

新建一个包 config

新增一个类 DateFormatConfig,代码如下:

package com.xyzh.mybatisplus.demo.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.jackson.JsonComponent;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@JsonComponent
public class DateFormatConfig {
    private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static class DateJsonSerializer extends JsonSerializer<Date>{
        @Override
        public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString(dateFormat.format(date));
        }
    }

    public static class DateJsonDeserializer extends JsonDeserializer<Date>{


        @Override
        public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
            try{
                return dateFormat.parse(jsonParser.getText());
            }catch (ParseException e){
                throw new RuntimeException(e);
            }
        }
    }
}

注意下注解 @JsonComponent,这也是一个 组件类。
然后重写了 序列化和反序列化的方法。

  • 14
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在使用Spring Boot与MyBatis-Plus连接SQL Server时,可能会遇到以下问题: 1. 驱动问题:首先需要引入SQL Server的JDBC驱动,可以在pom.xml文件中添加依赖。常用的驱动有`com.microsoft.sqlserver.jdbc.SQLServerDriver`和`net.sourceforge.jtds.jdbc.Driver`。确保驱动版本与SQL Server版本兼容。 2. 数据库连接配置:在application.properties或application.yml文件中,需配置SQL Server连接信息,包括数据库地址、端口、用户名、密码等。注意要正确配置驱动名称、连接URL以及字符集等。 3. 数据库版本兼容性:确保使用的SQL Server版本与MyBatis-Plus和JDBC驱动兼容。不同版本的SQL Server可能在SQL语法、特性或驱动接口上有所区别。 4. 数据库表映射:在使用MyBatis-Plus进行ORM映射时,需要在实体类中使用注解配置数据表名、字段名和主键等信息。同时,要确认实体类和数据表的字段类型、长度、精度等匹配。 5. 数据库连接池配置:可以使用Spring Boot提供的连接池技术,如HikariCP或Tomcat连接池。根据并发需求和性能要求,配置合适的连接池大小、最大等待时间和最大空闲时间等参数。 6. 异常处理与日志记录:在连接SQL Server过程中,可能会出现连接异常、语法错误等问题。需要适当处理这些异常,并进行日志记录以便排查和分析问题。 通过解决上述问题,我们可以成功连接SQL Server数据库,并使用MyBatis-Plus进行数据操作和ORM映射。持续的测试和调试可以保证系统的稳定性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值