SpringBoot项目 注意事项(一)

文章目录

  • 1. 插入数据库数据,并返回当前主键
  • 2. Mybatis不能处理char类型
  • 3. 判断文件是否是图片
  • 4. 缩略图 thumbnailator API使用
  • 5. @Value获取不到application.yml的情况
  • 6. 若依框架
  • 7. git远程分支切换
  • 8. sql语句
  • 9. java底层是值传递,并不是引用传递
  • 10. restTemplate提交post表单
  • 11. disable cache 关闭,方便调试
  • 12. WebFilter想要引入springboot里面的bean实例
  • 13. @SpringBootApplication(exclude = XXX )可以排除一些自动配置类

1. 插入数据库数据,并返回当前主键


插入数据库数据,并返回当前主键。

//当执行完插入语句的时候,在执行该语句就可以获得插入数据库的主键。
SELECT @@IDENTITY AS ID;

2. Mybatis不能处理char类型


mybatis的resultType不能处理char类型,只能通过String获取。

解决方式:通过String获取,再转为char类型。

3. 判断文件是否是图片


判断是否是图片可以通过高宽来判断。

/** 
* 通过读取文件并获取其width及height的方式,来判断判断当前文件是否图片,这是一种非常简单的方式。 
*  
* @param imageFile 
* @return 
*/  
public static boolean isImage(File imageFile) {  
    if (!imageFile.exists()) {  
        return false;  
    }  
    Image img = null;  
    try {  
        img = ImageIO.read(imageFile);  
        if (img == null || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) {  
            return false;  
        }  
        return true;  
    } catch (Exception e) {  
        return false;  
    } finally {  
        img = null;  
    }  
}  

4. 缩略图 thumbnailator API使用


thumbnailator API可以操作图片的缩略大小。

//通过原图a.jpg文件,生成缩略图a_thum.jpg
Thumbnails.of(new File("abc/a.jpg"))
                    .size(200,200)
                    .toFile(new File("abc/a_thum.jpg"));

像这些文件存储,图片存储,图片缩略图,一般这些东西都会存到文件管理系统上面。常用的文件存储系统像七牛云,阿里oss,腾讯cos。对应这些系统都会有SDK和SDK文档,一步步调用管理就行。

像一些开发中,一般都是有缩略图和原图,像图片显示的时候是缩略图,点开图片是原图。

这些缩略图和原图一般存到服务器本地或者文件存储系统(七牛云,oss,cos)中。

我们的数据库,存储的文件的相对路径或者绝对路径。

  • 相对路径:就是文件加上目录的位置。
  • 绝对路径:本地就是本地的绝对路径,云存储就加上域名。

使用UUID来解决文件的命名和文件的类型处理:(防止文件冲突)

//springboot文件上传传过来一个multpart的file文件
String fileName = file.getOriginalFilename();
//默认不指定key的情况下,以文件内容的hash值作为文件名   这里的file可以指定七牛云存储的位置。
String name = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
//File.separator不能在这里使用,七牛云不支持,无法创建目录。
String key = directory + "/" +name;

5. @Value获取不到application.yml的情况


碰到过三种情况导致@Value获取不到配置值

  • 变量被关键字static修饰
  • 类没有使用@Component及其衍生标签修饰
  • 在Bean初始化时构造方法中引用被@Value修饰的变量

6. 若依框架


若依前后台分离的管理系统很方便,拿来即用!

很多功能已经设计好,字典管理,参数管理等等。

可以去官方下载。


若依的自带的后台管理功能有很多:

  • 通过extends继承BaseController,可以拿到当前登录用户的一些信息。

  • 自带的字典管理可以配置很多系统信息,获取字典如下:

@Autowired
private ISysDictTypeService dictTypeService;

@Autowired
private ISysDictDataService dictDataService;

/**
* 根据字典类型查询字典数据信息
* 
* @param dictType 字典类型
* @return 参数键值
*/
public List<SysDictData> getType(String dictType)
{
return dictTypeService.selectDictDataByType(dictType);
}

/**
* 根据字典类型和字典键值查询字典数据信息
* 
* @param dictType 字典类型
* @param dictValue 字典键值
* @return 字典标签
*/
public String getLabel(String dictType, String dictValue)
{
return dictDataService.selectDictLabel(dictType, dictValue);
}
  • 若依后台的路由信息是从后台返回的,这点很符合权限管理系统,根据不同的用户权限返回不同的路由信息。例如:左边的菜单栏对应若依的sys_menu表。

7. git远程分支切换


git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:

  1. 找一个干净目录,假设是git_work

  2. cd git_work

  3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录

  4. cd project

  5. git branch -a,列出所有分支名称如下:
    remotes/origin/dev
    remotes/origin/release

  6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支

  7. git checkout -b release origin/release,作用参见上一步解释

  8. git checkout dev,切换回dev分支,并开始开发。

8. sql语句


case xxx when xxx then … else xxx end的用法

SELECT
    s.s_id,
    s.s_name,
    s.s_sex,
    CASE s.s_sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
END as sex,
 s.s_age,
 s.class_id
FROM
    t_b_student s
WHERE
    1 = 1

MySql数据库优化之LIMIT 1,因为有时候不需要查询多条数据,例如:我想确定数据库中有没有重名的数据,直接设置为limit 1 ,只要查询到1个就说明有重名的,就不用在显示多个了(当然,如果有多个那就说明数据库里面有脏数据)。


linux查看端口占用情况命令:

  • lsof -i:端口号

9. java底层是值传递,并不是引用传递


对于基本数据类型,是直接对应变量存储的值。
SpringBoot项目 注意事项(一)_第1张图片

对于引用数据类型,存储的就是地址。通过地址找到响应数据。数据一般存在堆中(要看java版本):
SpringBoot项目 注意事项(一)_第2张图片


对形参的修改不会影响到实参,那就行值传递。

对形参的修改能影响到实参,那就是引用传递。

直接理解看着java好像符合引用传递,但是java并不是,因为在栈中存放的是变量,我们声明的对象都存在堆中。栈中的变量存储的是堆中对象的地址,因此看着像引用传递其实不是。
SpringBoot项目 注意事项(一)_第3张图片

10. restTemplate提交post表单


SpringBoot项目 注意事项(一)_第4张图片

11. disable cache 关闭,方便调试


SpringBoot项目 注意事项(一)_第5张图片

12. WebFilter想要引入springboot里面的bean实例


@WebFilter("/*")
@Repository
public class loginFilter implements Filter {

    @Autowired
    LoginService loginService;


    public void init(FilterConfig filterConfig) throws ServletException {
        /**
         * 由于web应用启动的顺序是:listener>filter>servlet  所以才filter初始化的时候手动添加SpringBean支持。这个是重点的重点!
         * 目的就是为了防止上面的Service自动装配能够装配进来。
         */
        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, filterConfig.getServletContext());
    }
}

13. @SpringBootApplication(exclude = XXX )可以排除一些自动配置类


@SpringBootApplication(exclude = XXX )可以排除一些自动配置类。

例如:

  • 排除了dataSource的自动配置。@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

你可能感兴趣的:(SpringBoot项目,spring,boot,java,学习)