idea2021.2调试Swing时中文乱码:中文变成方块 解决:在Run Debug Configurations添加VM options
MyBatis Generator 超详细配置
创建Mybatis Generator配置文件
引入外部配置文件
MyBatis Generator config 是可以引入外部配置文件的,路径为相对于当前配置文件的路径。
在 <generatorConfiguration>
下按下alt+/
启动代码提示,然后选择properties
然后在生成的properties标签里面按下alt+/
,选择resource
。
输入properties文件的相对于MybatisGenerator配置文件的相对路径:
1 | <generatorConfiguration> |
如果配置正确的话,按下Ctrl+鼠标左键
,点击properties的文件名,可以跳转到properties文件。
配置context
http://mybatis.org/generator/configreference/context.html
在 <generatorConfiguration>
下
1 | <generatorConfiguration> |
context属性值 | 描述 |
---|---|
id | 随便填,保证多个 context的id 不重复就行 |
defaultModelType | 可以不填,默认值 conditional,flat表示一张表对应一个po |
targetRuntime | 可以不填,这个配置会影响生成的mapper.java和mapper.xml的内容。默认值 MyBatis3,常用的还有 MyBatis3Simple |
context的targetRuntime属性
MyBatis3
targetRuntime = MyBatis3,生成的 dao 和 mapper.xml 如下
MyBatis3Simple
targetRuntime = MyBatis3Simple,生成的 dao 和 mapper.xml 如下,接口会少很多,只包含最最常用的
context标签的属性 就讲完了,唯一需要注意的就是targetRuntime的值,该配置成什么看个人喜好
context子标签
context的子元素必须按照以下给出的个数、顺序配置。(是的,没错 MyBatis Generator 对配置的循序还有要求)
- property (0..N)
- plugin (0..N)
- commentGenerator (0 or 1)
- jdbcConnection (需要connectionFactory 或 jdbcConnection)
- javaTypeResolver (0 or 1)
- javaModelGenerator (至少1个)
- sqlMapGenerator (0 or 1)
- javaClientGenerator (0 or 1)
- table (1..N)
plugin
plugin标签可以配置一个插件,
具体有哪些插件可用,详见:http://mybatis.org/generator/reference/plugins.html
给生成的PO类添加equasl和hashCode方法
1 | <generatorConfiguration> |
这个插件给生成的Java模型对象增加了equals和hashCode方法
commentGenerator
http://mybatis.org/generator/configreference/commentGenerator.html
默认会生成注释和时间戳
commentGenerator用来配置生成的注释。默认是生成注释的,并且会生成时间戳,如下
如果你想要保留注释和时间戳,可以不配置 commentGenerator。
不保留时间戳
如果你不想保留时间戳,需要如下配置
1 | <commentGenerator> |
保留数据库表中字段的注释信息
默认生成的注释是不会有 数据库 表中字段的注释,如果你想知道每个字段在数据库中的含义(前提是数据库中对应表的字段你添加了注释),可以如下配置
1 | <commentGenerator> |
不生成注释信息
MyBatis Generator生成注释无用信息太多了,所以一般都选择不生成注释
1 | <commentGenerator> |
目前的配置信息如下:
1 | <generatorConfiguration> |
jdbcConnection
http://mybatis.org/generator/configreference/jdbcConnection.html
MyBatis Generator 需要链接数据库,所以需要配置 jdbcConnection.
1 | <jdbcConnection |
jdbcConnection的属性
connectionURL,driverClass,属性值${xxx}
里面的xxx
是,外部配置文件db.properties
中的key
名称,我的properties
文件内容如下,根据你自己的properties
文件填写即可。
1 | dataSource.driverClass=com.mysql.jdbc.Driver |
你也可以写死,如下所示:
1 | <jdbcConnection |
那就不需要配置<properties resource="db.properties"/>
了
mysql8需要配置
这里面值得注意的是<property name="nullCatalogMeansCurrent" value="true"/>
,因为我用的 mysql-connector-java 版本是 8.0.17,如果不配置这一项,会找不到对应的数据库,官网对此的解释是:
具体原因参考这篇文章 MyBatis Generator踩坑与自救
javaTypeResolver
http://mybatis.org/generator/configreference/javaTypeResolver.html
javaTypeResolver 是配置 JDBC 与 java 的类型转换规则,或者你也可以不用配置,使用它默认的转换规则。
就算配置也只能配置 bigDecimal 类型和时间类型的转换
1 | <javaTypeResolver> |
javaModelGenerator
http://mybatis.org/generator/configreference/javaModelGenerator.html
配置 po类 生成的包路径和项目路径,如下
1 | <javaModelGenerator targetPackage="com.po" |
sqlMapGenerator
http://mybatis.org/generator/configreference/sqlMapGenerator.html
配置 Mapper.xml 文件的生成目录
1 | <sqlMapGenerator targetPackage="com.mapper" targetProject="MyBookAppFenLi"> |
javaClientGenerator
http://mybatis.org/generator/configreference/javaClientGenerator.html
配置Mapper接口 XxxMapper.java 文件的生成目录
1 | <javaClientGenerator targetPackage="com.wqlm.boot.user.dao" targetProject="src/main/java" type="XMLMAPPER"> |
type属性值
context targetRuntime is MyBatis3
type属性值 | 描述 |
---|---|
ANNOTATEDMAPPER | The generated objects will be Java interfaces for the MyBatis 3.x mapper infrastructure. The interfaces will be based on annotations and MyBatis 3.x SqlProviders. No XML mapper files will be generated.The ANNOTATEDMAPPER requires MyBatis version 3.0.4 or higher. |
MIXEDMAPPER | The generated objects will be Java interfaces for the MyBatis 3.x mapper infrastructure. The interfaces will be based on a mix of annotations and XML. An annotation will be used where a simple annotation will work. This client will not generate and Sql Provider, so all complex dynamic SQL will be generated in XML.The MIXEDMAPPER requires MyBatis version 3.0.4 or higher. |
XMLMAPPER | The generated objects will be Java interfaces for the MyBatis 3.x mapper infrastructure. The interfaces will be dependent on generated XML mapper files. |
context targetRuntime is MyBatis3Simple
type属性值 | 描述 |
---|---|
ANNOTATEDMAPPER | The generated objects will be Java interfaces for the MyBatis 3.x mapper infrastructure. The interfaces will be based on annotations and MyBatis 3.x SqlProviders. No XML mapper files will be generated.The ANNOTATEDMAPPER requires MyBatis version 3.0.4 or higher. |
XMLMAPPER | The generated objects will be Java interfaces for the MyBatis 3.x mapper infrastructure. The interfaces will be dependent on generated XML mapper files. |
table
http://mybatis.org/generator/configreference/table.html
一个 table 对应一张表,如果想同时生成多张表,需要配置多个 table
1 | <table schema="" tableName="tb_user" domainObjectName="User" |
domainObjectName
domainObjectName属性表示生成的PO类的类名,如果domainObjectName不配置时,它会按照帕斯卡命名法将表名转换成类名
enableXXXByExample属性
enableXXXByExample 默认为true,但只有在targetRuntime="MyBatis3"
时才生效
生效时,会在po下多生成一个 XxxExample.java
的文件,如下
一个简单的user的Example帮助类有470行,我一般不会去用,如上全设置为false
当 targetRuntime="MyBatis3Simple"
时,enableXXXByExample 不管为true、还是false 都不生效。
完整配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
Eclipse运行MyBatisGenarator
在MybatisGenarator的配置文件上右键,选择 Run As,然后选择Run MyBatis Generator即可。
生成的效果
PO类
Book.java
1 | package com.domain; |
User.java
1 | package com.domain; |
mapper接口
BookMapper.java
1 | package com.mapper; |
UserMapper.java
1 | package com.mapper; |
Mapper.xml
BookMapper.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
UserMapper.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
生成动态SQL配置
动态生成需要把设置为,并设置为
1 | <context id="context1" defaultModelType="flat" targetRuntime="MyBatis3"> |
1 | <?xml version="1.0" encoding="UTF-8"?> |
参考资料
CommandsUI程序开发过程中遇到的问题以及解决方案
需求1:切换到其他程序之后,改变窗体的透明度
问题
问题,刚开始使用鼠标事件来实现,鼠标进入窗体时不透明,鼠标移出窗体时透明。
但是这种方式有问题,当鼠标进入文本框的时候,窗体也透明了。
这说明虽然文本框也是在窗体里面,但从鼠标从窗体移动到文本框的时候,java认为鼠标退出了窗体。
解决方案
鼠标进入窗体的时候,设置透明度为1.0f,或文本框得到焦点的时候设置透明度为1.0f
这样就做到了窗体不透明的效果。
然后加入一个线程来判断窗体是否在活动。
当从窗体,移动到其他程序时,窗体就不活动了,这个时候就可以让窗体透明了。
需求2:窗体不活动的时候收起文本域
虽然离开窗体之后,窗体会变得不透明,但是显示程序输出内容的文本域依然占据着空间,如果程序输出的内容过多,则会占据大量的显示区域。
所以我希望离开窗体之后就把把文本域收起。
如何实现,在线程体中,把textarea所在的滚动面板设置为不可见,然后再重绘窗体即可。
需求3:鼠标悬停在窗体上的时候不透明
此时并不是活动窗口,
2021年08月27日 随堂笔记
项目
社团管理系统
中小学生选课系统
使用缓存
学生选课,不要选一个,就入库一个,而是先写到缓存,然后再批量入库。
用户-角色-权限系统
设计的时候是通用的,可以整合到其他项目中。
用户表
不要设计太多信息,
1 | |userid|password|status| |
设置其他系统的时候,再加入用户详细表详细表的userid和用户表的userid一样就行了。
User(userid,password,status)
角色表
Role(role_id,role_name,pid)
用户角色表
UserRole(id,userid,roleid)
权限表
控制请求URI,对应的权限,例如管理员可以进入/adimin/*
后的URL
普通用户只能进入/user/*
这类的URL
operation
Operation(opid,title,URI)
角色-权限表
父亲角色,RoleOperation(id,roleid,opid)
权限在哪里验证的,
- 拦截器
- AOP,对所有Web层的处理做切片
与其他系统整合
在权限系统的在上面的表上加入app_id,表示其他系统的id.
单点登录?
企业云盘系统
用户决策权限
部门表
部门有子部门,部门拆分和并。
Department(id,dname,pid)
文件夹表
folder(id,name,icon,pid,creator,部门id,公共空间id)
文件信息表
file(fid,name,type,size,forlderID,creator,部门id,空间id,filepath)
员工登录系统的时候可以看到那些文件?
- 公司公共空间
- 部门公共空间
- 个人空间
- 分享空间(只能查看)
使用虚拟文件夹
部门拆分,如何拆分文件。
员工离职,员工的私人信息,如何删除。
问卷调查系统
题库
题干表(tid,title,…),可以加入[type]
选项表(sid,title)
题目表(id,tid,sid,sort),sort表示题目选型的顺序。
试卷库
试卷(id,name,创建者,介绍)
试卷题目表(id,paperid,题目id,sort)
约束表(id,sid,perperID,题目id)。如果sid选中,则perperID后面的就不显示
调查
调查表(nid,title主题,目标,创建者,起始时间,paperid使用那些问卷去调查,样本ID)
回收表(id,nid哪次调查的,paperid问卷ID,题目ID,回答,用户ID,时间)
约束表,当选择一些选项的时候,后面的选型要动态调整。
其他
简历不要写求职意向?
你的项目哪里来的?
老师接的项目,让学生做的。老师把项目让几个学生做,然后挑写的好的。
有层级关系的如何设计表
地址表
1 | |id|title|pid| |
查询省:
1 | select * from add where pid=0 |
查询江苏省下的市:
1 | select * from add where pid=1 |
查询安徽省下的市:
1 | select * from add where pid=2 |
评论表
2021年08月26日 面试
情况已经变了
疫情之后,转线上了。
在线笔试,
在线面试
线下
不能过于随意,
拖鞋x
短裤x
衣服朴素,不能有巨大标语,不能有脏话。
不能过于正式
不要穿正装,西装皮鞋x
如果时间有冲突,的时候一定要先和hr协调好时间。
如果真的迟到了,先和hr沟通,直接说,不好意思,有事冲突了,看能不能换一下时间。
要先协调好,要能从容的过去。
正常
看下巴,
偶尔眼神交流可以。
不要一直等着。
不要和面试官握手
面试官,在你离开之后,才会打分。要留最后的好印象。
面试完之后,朋友圈不要屏蔽hr,朋友圈内容要积极。
一分钟左右
把自己学习的心路历程说一下,就OK.
我叫xx,来自默默学院。
我对编程比较感兴趣,自学了那些那些那些。
不管那个公司的面试的自我介绍,都是这些,不要变来变去。
我们公司加班比较多
我们公司不怎么加班。
回答都是,
既然我选择了软件开发,我就对加班有心理准备。
我么加班比较多,你能加班多少小时,加班费有多少。
答案:只要我身体受得了,没问题。
加班的情况
- 硬性加班
- 业务多,有事干,优化产品。
- 出事故,需要马上处理
- 其他加班
- 培训,交流,讲自己的工作内容(防止跑路后人无法接盘)。
- 刚入职,干的都是边边角角的事情,
- 先熟悉业务处理流程
- 琐碎的事情多,改的代码少,看的多。
- 可以看公司的其他业务流程,(这样才是提升自己的机会)
我之前学编程,觉得很难,经过不断的学习,提高了编程能力,觉得有点成就感。
尽量积极,阳光,不要写无聊的事情。
多多少少要了解一下。
这个问题是仅次于加班的问题
我未来两到三年的时间,争取做到公司的技术骨干。
提高技术水平。
两年内不要跳槽,
跳槽的情况
- 不能忍受。领导不行,团队不行
- 有更好的机会
不跳槽的情况
- 有前景,有盼头。
- 没找到机会(两到三年后不到30K的就先不要动)工资不翻倍先不要动。
问,你什么时候开始学的编程?
答:大二上,开始接触Java编程,然后再慢慢一点点开始学。
或者自我接收里面说,大一接触c语言,大二开始基础Java编程,然后学了那些那些,做了那些那些。
优点,你可以随便说。
缺点,道德上面不能说
X:我爱贪图小便宜(错)
X:我爱背后依赖别人(错)
可以说性格缺点,我比较啰嗦,我敏感。
细心强迫症
我心里强迫,强迫症(这种写代码最好)
不能收粗心
更不能说,粗心(超级错误),对于细节不够关注(简历上术语书写错误)
大大咧咧
马大哈
丢三落四
(这样性格的人不能写代码)
可以直接拒绝,直接说我就喜欢写代码。你从代码做起,后面可以转其他。
短期轮岗可以接受
前端,测试,产品经理,运维,这些你后面有的是机会去做。
直接回答,说我的技术能力是瞒足贵公司要求的。
要了解对方工资的薪资水平
看准网,校园Offer网,问张。
给你多少就是多少。
面试官问这个是可以用来否定你
很多公司都是一口价,半年的试用期内,会根据第一次定的薪水,调薪。
好的在薪水上加,差的人在薪水上减薪,更差的滚蛋。
先看对方的薪酬,不要说得很准,说一个范围。百分之20的范围内。
如果他们薪酬是11,可以说12到14K。或者10-13K。
结构化面试都是,给定薪酬段匹配。
总结:
- 提前了解
- 说薪酬段
没什么要问的,等贵公司通知。
没什么要问的,等入职。
不要乱问?
如:
问点对自己和公司都有帮助的
入职之前我需要做什么准备
入职之前我提前去实习吗
我最迟什么时候能接受到通知,最迟什么时候发Office
我需要提前去公司附近租房吗,(不要问公司提供住宿吗)low,
我实习期间会有师傅带吗。
态度
例如让你转到其他城市去是否可以。
例如让你转语言,例如转到Go,C#,
- 答,可以,带薪学习。不要犹犹豫豫
我们的层次(海康,小米,vivo,oppo),大厂
自信
不要显得无精打采,没精神。
不要说不会或不知道
面试官一定会问到你不知道的,为了测试你的边界。
要换种说法,要积极的。
积极回答不知道
暂时没有接触到
暂时没有学到这块
还没有深入到这个程度。
我还没来得及学到这个地方就
如果技术上与面试官有争执,不要认怂,说我印象中的是这样的,我回去查一下。
非技术问题,回到的一定要正向积极的。
你的领导让你做一件事,但是可能造成公司损失。你是做,还是不做。
不干,积极向领导说明这样对公司有害。
不干,积极向领导说明,要求向更上层的领导请示是否有害。
干,可能是我的眼界不够,才会觉得是有害的。
一定要总结
要求:
- 及时
- 面试完,就总结
- 线上面试结束就总结。
- 线下面试到安全的地方就总结。
- 面试完,就总结
- 细致
- 要精确到最细致的问题,问的是那个具体的问题。
- 你怎么回答的
- 可视化
- 要整理成册
建议:
- 发到群里,保留问题,自己的回答可以删掉
过一段时间,要回看总结,要看到进步,要看到里面问的共性
这个共性,就是你下次要说的关键点。下次在这个地方就要多注意将。