当前位置:   article > 正文

Spring boot + sqlserver_springboot sqlserver

springboot sqlserver

参考:

1、狂神说SpringMVC05:整合SSM框架  狂神系列笔记:狂神说Springboot笔记 - 时移之人 - 博客园

SpringBoot Mybatis问题收集

SpringBoot + MyBatis(注解版),常用的SQL方法

【五种方法】mybatis使用Map返回时,当value为空时不显示key

一、在pom文件加入SQL server依赖

  1. <dependency>
  2. <groupId>com.microsoft.sqlserver</groupId>
  3. <artifactId>sqljdbc4</artifactId>
  4. <version>4.0</version>
  5. </dependency>

如果中央仓库拉不下来jar包,点击这里百度网盘 请输入提取码
,提取码0fcq,我将整个sqlserver驱动包文件夹上传了,你只要按照对应的路径复制就好。

网上手工教程Spring boot 连接 sqlserver_dianhuilu4947的博客-CSDN博客_springboot连接sqlserver数据库

刷新一下可以下载到。

二、设置SQLServer的TCP/ip连接:

注意: IP ALL/127.0.0.1和网卡IP的端口都要修改

三、设置连接信息

有人采用 修改application.properties 为 application.yml  SpringBoot连接SQLServer_哔哩哔哩_bilibili

  1. spring:
  2. datasource:
  3. driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  4. url: jdbc:sqlserver://ip地址:端口;DatabaseName=数据库名
  5. username: 用户名
  6. password: 密码
  7. maxActive: 20
  8. initialSize: 1
  9. maxWait: 60000
  10. minIdle: 1
  11. timeBetweenEvictionRunsMillis: 60000
  12. minEvictableIdleTimeMillis: 300000
  13. validationQuery: select 1
  14. testWhileIdle: true
  15. testOnBorrow: true
  16. testOnReturn: true
  17. poolPreparedStatements: true
  18. maxOpenPreparedStatements: 20

我采用(application.properties)

  1. spring.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=数据库名
  2. spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
  3. spring.datasource.username=用户名
  4. spring.datasource.password=密码

四、Mybatis 依赖包和mybatis 配置文件

  1. <!--springboot整合mybatis的依赖-->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>2.0.1</version>
  6. </dependency>
  7. <!--添加mybatis分页插件支持 根据需求可要可不要-->
  8. <dependency>
  9. <groupId>com.github.pagehelper</groupId>
  10. <artifactId>pagehelper</artifactId>
  11. <version>5.0.0</version>
  12. </dependency>
  1. #mapper配置文件
  2. mybatis.mapper-locations=classpath:mapper/*.xml
  3. mybatis.type-aliases-package=com.atl.erpcloud.mapper
  4. #开启驼峰命名
  5. mybatis.configuration.map-underscore-to-camel-case=true

 注意:配置文件yml和properties文件格式不同

五、springboot 整合mybatis的目录结构

参见:SpringBoot项目中的目录结构,以及每个目录的作用是什么。_天霸地霸tua的博客-CSDN博客

在根目录下:
①工程启动类(ApplicationServer.java)在根目录的build包下
②实体类(domain)在根目录的domain下(我采用entity
③数据访问层(dao)在根目录的repository下(我采用mapper)
④数据服务层(Service)在根目录的service下,数据服务的实现接口(serviceImpl)在根目录的service.impl下
⑤前端控制器(controller)在根目录的controller下
⑥工具类(utils)在根目录的utils下
⑦常量接口类(constant)在根目录的constan下
⑧配置信息类(config)在根目录的config下
⑨数据传输类(vo)在根目录的vo下。
资源文件的结构
根目录:src/main/resources
①项目配置文件:resources/application.yml
②.静态资源目录:resources/static/
——用于存放html、css、js、图片等资源
③视图模板目录:resources/templates/
——用于存放jsp、thymeleaf等模板文件
④mybatis映射文件:resources/mapper/(mybatis项目)
⑤mybatis配置文件:resources/mapper/config/(mybatis项目)
⑥国际化(i18n))置于i18n文件夹下
⑦spring.xml置于META-INF/spring文件夹下
⑧页面以及js/css/image等置于static文件夹下的各自文件下

 六、记得在SpringBoot启动类上添加mapper接口扫描注解

  1. @SpringBootApplication
  2. //添加扫描mybatis的dao层接口,生成实现类
  3. @MapperScan(value = "com.baidu.mapper")
  4. public class Sbdemo2Application {
  5. public static void main(String[] args) {
  6. SpringApplication.run(Sbdemo2Application.class, args);
  7. }
  8. }

七、编写实体类

 Springboot mybatis generate根据数据库表自动生成实体类、Mapper和Mapper.xml

Springboot+Mybatis+SQL Server自动生成实体类

POM.xml 修改

  1. <!-- mybatis自动生成插件 -->
  2. <dependency>
  3. <groupId>org.mybatis.generator</groupId>
  4. <artifactId>mybatis-generator-core</artifactId>
  5. <version>1.3.5</version>
  6. </dependency>
  1. <!-- Mybatis generator代码生成插件 配置 -->
  2. <plugin>
  3. <groupId>org.mybatis.generator</groupId>
  4. <artifactId>mybatis-generator-maven-plugin</artifactId>
  5. <version>1.3.1</version>
  6. <configuration>
  7. <!--generatorConfig.xml位置-->
  8. <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
  9. <overwrite>true</overwrite>
  10. <verbose>true</verbose>
  11. </configuration>
  12. <executions>
  13. <execution>
  14. <id>Generate MyBatis Artifacts</id>
  15. <goals>
  16. <goal>generate</goal>
  17. </goals>
  18. <phase>generate-sources</phase>
  19. </execution>
  20. </executions>
  21. <dependencies>
  22. <dependency>
  23. <groupId>com.microsoft.sqlserver</groupId>
  24. <artifactId>sqljdbc4</artifactId>
  25. <version>4.0</version>
  26. </dependency>
  27. </dependencies>
  28. </plugin>

generatorConfig.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!--<properties resource="jdbc.properties"></properties>-->
  7. <!--数据库驱动包位置-->
  8. <classPathEntry location="C:\Users\liu\.m2\repository\com\microsoft\sqlserver\sqljdbc4\4.0\sqljdbc4-4.0.jar" />
  9. <context id="DB2Tables" targetRuntime="MyBatis3">
  10. <commentGenerator>
  11. <property name="suppressAllComments" value="true" />
  12. </commentGenerator>
  13. <!--数据库URL、用户名、密码-->
  14. <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
  15. connectionURL="jdbc:sqlserver://localhost:1433;DatabaseName=eggdemo" userId="sa" password="1q2w3e">
  16. </jdbcConnection>
  17. <!--生成模型包的位置 -->
  18. <javaModelGenerator targetPackage="com.atl.erpcloud.Entity"
  19. targetProject="./src/main/java">
  20. <property name="enableSubPackages" value="true" />
  21. <property name="trimStrings" value="true" />
  22. </javaModelGenerator>
  23. <!--生成映射文件的包名和位置-->
  24. <sqlMapGenerator targetPackage="Mapping" targetProject="./src/main/resources">
  25. <property name="enableSubPackages" value="false" />
  26. </sqlMapGenerator>
  27. <!--生成映射dao(Mapper)的包名和位置-->
  28. <javaClientGenerator type="XMLMAPPER"
  29. targetPackage="com.atl.erpcloud.Mapper" targetProject="./src/main/java">
  30. <property name="enableSubPackages" value="true" />
  31. </javaClientGenerator>
  32. <!--需要生成那些数据库(更改tableName和domainObjectName)-->
  33. <table tableName="bom_structure" domainObjectName="BomBom" enableCountByExample="false" enableUpdateByExample="false"
  34. enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" >
  35. </table>
  36. </context>
  37. </generatorConfiguration>

双击执行插件

提示错误:

  1. [ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.1:generate (default-cli) on project erpcloud: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.1:generate failed: Plugin org.mybatis.generator:mybatis-generator-maven-plugin:1.3.1 or one of its dependencies could not be resolved: Failed to collect dependencies at org.mybatis.generator:mybatis-generator-maven-plugin:jar:1.3.1 -> com.microsoft.sqlserver:sqljdbc4:jar:4.0: Failed to read artifact descriptor for com.microsoft.sqlserver:sqljdbc4:jar:4.0: Could not transfer artifact com.microsoft.sqlserver:sqljdbc4:pom:4.0 from/to spring-snapshots (http://repo.spring.io/libs-snapshot): Authorization failed for http://repo.spring.io/libs-snapshot/com/microsoft/sqlserver/sqljdbc4/4.0/sqljdbc4-4.0.pom 403 Forbidden -> [Help 1]
  2. [ERROR]
  3. [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
  4. [ERROR] Re-run Maven using the -X switch to enable full debug logging.
  5. [ERROR]
  6. [ERROR] For more information about the errors and possible solutions, please read the following articles:
  7. [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

删除pom中plugin中的

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.microsoft.sqlserver</groupId>
  4. <artifactId>sqljdbc4</artifactId>
  5. <version>4.0</version>
  6. </dependency>
  7. </dependencies>

八、Mapper

1、只用注解方式(删除掉UserMappper.xml文件即可。)

  1. package com.example.demo.dao;
  2. import java.util.List;
  3. import org.apache.ibatis.annotations.Insert;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.Param;
  6. import org.apache.ibatis.annotations.Select;
  7. import com.example.demo.model.UserDomain;
  8. @Mapper
  9. public interface UserDao {
  10. @Insert("INSERT INTO t_user(name, password, phone) VALUES(#{name}, #{password}, #{phone})")
  11. int insert(@Param("name") String name, @Param("password") String password, @Param("phone") String phone);
  12. @Select("SELECT * FROM t_user ")
  13. List<UserDomain> selectUsers();
  14. }

2、@Repository和@Mapper注解问题

@Repository 来自Spring的注解

@Mapper 来自Mybatis的注解

在springboot 中,给mapper的接口上加上@Repository,无法生成相应的bean,从而无法@Autowired,这是因为spring扫描注解时,自动过滤掉了接口和抽象类,这种情况下可以在启动的类前加 上@MapperScan(“×××.×××.mapper”,从而使mapper可以自动注入,但是idea还会提示bean无法找到,但是不会影响运行

在使用Springboot环境下,如果结合了mybatis,在dao层上必须加@mapper与@Repository两个注解。尤其是@mapper,不可或缺;
而@Repository注解多用于实现类上。如果只是单独在接口上添加该方法会出现无法注入的情况;如果一定要只使用@Repository,可以在主方法上加@MapperScan(“com.xxx.xxx.dao”)

  1. @SpringBootApplication
  2. @MapperScan(
  3. basePackages = {"com.test.teinterface"},
  4. annotationClass = Mapper.class
  5. )
  6. public class InterfaceApplication extends SpringBootServletInitializer {
  7. public InterfaceApplication() {
  8. }
  9. public static void main(String[] args) {
  10. (new SpringApplicationBuilder(new Object[]{InterfaceApplication.class})).web(true).run(args);
  11. }
  12. protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  13. SpringApplicationBuilder rst = builder.sources(new Class[]{InterfaceApplication.class});
  14. return rst;
  15. }
  16. }

九、service 

暂时没有加接口类,直接实现BomInfoSerivce

  1. package com.atl.erpcloud.service;
  2. import com.atl.erpcloud.entity.BomInfo;
  3. import com.atl.erpcloud.mapper.BomInfoMapper;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import java.util.List;
  9. @Service
  10. public class BomInfoService {
  11. @Autowired
  12. private BomInfoMapper bomInfoMapper;
  13. public BomInfo getBomById(String model) {
  14. return bomInfoMapper.getBomById(model);
  15. }
  16. public int deleteById(String model) {
  17. return bomInfoMapper.deleteById(model);
  18. }
  19. public BomInfo addBom(BomInfo bomInfo) {
  20. int save = bomInfoMapper.insert(bomInfo);
  21. return bomInfo;
  22. }
  23. public int Update(BomInfo bomInfo) {
  24. return bomInfoMapper.updateBySelective(bomInfo);
  25. }
  26. public List<BomInfo> selectAll() {
  27. return bomInfoMapper.selectAll();
  28. }
  29. //分页查询
  30. //@Override
  31. public PageInfo<BomInfo> findAllModel(int pageNum, int pageSize) {
  32. PageHelper.startPage(pageNum, pageSize);
  33. List<BomInfo> bomDomains = bomInfoMapper.selectAll();
  34. PageInfo result = new PageInfo(bomDomains);
  35. return result;
  36. }
  37. }

@Autowired真的就是Spring的自动注入???

@Autowired 相当于自动装配后的实例类的自动初始化参数,个人理解。

十:RESTful api

用Spring Boot开发API接口

Postman

十一、多条件查询

利用反射跟自定义注解拼接实体对象的查询SQL

SpringBoot系列——Spring-Data-JPA

SpringBoot2学习笔记(四)JPA与Mybatis

1、mybatis 动态SQL查询总结

2、mybatis 动态sql及参数传递

3、MyBatis动态sql参数连接方式#{}和${}区别

4、Spring Data JPA - Reference Documentation

5、SpringBoot+Mybatis 框架之 @SelectProvider注解方式搭建

6、基于 @SelectProvider 注解实现无侵入的通用Dao

Spring-data repositories use EntityManager beneath. Repository classes are just another layer for the user not to worry about the details. But if a user wants to get his hands dirty, then of course spring wouldn't mind.
That is when you can use EntityManager directly.

This section explains how to create a custom repository with Spring Boot.

Let us assume you have a Repository Class like AbcRepository

  1. interface AbcRepository extends JpaRepository<Abc, String> {
  2. }

You can create a custom repository like

  1. interface CustomizedAbcRepository {
  2. void someCustomMethod(User user);
  3. }

The implementation class looks like

  1. class CustomizedAbcRepositoryImpl implements CustomizedAbcRepository {
  2. @Autowired
  3. EntityManager entityManager;
  4. public void someCustomMethod(User user) {
  5. // You can build your custom query using Criteria or Criteria Builder
  6. // and then use that in entityManager methods
  7. }
  8. }

十二、SpringBoot + Vue

整合Springboot+Vue(基础框架)

Springboot+Vue整合笔记【超详细】

十三 JQuery DataTable

  1. Jquery DataTable基本使用
  2. jquery datatable ajax配置详解

十四:跨域配置

1、在根目录下的vue.config.js设置(不行,无效,不知道原因

  1. devServer: {
  2. open: true, // npm run serve后自动打开页面
  3. host: '0.0.0.0', // 匹配本机IP地址(默认是0.0.0.0)
  4. port: 8081, // 开发服务器运行端口号
  5. proxy: {
  6. '/api': {
  7. target: 'http://127.0.0.1:8080/', // 代理接口地址
  8. secure: false, // 如果是https接口,需要配置这个参数
  9. changeOrigin: true, // 是否跨域
  10. pathRewrite: {
  11. '^/api': '/api' //需要rewrite的, 这里理解成以'/api'开头的接口地址,把/api代替target中的地址
  12. }
  13. }
  14. }
  15. },

2、改在config/index.js中设置(有效可以

3、但是在jquery DataTable中还是有问题,如下:

list#:1 Access to XMLHttpRequest at 'http://127.0.0.1:8080/bom/bysql/1=1?_=1612838025177' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

问题原因:跨域资源共享 CORS 详解

解决方法增加拦截器:

  1. import com.tczmh.service.Interceptor.HeaderHandlerInterceptor;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  6. @Configuration
  7. public class WebAppConfig implements WebMvcConfigurer {
  8. @Autowired
  9. private HeaderHandlerInterceptor headerHandlerInterceptor;
  10. @Override
  11. public void addInterceptors(InterceptorRegistry registry) {
  12. // 注册拦截器
  13. registry.addInterceptor(headerHandlerIntercepto).addPathPatterns("/**");
  14. }
  1. import org.springframework.stereotype.Component;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. @Component
  7. public class HeaderHandlerInterceptor implements HandlerInterceptor {
  8. @Override
  9. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
  10. // 这是要放行通过的域名 如果不限制用一个 * 也可以,就是不安全
  11. response.addHeader("Access-Control-Allow-Origin", "http://bz.tczmh.club");
  12. // 允许的方法 例如GET POST PUT DELETE,只要放行用过的
  13. response.addHeader("Access-Control-Request-Method", "POST");
  14. // 这个对应的是ajax里设置了header,例如存了token 或者 ontentType: "application/json"
  15. response.addHeader("Access-Control-Allow-Headers", "Content-Type");
  16. return true;
  17. }
  18. @Override
  19. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
  20. }
  21. @Override
  22. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
  23. }
  24. }

另外ajax调用如果用二级域名也有问题 会404,最好直接写全域名

 
  1. $.ajax({
  2. url:"http://tczmh.club/service/bz/bzContact",
  3. type:"post",
  4. .........
  5. });

  1. //另一个方法,未测试
  2. /*
  3. * @Configuration
  4. public class CrosConfig implements WebMvcConfigurer {
  5. @Override
  6. public void addCorsMappings(CorsRegistry registry) {
  7. registry.addMapping("/**")
  8. .allowedOrigins("*")
  9. .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
  10. .allowCredentials(true)
  11. .maxAge(3600)
  12. .allowedHeaders("*");
  13. }
  14. }
  15. * */

十五、AXIOS

axios是一个基于 promise 的 HTTP 库,这样我们进行前后端对接的时候,使用这个工具可以提高我们的开发效率。

安装命令:

cnpm install axios --save

然后同样我们在main.js中全局引入axios。

  1. import axios from 'axios'
  2. Vue.prototype.$axios = axios //

vue + axios 使用说明

十六、BootStrap

vue项目引入bootstrap正确姿势

  • 1.安装依赖包:
    1. cnpm install bootstrap --save-dev
    2. cnpm install jquery --save-dev
    3. cnpm install popper.js --save-dev
  • 2.将bootstrap全局引入。
    在项目中根目录西main.js中添加如下代码:
import 'bootstrap'

引入jquery同理,可在main.js添加下面一行:

import $ from 'jquery'
  • 3.将bootstrap css资源引入到相关页面中。
    和普通的html直接link css文件资源不同,对于基于组件化的vue项目,我们需要在相关需要使用的vue文件中添加如下代码:
  1. <script>
  2. import 'bootstrap/dist/css/bootstrap.min.css'
  3. import 'bootstrap/dist/js/bootstrap.min.js'
  4. </script>

如果Home.vue为Article.vue的父组件,那么想css作用于Article.vue,只需要在Home.vue添加上述两行import即可。

网上相关的教程或者博客很多,但是在这引入css和js文件的路径大多都是错的,正确的是从node_module之后开始算路径,如bootstrap/xxx/xxx/xxx.min.css,而不是'./node_modules/bootstrap/xxx/xxx/xx.min.css。

十七、登录信息保存

Vue系列4 - Vue+store 保存用户登录信息和退出登录

vuex + axios 做登录验证 并且保存登录状态

十八、SpringBoot数据库事务处理

SpringBoot事物Transaction实战讲解教程

十九、一对多

mybatis记录随便(五)一对多映射实现方式

二十、RestFul API

1、GET请求 使用RESTful风格api命名接口时,GET方法怎么传递多个参数

2、POST 请求 SpringBoot中Rest风格接口传递多个参数 SpringBoot中Rest风格接口传递多个参数_tianjidudao的博客-CSDN博客

二十一:部署

部署SpringBoot大数据平台 部署SpringBoot大数据平台_LvJinYang的博客-CSDN博客

其他常用功能

  1. vue定义全局变量和全局方法
  2. Vue 页面加载数据之前增加 `loading` 动画
  3. Build Yourself a Right GIF Spinner / loading.io 网站
  4. Vue父子组件传值的方法Vue父子组件传值的方法_lianwenxiu的博客-CSDN博客_父子组件传值

  5. Vue混入(一)继承的实现方式Vue混入(一)继承的实现方式 - 简书

  6. v-slot Vue新指令:v-slot | 码农网

其他资源

  1. SQL server分页的四种方法(算很全面了)SQL server分页的四种方法(算很全面了)_kanlon的博客-CSDN博客_sql 分页
  2. springboot+vue前后端免费开源(重点参考)

问题:

1、org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题_写代码的蜗牛-CSDN博客

  1. #mapper配置文件
  2. mybatis.mapper-locations=classpath:Mapping/*.xml
  3. mybatis.type-aliases-package=com.atl.erpcloud.mapper

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/243527
推荐阅读
相关标签
  

闽ICP备14008679号