整合持久层就是和数据库打交道,这里以mysql为例。

1.准备工作

首先创建一个数据库和表,代码如下:

create database test1 default character set utf8;
use test1;
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`author` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into book values(null,'三国演义','罗贯中');
insert into book values(null,'水浒传','施耐庵');

然后创建springboot的项目。

2.整合JdbcTemplate

第一步:导入依赖

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>

其中lombok可以导入也可以不导入,这里是为了使用get和set方法方便。

第二步:配置数据源,这里使用的配置文件是application.yml

#数据源配置
spring:
datasource:
#使用阿里巴巴的druid
type: com.alibaba.druid.pool.DruidDataSource
#配置数据库的路径和用户名密码
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: root

第三步:创建类Book

package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString; @Getter
@Setter
@ToString
public class Book {
private Integer id;
private String name;
private String author;
}

第四步:创建类BookController

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.service.Bookservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookservice; @RequestMapping("/addBook")
public String addBook(){
Book book=new Book();
book.setName("西游记");
book.setAuthor("张三");
bookservice.addBook(book);
return "添加成功";
} @RequestMapping("/updateBook")
public String updateBook(){
Book book=new Book();
book.setId(3);
book.setName("西游记2");
book.setAuthor("张三2");
bookservice.updateBook(book);
return "修改成功";
} @RequestMapping("/deleteBook")
public String deleteBook(){
bookservice.deleteBook(3);
return "添删成功";
} @RequestMapping("/getAllBook")
public List<Book> getAllBook(){
return bookservice.getAllBook();
} }

第五步:创建类BookService

package com.example.demo.service;

import com.example.demo.dao.BookDao;
import com.example.demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class BookService {
@Autowired
private BookDao bookDao; public int addBook(Book book){
return bookDao.addBook(book);
} public int updateBook(Book book){
return bookDao.updateBook(book);
} public int deleteBook(Integer id){
return bookDao.deleteBook(id);
} public List<Book> getAllBook(){
return bookDao.getAllBook();
} }

第六步:创建类BookDao

package com.example.demo.dao;

import com.example.demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; import java.util.List; @Repository
public class BookDao {
@Autowired
private JdbcTemplate template;
//添加图书
public int addBook(Book book){
String sql="insert into book values(null,?,?)";
return template.update(sql,book.getName(),book.getAuthor());
} //修改图书
public int updateBook(Book book){
String sql="update book set author=?,name=? where id=?";
return template.update(sql,book.getAuthor(),book.getName(),book.getId());
} //删除图书
public int deleteBook(Integer id){
String sql="delete from book where id=?";
return template.update(sql,id);
} //查询图书
public List<Book> getAllBook(){
String sql="select * from book";
return template.query(sql,new BeanPropertyRowMapper<>(Book.class));
} }

第七步:测试。启动项目,在浏览器输入localhost:8080/book/abbBook即可向数据库添加设定的数据,同理其他的几个接口也可以使用。到这里SpringBoo整合JdbcTemolate已经完成了,至于从前端向controller的接口传递数据,这里暂时不讲。

3.整合MyBatis

第一步:导入依赖

  <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>

第二步:类Book,类BookController同上,而BookService中只需把@Autowired中的BookDao改成BookMapper即可,其他同上。

第三步:创建接口BookMapper

package com.example.demo.dao;

import com.example.demo.entity.Book;
import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper
public interface BookMapper {
int addBook(Book book);
int updateBook(Book book);
int deleteBook(Integer id);
List<Book> getAllBook();
}

第四步:创建BookMapper.xml文件

<?xml version="1.0" encoding="uTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.BookMapper">
<insert id="addBook" parameterType="com.example.demo.entity.Book">
insert into book values(null,#{name},#{author})
</insert>
<update id="updateBook" parameterType="com.example.demo.entity.Book">
update book set name=#{name},author=#{author} where id=#{id}
</update>
<delete id="deleteBook" parameterType="java.lang.Integer">
delete from book where id=#{id}
</delete>
<select id="getAllBook" resultType="com.example.demo.entity.Book">
select * from book
</select>
</mapper>

在资源目录下先创建mapper目录,在目录下创建一个名为BookMapper.xml的文件

第五步:修改yml文件

#数据源配置
spring:
datasource:
#使用阿里巴巴的druid
type: com.alibaba.druid.pool.DruidDataSource
#配置数据库的路径和用户名密码
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: 123456 #配置xml的位置
mybatis:
mapperLocations: classpath*:mapper/*Mapper.xml

第六步:启动项目,进行测试,接口可以正常使用。

4.整合Spring Data JPA

JPA是一种ORM规范,Hibernate是一个ORM框架,因此JPA相当于Hibernate的一个子集。这里只需要有数据库即可,就是要test1数据库,不需要手动创建表,。

第一步:导入依赖

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>

第二步:数据库配置

spring:
#数据源配置
datasource:
#使用阿里巴巴的druid
type: com.alibaba.druid.pool.DruidDataSource
#配置数据库的路径和用户名密码
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: root
#JPA相关配置
jpa:
#指定数据库
database: mysql
#在控制台打印JPA执行过程中生成的sql
show-sql: true
#项目启动时根据实体类更新数据库的表
hibernate:
ddl-auto: update

第三步:创建实体类Book

package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString; import javax.persistence.*; @Getter
@Setter
@ToString
//表示该类是一个实体类,name是表名,不写则默认是类名
@Entity(name="t_book")
public class Book {
//id表示是主键,然后GeneratedValue是自动生成,配置生成的策略
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
//Column设置字段的名字,不写则是属性名
@Column(name = "book_name",nullable = false)
private String name;
private String author;
private Float price;
//Transient设置忽略的字段,创建表时不生成此字段
@Transient
private String description;
}

第四步:创建类BookController

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookservice; @GetMapping("/add")
public Book insert( Book book){
return bookservice.save(book);
}
@GetMapping("/findAll")
public List<Book> findAll(){
return bookservice.findAll();
}
}

第五步:创建类BookService

package com.example.demo.service;

import com.example.demo.dao.BookDao;
import com.example.demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class BookService {
@Autowired
private BookDao bookDao; public Book save(Book book) {
return bookDao.save(book);
}
public List<Book> findAll() {
return bookDao.findAll();
}
}

第六步:创建接口BookDao

package com.example.demo.dao;

import com.example.demo.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component; @Component
public interface BookDao extends JpaRepository<Book,Integer>{ }

BookDao中没有写方法,原因是jpa中有一些常用的方法。

5.配置多数据源

多数据源就是javaEE项目中采用了不同数据库实例中的 多个库,或者同一个数据库实例中多个不同的库。

1)JdbcTemplate多数据源

第一步:创建两个数据库test1,test2,然后在两个数据库中分别创建一个book,并插入一条不同的内容,创建test1的脚本如下,test2同

create database test2 default character set utf8
use test2
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`author` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

第二步:添加依赖

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>

第三步:配置数据库

#多数据源配置
#数据源1
spring:
datasource:
one:
type: com.alibaba.druid.pool.DruidDataSource
#配置数据库的路径和用户名密码
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: root
#数据源2
two:
type: com.alibaba.druid.pool.DruidDataSource
#配置数据库的路径和用户名密码
url: jdbc:mysql://localhost:3306/test2?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: root

第四步:配置多数据源

package com.example.demo.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration
public class DataSourceConfig {
//根据不同前缀的配置文件来创建不同的DataSource实例
@Bean
@ConfigurationProperties("spring.datasource.one")
DataSource dsOne(){
return DruidDataSourceBuilder.create().build();
} @Bean
@ConfigurationProperties("spring.datasource.two")
DataSource dsTwo(){
return DruidDataSourceBuilder.create().build();
}
}

第五步:配置JdbcTemplate

package com.example.demo.config;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration
public class JdbcTemplateConfig {
//根据不同的DataSource实例来创建jdbcTemplate的实例
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dataSource){
return new JdbcTemplate(dataSource);
} @Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}

第六步:创建类BookController

为了简单化,这里就直接使用controller来注入JdbcTemplate,在实际开发中需规范化。

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.quartz.QuartzProperties;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
@RequestMapping("/book")
public class BookController {
//以下使用两种不同的方法注入JdbcTemplate
@Resource(name = "jdbcTemplateOne")
private JdbcTemplate jdbcTemplateOne; @Autowired
@Qualifier("jdbcTemplateTwo")
private JdbcTemplate jdbcTemplateTwo; @GetMapping("/find")
public Map find(){
Map<String,Object> map=new HashMap<>();
String sql="select * from book";
List<Book> query1 = jdbcTemplateOne.query(sql, new BeanPropertyRowMapper<>(Book.class));
List<Book> query2 = jdbcTemplateTwo.query(sql, new BeanPropertyRowMapper<>(Book.class));
map.put("datasouce1",query1);
map.put("datasouce2",query2);
return map;
}
}

第七步:测试

启动项目,在浏览器输入localhost:8080/book/get即可看到查询的两个数据库的所有结果。

2)Mybatis多数据源

第一步:上面已经详细的介绍了一些配置信息,这里就不再赘述。两个数据库同上,数据库配置同上,多数据源配置同上。依赖也只是把Spring-boot-starter-jdbc替换成mybatis的依赖即可,mybatis的依赖如下:

  <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>

第二步:配置Mybatis

  第一个配置类

package com.example.demo.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.annotation.Resource;
import javax.sql.DataSource; @Configuration
//指定接口所在的位置,它下面的接口将使用SqlSessionFactory实例
@MapperScan(value = "com.example.demo.dao",sqlSessionFactoryRef = "sqlSessionFactoryBean1")
public class MybatisConfigOne {
@Resource(name="dsOne")
private DataSource dsOne; @Bean
SqlSessionFactoryBean sqlSessionFactoryBean1() throws Exception {
SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();
factoryBean.setDataSource(dsOne);
return (SqlSessionFactoryBean) factoryBean.getObject();
}
@Bean
SqlSessionTemplate sqlSessionTemplate1() throws Exception {
return new SqlSessionTemplate((SqlSessionFactory) sqlSessionFactoryBean1());
}
}

  第二个配置类

package com.example.demo.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.annotation.Resource;
import javax.sql.DataSource; @Configuration
//指定接口所在的位置,它下面的接口将使用SqlSessionFactory实例
@MapperScan(value = "com.example.demo.dao",sqlSessionFactoryRef = "sqlSessionFactoryBean2")
public class MybatisConfigTwo {
@Resource(name="dsTwo")
private DataSource dsTwo; @Bean
SqlSessionFactoryBean sqlSessionFactoryBean2() throws Exception {
SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();
factoryBean.setDataSource(dsTwo);
return (SqlSessionFactoryBean) factoryBean.getObject();
}
@Bean
SqlSessionTemplate sqlSessionTemplate1() throws Exception {
return new SqlSessionTemplate((SqlSessionFactory) sqlSessionFactoryBean2());
}
}

第三步:在包com.example.demo.dao和com.example.demo.dao2分别创建接口BookMapper和BookMapper2

package com.example.demo.dao;

import com.example.demo.entity.Book;
import java.util.List; public interface BookMapper {
List<Book> getAllBook();
}

package com.example.demo.dao2;

import com.example.demo.entity.Book;

import java.util.List;

public interface BookMapper2 {
  List<Book> getAllBook();
}

第四步:在上面两个包中分别创建BookMapper.xml,BookMapper2.xml  

<?xml version="1.0" encoding="uTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.BookMapper">
<select id="getAllBook" resultType="com.example.demo.entity.Book">
select * from book
</select>
</mapper>
<?xml version="1.0" encoding="uTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao2.BookMapper2">
<select id="getAllBook" resultType="com.example.demo.entity.Book">
select * from book
</select>
</mapper>

第五步:创建BookController

package com.example.demo.controller;

import com.example.demo.dao.BookMapper;
import com.example.demo.dao2.BookMapper2;
import com.example.demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookMapper mapper;
@Autowired
private BookMapper2 mapper2; @GetMapping("/find")
public Map find(){
Map<String,Object> map=new HashMap<>();
List<Book> query1 = mapper.getAllBook();
List<Book> query2 = mapper2.getAllBook();
map.put("datasouce1",query1);
map.put("datasouce2",query2);
return map;
}
}

第六步:启动项目,进行测试。

6.整合Mybatis出现null

当前端传入的数据给后台,一个对象中有的属性为null时mybatis是不能进行插入操作的,但是需求是这些为null的值得转换为空字符串存入到数据库,其中的一个解决办法如下:

第一步:创建一个类,用于转换类型是字符串,值为null的属性

package com.kanq.framework.util;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.springframework.context.annotation.Configuration; import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* 当值为null时设置为"",用于mybatis的数据插入
*/
@Configuration
public class NullValueHandler implements TypeHandler<String> { @Override
public void setParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {
if(s==null&&jdbcType==JdbcType.VARCHAR){//判断传入的参数值是否为null
preparedStatement.setString(i,"");//设置当前参数的值为空字符串
}else{
preparedStatement.setString(i,s);//如果不为null,则直接设置参数的值为value
}
} @Override
public String getResult(ResultSet resultSet, String s) throws SQLException {
return resultSet.getString(s);
} @Override
public String getResult(ResultSet resultSet, int i) throws SQLException {
return resultSet.getString(i);
} @Override
public String getResult(CallableStatement callableStatement, int i) throws SQLException {
return callableStatement.getString(i);
}
}

第二步:在mybatis的BookMapper.xml中修改如下

insert into xcjhb values(null,    #{xczrr,jdbcType=VARCHAR,typeHandler=com.kanq.framework.util.NullValueHandler},.....)

typeHandler的值是NullValueHandler所在的路径,这样当前台传入的值为null时后台就可以正常插入了。

Spring Boot整合持久层的更多相关文章

  1. Spring Boot 整合视图层技术,application全局配置文件

    目录 Spring Boot 整合视图层技术 Spring Boot 整合jsp Spring Boot 整合freemarker Spring Boot 整合视图层技术 Spring Boot 整合 ...

  2. Spring Boot 整合视图层技术

    这一节我们主要学习如何整合视图层技术: Jsp Freemarker Thymeleaf 在之前的案例中,我们都是通过 @RestController 来处理请求,所以返回的内容为json对象.那么如 ...

  3. Spring Boot 整合Web 层技术(整合Servlet)

    1 整合Servlet 方式一1.1通过注解扫描完成Servlet 组件的注册      1.1.1创建Servlet /*** 整合Servlet 方式一*/@WebServlet(name = & ...

  4. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  5. Spring Boot初识(2)- Spring Boot整合Mybaties

    一.本文介绍 首先读这篇文章之前如果没有接触过Spring Boot可以看一下之前的文章,并且读这篇文章还需要你至少能写基本的sql语句.我在写这篇文章之前也想过到底是选择JPA还是Mybaties作 ...

  6. Spring Boot 整合JDBC 实现后端项目开发

    一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...

  7. Spring Boot整合实战Spring Security JWT权限鉴权系统

    目前流行的前后端分离让Java程序员可以更加专注的做好后台业务逻辑的功能实现,提供如返回Json格式的数据接口就可以.像以前做项目的安全认证基于 session 的登录拦截,属于后端全栈式的开发的模式 ...

  8. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  9. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

  10. spring boot 整合pagehelper分页插件

    Spring Boot 整合pagehelper分页插件 测试环境: spring boot  版本 2.0.0.M7 mybatis starter 版本  1.3.1 jdk 1.8 ------ ...

随机推荐

  1. 结构化网格 & 非结构化网格

    简介 简单的名词释义 参考文献 基于迭代的六面体网格生成算法 结构化网格 又称为栅格,是指区域内所有的网格点都有相同的度.结构化网格的优点有生成速度快,存储结构简单,有许多优化措施,对形状简单的物体, ...

  2. 谷云观点:企业为什么要部署私有化的AI Agent智能体构建平台?

    一.引言 在数字化浪潮的推动下,企业正面临着前所未有的机遇与挑战.随着人工智能技术的飞速发展,智能体(AI Agent)逐渐成为企业提升竞争力.实现降本增效的重要工具.然而,与个人开发智能体有所不同, ...

  3. API自动化测试平台:企业API管理的得力助手

    随着微服务架构和分布式系统的广泛应用,软件系统的复杂性不断增加,传统的手动测试方法已经无法满足快速迭代和高质量交付的需求.API作为系统间通信的核心,其稳定性和可靠性对于整个软件系统至关重要.因此,A ...

  4. Restcloud新手小白使用感受

    Restcloud新手小白使用感受 版本:Restcloud ETL 社区版V1.1.0 搞了几年的运维工作,中间陆陆续续因为公司各系统不够完善,但是用户的各种报表需求又不能拒绝,最后的产生结果就是在 ...

  5. SciTech-EECS-Signal-OpAmp(Operational Amplifier,运算放大器): Gain放大倍数计算公式及其电路中电容的作用 + MCU或OpAmp用 三极管适配 以驱动 高Vgs电压的MOS管 + 分流器采样百安级大电流的微电压信号 + 微电压信号放大

    SciTech-EECS-Signal-OpAmp(Operational Amplifier,运算放大器): Gain增益放大倍数计算公式 ## 分流器采样百安级大电流的微电压信号 OpAmp(运算 ...

  6. SciTech-Chemistry(化学)-电解: 电化学之"Electroplating(电镀)"工艺及应用 + Switching Power(开关电源 可软件控制波形)

    Electroplating(电镀): Electroplating(电镀)是 "镀液的金属离子" 在外电场作用, 经 "电极反应" 还原成"金属原子 ...

  7. java发送短信验证码DEMO 发送POST请求示例

    package apiserver; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.ap ...

  8. python continue_vs_return

  9. AI 赋能的故障排除:技术趋势与实践

    AI 赋能的故障排除:技术趋势与实践 随着人工智能技术的飞速发展,AI 在 IT 运维领域的应用日益广泛.AI 赋能的故障排除正在成为一种趋势,可以帮助 IT 团队更快.更准确地解决问题,提高系统的可 ...

  10. 家里有密码锁的注意了,这真不是 BUG,是 feature。

    你好呀,我是歪歪. 前几天在网上冲浪的时候看到一个消息,关于智能密码锁的. 就是这种玩意: 当时我看到的那个消息说,开密码锁的时候,你输入的数字串只要包含你真正的密码就能开锁. 比如,假设你的密码是: ...