sqlserver数据驱动bao1_springboot集成mybatis-plus连接sqlserver

本文介绍了如何使用Mybatis Generator自动生成SQLServer相关代码,并通过SpringBoot进行集成。首先创建SpringBoot项目,然后编辑POM.xml添加必要依赖,包括SQLServer驱动、Mybatis-Plus和Druid等。接着配置数据库连接和Mybatis-Plus关键参数。通过自定义generator类生成实体、Mapper和XML文件。最后展示了如何解决因datetime类型导致的问题,包括实体字段修改和日期转换的全局配置。
摘要由CSDN通过智能技术生成

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

1、创建springboot的项目

开发工具选择 idea,还是通过快速创建springboot项目的方式来创建一个springboot的web项目。

接下来只勾选一些必要的包,其他的手动引入就可以了

2、编辑 pom.xml

maven的项目就这点好,直接编辑Pom.xml就可以管理包

因为要连接sqlserver,所以导入sqlserver的驱动,因为连接的是sqlserver2012以上的版本,所以导入的驱动也要新的。

com.microsoft.sqlserver

sqljdbc4

4.2

runtime

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

com.baomidou

mybatis-plus-boot-starter

3.1.2

com.baomidou

mybatis-plus-generator

3.1.2

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

com.alibaba

druid-spring-boot-starter

1.1.10

其他的 也要比如 热部署,日志处理都要集成进来。完整的pom.xml如下:

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.1.7.RELEASE

com.xyzh.mybatisPlus

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-devtools

runtime

true

com.microsoft.sqlserver

mssql-jdbc

runtime

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

com.microsoft.sqlserver

sqljdbc4

4.2

runtime

com.alibaba

druid-spring-boot-starter

1.1.10

com.baomidou

mybatis-plus-boot-starter

3.1.2

com.baomidou

mybatis-plus-generator

3.1.2

org.freemarker

freemarker

ch.qos.logback

logback-core

org.springframework

springloaded

1.2.8.RELEASE

org.springframework.boot

spring-boot-maven-plugin

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

// 自定义需要填充的字段

ListtableFillList = new ArrayList<>();

// 自定义配置

InjectionConfig cfg = new InjectionConfig() {

@Override

public void initMap() {

// to do nothing

}

};

ListfocList = 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}")

ListselectUsersByInternalStatus(@Param("internalStatus") int internalStatus);

@Select("SELECT * FROM internalMeetingUserInfo &{ew.customSqlSegment}")

ListselectUsersByWrapper(@Param(Constants.WRAPPER) WrapperuserWrapper);

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

service

ListselectUserByInternalStatus(Integer interStatus);

service-impl

@Autowired

InternalMeetingUserInfoMapper internalMeetingUserInfoMapper;

@Override

public ListselectUserByInternalStatus(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 ListselectUserByInterStatus(@PathVariable("userStatus") Integer userStatus){

Listusers=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{

@Override

public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {

jsonGenerator.writeString(dateFormat.format(date));

}

}

public static class DateJsonDeserializer extends JsonDeserializer{

@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,这也是一个 组件类。

然后重写了 序列化和反序列化的方法。

在使用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映射。持续的测试和调试可以保证系统的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值