今天完成的事情:
学习代码生成,学习连表查询,模糊查询
明天计划的事情:
继续学习复盘需要做的事,让程凯师兄指点一下
遇到的问题:
代码生成的问题,讲解视频上没那么详细,已解决,解决方法如下
收获:
1:代码生成
首先去svn上选择common文件夹checkout
然后参照代码生成视频做
了解commons-code-demo→src→test→resources→document下放的是excel表
其下collocation中的collocationnew.xlsx
表下面前缀要加上tbl_,如下

自动生成代码需要配置的地方在test→java→com.******→excel→ExcelDocTest
此类中,excelDesignDocParser.parseDesignDoc里填写表的地址

然后修改成正确的输出地址

一长串,结尾true,ok
然后主页面src里就有新东西了

红色是代表新增的还没备份的文件(我猜)
然后下一步是把all.sql录入navicat里
这里面是有坑的.我猜是故意的
比如,all.sql里没设置表名,需要对照.xlsx文件来输入相应表名
其中一个表只写了一小部分

可以按照tbl_profession进行补全,不过目前是测试,就暂时注释掉

然后右键表,运行sql文件,在本地找到all.sql,导入,然后刷新,ok

之后的all-resource.sql是开发机数据库的resource表
再之后是_dao.xml文件,他的包的部分要改成相应的包,不改就会出现bug

daoConfig.xml是所有dao的配置文件,添加或删除某些表的时候要用到这个文件
group相当于以前做任务时候的jdbc

上面这个是项目表,下面这个是resource表
然后是client.composite是客户端组件,喜闻乐见的塔斯卡尼爆红不报错就是这里

然后是server的组件配置,在文件server.composite中

改成自己想要的端口号
2:连表查询
union
操作符union可以用于合并两个或多个select语句的结果集
比如有一个student表和一个teacher表,他们都有name这个字段名
查询两个表里的名字和id可以用:
select ID,Name from student
union
select ID,Name from teacher
就能查到两个表的ID和姓名了
inner join(内连接)也称为自然连接
作用:根据两个或多个表中的列之间的关系,从这些表中查询数据
注意:内连接是从结果中删除其他被连接表中没有匹配的所有行,所以内连接可能会丢失信息
重点:内连接只查匹配行
语法:(inner可省略)
select student
from table1 [inner] join table2
on student.id=table2.id
这样就只有匹配的行存在,其他信息就丢失了
外连接
与内连接相比,即使没有匹配行,也会返回一个表的全集
外连接分为三种,左外连接,右外连接,全外连接,对应left/right/full join
重点:至少有一方保留全集,没有匹配行用null代替
左外连接:结果保留左表的所有行,但只包含第二个表与第一个表匹配的行.第二个表的空行被放入null值
右外连接:如上只是保留相反
全外连接:简称全连接,会把两个表所有的行都显示在结果表中,没有记录丢失,没有匹配的行用null代替
cross join(交叉连接)
交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合.
交叉连接又叫做笛卡尔积,属于效率最低的
例子说明:
假设A={a,b} B={0,1,2}
交叉连接为{(a,0),(a,1),(a,2),(b,0),(b,1)(b,2)}
select Student.ID,Student.Name AS Name
from studnet cross teacher
3:模糊查询
select 字段 from 表 where 某字段 like 条件
1:%查询,%表示任意0个或多个字符,可匹配任意类型和长度的字符,有些情况下如果是中文,就使用两个百分号表示
比如select * from [user] where u_name like '%三%'
将会把u_name为"张三","张猫三","三脚猫","唐三藏"等所有三的记录找出来
如果想既有三又有猫,可以
select * from [user] where u_name like '%三%' and u_name like '%猫%'
如果使用select * from [user] where u_name like '%三%猫%'
则只能找出三脚猫,不能找出张猫三
2:_查询:表示任意单个字符,匹配单个任意字符,它通常用来限制表达式的字符长度
比如select * from [user] where u_name like '_三_'
只找出u_name为三个字且中间字为三的
select * from [user] where u_name like '三__'
只找出u_name为三个字且第一个字是三的
3:[]查询:表示括号内所列字符中的一个(类似正则表达式).指定一个字符,字符串或范围,要求所匹配对象为它们中的任一个
比如:select * from [user] where u_name like '[张李王]三'
将找出张三李三王三,而不是张李王三
同理:select * from [user] where u_name like '老[1-9]'
4:[^]查询:表示不在括号所列之内的单个字符,其取值和[]相同,但它要求所匹配对象为字符以外的任一个字符
5:查询内容包含通配符时
由于通配符缘故,导致我们查询特殊字符"%","_"之类的语句无法实现,而把特殊字符用[]括起来就可以正常查询
参考文献:
http://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html
http://www.cnblogs.com/yank/p/JoinSelect.html
评论