从学习 Java 开发开始,绝大多数的教程都是采用的 MySQL 数据库,原因不用说了吧——免费啊!当然也有介绍 Oracle 的,唯独对 SQL Server 鲜有涉及。我想,可能是目前使用 Java 开发应用基本上都是 Web 应用。所以大多部署到 Linux 服务器上,而 Linux 版的 SQL Server 貌似刚出来没多少天,因此选择 SQL Server 作为数据源的也就很少见了。
奈何本人所在单位现有很多业务系统都是基于.net + SQL Server 开发的。为了让新的系统能与现有系统在数据交互上有较好的协调性,要求使用 Java 开发时也要选择 SQL Server。踩坑开始了……
版本选择时要注意需要与开发环境中的 JDK 版本一致。可以到 Maven 的中央仓库查看 mssql-jdbc 具体版本。我选择了使用偏多的 6.4.0 。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.4.0.jre8</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
<!-- Mybatis Plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
(1)MS SQL Server 的连接字符串最简单的格式如下:
jdbc:sqlserver://192.168.10.11:1433;DatabaseName=scott
(2)代码生成器中
dsc.setUrl("jdbc:sqlserver://10.10.10.110:1433;DatabaseName=scott"); //检查是否需要修改
dsc.setDriverName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
dsc.setUsername("sa");
dsc.setPassword("123456"); //检查是否需要修改
dsc.setDbType(DbType.SQL_SERVER);
(3)yaml 文件中
spring:
profiles:
active: dev # 环境设置
application:
name: service-sys # 服务名
datasource: # mysql数据库连接
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://10.10.10.110:1433:/DatabaseName=scott
username: sa
password: 123456
至此,有关 Spring Boot 的相关配置应该就算完事了,但是……我发现了一个有意思的坑!!
我为了测试,先在数据库中建立了一个 user 表,这可是几乎所有视频教程都在用的典型范例。但是我发现,generator 报错了……查百度、CSDN……说是 Mybatis-Plus 的版本高了,降到 3.2.0。
可是,主键策略……3.2 和 3.3 的不那么一样。原来想用 3.3 中的 ASSIGN_ID
不灵了,只能用 UUID
。算了,先改了再说。wow~~居然可以了!!!(难道 3.3 版本出 bug 了?)
由于前面的数据都是用的雪花算法弄出来的 ID,这如何是好。再改回去?嗯,改!改 POM,改实体类注解,改代码生成器注解(反正也不运行了,都注释了也可以)……编写个 Controller 实验一下,又不行了~~报错说 SQL 语法错误!
select * from user;
这么简单的会有错??!!
查来查去发现,user
是 SQL Server 的一个保留字~!表名改成 employee 就可以了。
于是我想,要不用代码生成器再试试原来就有的 dept 表?顺利生成了!!
这说明,人家 Mybatis-Plus 根本啥问题没有,是我对 SQL Server 的不了解导致折腾了这么久。
使用 Microsoft SQL Server 时,千万千万千万不要让表名、字段名等与保留字相同。
SQL Server Compact 3.5 中的保留字用法不一定和 SQL Server 中对应的保留字用法相同。
应避免将保留字用作标识符。如果保留字必须用作标识符,则必须用双引号进行分隔,或者放入括号中:
[]
。
下表列出了 SQL Server Compact 3.5 中的保留字。
----------------- | 保留字 | ------------ |
---|---|---|
@@IDENTITY | ENCRYPTION | ORDER |
ADD | END | OUTER |
ALL | ERRLVL | OVER |
ALTER | ESCAPE | PERCENT |
AND | EXCEPT | PLAN |
ANY | EXEC | PRECISION |
AS | EXECUTE | PRIMARY |
ASC | EXISTS | |
AUTHORIZATION | EXIT | PROC |
AVG | EXPRESSION | PROCEDURE |
BACKUP | FETCH | PUBLIC |
BEGIN | FILE | RAISERROR |
BETWEEN | FILLFACTOR | READ |
BREAK | FOR | READTEXT |
BROWSE | FOREIGN | RECONFIGURE |
BULK | FREETEXT | REFERENCES |
BY | FREETEXTTABLE | REPLICATION |
CASCADE | FROM | RESTORE |
CASE | FULL | RESTRICT |
CHECK | FUNCTION | RETURN |
CHECKPOINT | GOTO | REVOKE |
CLOSE | GRANT | RIGHT |
CLUSTERED | GROUP | ROLLBACK |
COALESCE | HAVING | ROWCOUNT |
COLLATE | HOLDLOCK | ROWGUIDCOL |
COLUMN | IDENTITY | RULE |
COMMIT | IDENTITY_INSERT | SAVE |
COMPUTE | IDENTITYCOL | SCHEMA |
CONSTRAINT | IF | SELECT |
CONTAINS | IN | SESSION_USER |
CONTAINSTABLE | INDEX | SET |
CONTINUE | INNER | SETUSER |
CONVERT | INSERT | SHUTDOWN |
COUNT | INTERSECT | SOME |
CREATE | INTO | STATISTICS |
CROSS | IS | SUM |
CURRENT | JOIN | SYSTEM_USER |
CURRENT_DATE | KEY | TABLE |
CURRENT_TIME | KILL | TEXTSIZE |
CURRENT_TIMESTAMP | LEFT | THEN |
CURRENT_USER | LIKE | TO |
CURSOR | LINENO | TOP |
DATABASE | LOAD | TRAN |
DATABASEPASSWORD | MAX | TRANSACTION |
DATEADD | MIN | TRIGGER |
DATEDIFF | NATIONAL | TRUNCATE |
DATENAME | NOCHECK | TSEQUAL |
DATEPART | NONCLUSTERED | UNION |
DBCC | NOT | UNIQUE |
DEALLOCATE | NULL | UPDATE |
DECLARE | NULLIF | UPDATETEXT |
DEFAULT | OF | USE |
DELETE | OFF | USER |
DENY | OFFSETS | VALUES |
DESC | ON | VARYING |
DISK | OPEN | VIEW |
DISTINCT | OPENDATASOURCE | WAITFOR |
DISTRIBUTED | OPENQUERY | WHEN |
DOUBLE | OPENROWSET | WHERE |
DROP | OPENXML | WHILE |
DUMP | OPTION | WITH |
ELSE | OR | WRITETEXT |