为什么实体类要实现 Serializable
接口?
目的: 便于传输(远程调用), 便于存储.
对象序列化可以将任何对象写出到输出流中, 并在之后将其读回.
序列化的重要应用是通过网络将对象集合传送到另一台计算机上. 序列化用序列号代替内存地址, 所以能够将对象集合从一台机器传送到另一台机器.
为什么Mysql连接中写useUnicode=true&characterEncoding=UTF-8&useSSL=false
https://blog.youkuaiyun.com/zhangyanyue2016/article/details/51900468
https://blog.youkuaiyun.com/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
实际中用的
- Mysql中 用的 datetime 类型
- Mybatis 配置文件中写的 jdbcType="TIMESTAMP, SQL中取的时候用
DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s')
- 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 都存进去了…
数据批量操作
- 批量增加, 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>
- 先判断有没有 再批量删除,
- 批量更新, 首先根据传过来的数据条件, 去找数据表中已经存在的所有数据删掉, 然后在更新.
- 批量操作都要用事务控制.
跨域问题
- 自定义过滤器 实现
Filter
接口 重写doFilter()
- 设置
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);
- 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>
和前端对接问题
约定好了接口和参数, 但是单词拼错了, 我想改前端说不行, 不能改, 就得按照接口文档来. 蓝瘦,香菇, 我想说 前后端分离, 真正的前后端分离了么???
话说天下大势, 分久必合, 合久必分…