Springboot笔记

 

1、ApiOperation的使用

@ApiOperation不是spring自带的注解是swagger里的
com.wordnik.swagger.annotations.ApiOperation;

@ApiOperation和@ApiParam为添加的API相关注解,各参数说明如下:
@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;其他参数可参考源码;
@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”

实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。

Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目

实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,

详情参阅:https://blog.csdn.net/fansunion/article/details/51923720

 

2、JdbcTemplate的基本使用方法

JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

在JdbcTemplate中执行SQL语句的方法大致分为3类:

  1. execute:可以执行所有SQL语句,一般用于执行DDL语句。
  2. update:用于执行INSERTUPDATEDELETE等DML语句。
  3. queryXxx:用于DQL数据查询语句。
 @Autowired
 private JdbcTemplate jdbcTemplate;
//创建JdbcTemplate对象,方便执行SQL语句

更多详情参阅:https://blog.csdn.net/weixin_40001125/article/details/88538576

 

3、使用KeyHolder 获取Spring JdbcTemplate插入记录ID

KeyHolder keyHolder = new GeneratedKeyHolder();

使用Spring JdbcTemplate插入数据之后,如果需要获取插入之后的ID,代码如下:

 public NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    
    public void insert(){
            String insertSql = "insert into user(name,age) values (:name,:age)";
            User user = new User();
            user.setName("test");
            user.setAget(18);
            
            KeyHolder keyHolder = new GeneratedKeyHolder();
            int insertResult = namedParameterJdbcTemplate.update(insertSql, new BeanPropertySqlParameterSource(user), keyHolder);
            int userId = keyHolder.getKey().longValue();
   }

 

4、插入并返回主键id

这个属于比较常见的需求了,我希望获取插入数据的主键id,用于后续的业务使用; 这时就需要用KeyHolder

/**
 * 新增数据,并返回主键id
 *
 * @return
 */
private int insertAndReturnId() {
    String sql = "INSERT INTO `money` (`name`, `money`, `is_deleted`) VALUES (?, ?, ?);";
    KeyHolder keyHolder = new GeneratedKeyHolder();
    jdbcTemplate.update(new PreparedStatementCreator() {
        @Override
        public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
            // 指定主键
            PreparedStatement preparedStatement = connection.prepareStatement(sql, new String[]{"id"});
            preparedStatement.setString(1, "一灰灰5");
            preparedStatement.setInt(2, 500);
            byte b = 0;
            preparedStatement.setByte(3, b);
            return preparedStatement;
        }
    }, keyHolder);
    return keyHolder.getKey().intValue();
}

更多关于JdbcTemplate的知识参阅:https://blog.csdn.net/weixin_34301307/article/details/91375836

 

 

5、Serializable(序列化)

什么是Serializable接口

一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。

什么是序列化?

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

为什么要序列化对象

1、把对象转换为字节序列的过程称为对象的序列化

2、把字节序列恢复为对象的过程称为对象的反序列化

为什么要定义serialversionUID变量

如果我们没有自己声明一个serialVersionUID变量,接口会默认生成一个serialVersionUID。

但是强烈建议用户自定义一个serialVersionUID,因为默认的serialVersinUID对于class的细节非常敏感,反序列化时可能会导致InvalidClassException这个异常。

 

转自:https://baijiahao.baidu.com/s?id=1633305649182361563&wfr=spider&for=pc

 

6、@ResponseBody与@RequestBody

@ResponseBody的作用其实是将java对象转为json格式的数据。

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

 

@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
作用:

1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定
到要返回的对象上; 
2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

详情参阅:https://blog.csdn.net/originations/article/details/89492884

 

7、Maven

maven的安装教程参照:https://www.cnblogs.com/eagle6688/p/7838224.html

 

报错:

1、出现 java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required 这个错误

百度了很多,都说是jdbc数据库驱动版本太高,降低就好了,后来自己排查,发现问题确实出在版本,解决方案:从仓库复制低版本的引入;

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.37</version>
    <scope>runtime</scope>
</dependency>

 2、 报错 Table 'study.t_admin' doesn't exist

通过检查发现是yml文件的数据库连接搞错了

url: jdbc:mysql://localhost:3306/marriage?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC

红色加粗部分的marriage才是正确的,mapper.xml中查的是marriage数据库,我是直接复制上个项目的,结果我没改过来还是用的study。

3、报错 Cannot resolve MVC View 'hello.html" 无法跳转到html页面

可能是视图解析没配置好,在application.yml或者application.properties中添加下面的配置

spring.mvc.view.prefix=classpath:/static/
spring.mvc.view.suffix=.html

另外如果有用thymeleaf的话要配置路径跟后缀,thymeleaf默认的路径是 classpath:/templates/,可添加下面的配置

spring.thymeleaf.prefix=classpath:/static/
spring.thymeleaf.suffix=.html
#禁用thymeleaf缓存
spring.thymeleaf.cache=false

 

 

thymeleaf
posted @ 2020-02-20 17:41  几度失手ya  阅读(319)  评论(0编辑  收藏  举报