渔夫总结一波摸鱼经验

为什么实体类要实现 Serializable 接口?

目的: 便于传输(远程调用), 便于存储.
对象序列化可以将任何对象写出到输出流中, 并在之后将其读回.
序列化的重要应用是通过网络将对象集合传送到另一台计算机上. 序列化用序列号代替内存地址, 所以能够将对象集合从一台机器传送到另一台机器.

为什么Mysql连接中写useUnicode=true&characterEncoding=UTF-8&useSSL=false

https://blog.csdn.net/zhangyanyue2016/article/details/51900468

https://blog.csdn.net/gnail_oug/article/details/84653878

ctrl+alt+T --> 调出 try-catch-finally

maven 重复下载一个jar包 问题怎么解决

1. maven clean compile package
2. 取消i dea 的 work offline 勾选

MySQL中的日期类型与Java中类型对应

MySql的时间类型有          Java中与之对应的时间类型
date                                           java.sql.Date

Datetime                                    java.sql.Timestamp

Timestamp                                  java.sql.Timestamp

Time                                          java.sql.Time

Year                                           java.sql.Date

https://www.cnblogs.com/twoheads/p/9987935.html

实际中用的

  1. Mysql中 用的 datetime 类型
  2. Mybatis 配置文件中写的 jdbcType="TIMESTAMP, SQL中取的时候用DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s')
  3. Java对象中的用 java.util.Date (但是2年老程序员告诉我不要用Date,要用String…)

Mybatis中的SQL拼接

<sql id= " "> 标签中定义可复用的语句
<include feild =" "> 套用定义的SQL语句

    <sql id="Base_Column_List" >
        id, username, password,roleId
    </sql>

    <select id="findUserByUsername" parameterType="String" resultMap="BaseResultMap">
        select <include refid="Base_Column_List"/>
        from t_user where userName=#{userName}
    </select>

trim 标签的使用

为什么用 trim标签?
它可以在你包含的内容前加上某些前缀, 后边加载后缀, 可以把包含内容的部分内容忽略.
https://www.cnblogs.com/qiankun-site/p/5758924.html

    <select id="getUserInfoByUserName" resultMap="BaseResultMap" parameterType="String">
        select
              <include refid="Base_Column_List"/>
        FROM
              user_info
        <trim prefix="where" suffix="" prefixOverrides=",">
            username like concat ('%',#{userName}, '%')
        </trim>

    </select>

GROUP_CONCAT 的用法

group_concat 能将相同的行组合起来.

场景描述: 我一个群组中有多个成员, 现要查出来 所有群组信息 并且格式为: 一个群组信息记录中包含所有成员姓名.

给出数据表

-- 群组表
CREATE TABLE `t_group` (
  `id` bigint(19) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `group_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '群组名称',
  `member_num` bigint(19) DEFAULT NULL COMMENT '成员数',
  `time` datetime DEFAULT NULL COMMENT '创建时间',
  `resource_id` bigint(19) DEFAULT NULL COMMENT '应急现场的id',
  `task_id` bigint(19) DEFAULT NULL COMMENT '应急任务的id',
  `group_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '群组序号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

-- 群组与成员关联表
CREATE TABLE `t_group_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `group_id` bigint(20) NOT NULL COMMENT '群组id',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=latin1;

-- 成员信息表
CREATE TABLE `t_user_info` (
  `id` bigint(19) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '登录名',
  `name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '姓名',
  `mobile` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号',
  `email` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '邮箱',
  `department` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '部门',
  `job` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '职务',
  `role_id` bigint(19) DEFAULT NULL COMMENT '角色id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `create_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '修改人',
  `password` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='用户表';

SQL实现

SELECT
	tg.id AS id,
	tg.group_number AS groupNumber,
	tg.group_name AS groupName,
	tg.member_num AS memberNum,
	tg.resource_id AS resourceId,
	ti.resource_name AS resourceName,
	tg.task_id AS taskId,
	tk.task_name AS taskName,
  GROUP_CONCAT(tui.user_name) as userName,
	DATE_FORMAT( tg.time, '%Y-%m-%d %H:%i:%s' ) AS time 
FROM
	t_group tg
	LEFT JOIN t_group_user tgu ON tg.id = tgu.group_id
	LEFT JOIN t_user_info tui ON tgu.user_id = tui.id
	LEFT JOIN t_resource_task AS tk ON tg.task_id = tk.id
	LEFT JOIN t_resource_info AS ti ON tg.resource_id = ti.id 
GROUP BY
	tg.id 
ORDER BY
	tg.time DESC

在这里插入图片描述

MyBatis 封装数据格式问题

遇到个坑,虽然解决了但是不知道原因. 这里记录下, 看后续能不能研究下.

如果MySQL中查出来 列中 有 一行 id 类似这种
在这里插入图片描述
我在存数据的时候给的Long 类型 然后只能存进去最后一个id值, 搞了大半天才找到.
把Long类型换成String 就把所有id 都存进去了…

数据批量操作

  1. 批量增加, Mybatis 中 <foreach> 接收一个List类型的参数, 别忘了, 这个list里你可以放对象的.
    <insert id="addGroupList" parameterType="java.util.List">
        insert into
                t_group_user (group_id, user_id)
        VALUES
        <foreach item="item" collection="list" separator="," index="index">
            (#{item.groupId}, #{item.userId})
        </foreach>
    </insert>
  1. 先判断有没有 再批量删除,
  2. 批量更新, 首先根据传过来的数据条件, 去找数据表中已经存在的所有数据删掉, 然后在更新.
  3. 批量操作都要用事务控制.

跨域问题

  1. 自定义过滤器 实现Filter 接口 重写 doFilter()
  2. 设置 HttpServletResponse的响应头信息
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse) res;
		String originHeader = request.getHeader("Origin");
		response.setHeader("Access-Control-Allow-Origin", originHeader);
		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");  
		response.setHeader("Access-Control-Max-Age", "0");  
		response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");  
		response.setHeader("Access-Control-Allow-Credentials", "true");  
		response.setHeader("XDomainRequestAllowed","1");   
		response.setHeader("XDomainRequestAllowed","1");   
        chain.doFilter(request, response); 
  1. web.xml中 配置 filter
<filter>
	<filter-name>header</filter-name>
	<filter-class>com.tjtx.filter.HeaderFilter</filter-class>
</filter>

<filter-mapping>
	<filter-name>header</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

和前端对接问题

约定好了接口和参数, 但是单词拼错了, 我想改前端说不行, 不能改, 就得按照接口文档来. 蓝瘦,香菇, 我想说 前后端分离, 真正的前后端分离了么???
话说天下大势, 分久必合, 合久必分…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值