Java项目部分总结
一、数据库sql操作:
1、三表查询的时候,最后的条件由于当前字段必须判断是属于哪个表,所以需要注明根据哪个表中的字段进行判断:
并且再在后面加上limit的时候,需要注意先进行添加,避免系统不能识别具体几个参数:
// 根据条件在员工信息表中搜索 public List<Message> getMessageByCondition(Condition condition, int index, Integer currentCount) throws SQLException { QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource()); String sql = "select * from person join position ON person.ppid=position.ppid JOIN department ON person.pdid=department.pdid where 1=1"; // 需要将结果存在集合中(因数组长度不可变) DISTINCT去重 ArrayList<Object> arr = new ArrayList<Object>(); // trim()是去掉首尾空格 if (condition.getPpid() != null && condition.getPpid() != "") { // sql += " and pposition like ?"; && condition.getPteam() != "" // arr.add("%" + condition.getPposition() + "%"); sql += " and person.Ppid=?"; arr.add(condition.getPpid()); } if (condition.getPdid() != null && condition.getPdid() != "") { sql += " and person.Pdid=?"; arr.add(condition.getPdid()); } if (condition.getPteam() != null && condition.getPteam() != "") { sql += " and pteam=?"; arr.add(condition.getPteam()); } sql += " limit ?,?"; arr.add(index); arr.add(currentCount); List<Message> list = qr.query(sql, new BeanListHandler<Message>(Message.class), arr.toArray()); return list; }
2、五表查询的时候直接查询就行:
String sql = "SELECT * FROM information JOIN person ON person.pname=information.pname JOIN human ON human.username = information.username JOIN `position` ON person.ppid=position.ppid JOIN department ON person.pdid=department.pdid ";
3、将1表中根据条件查询出来的结果放置到2表中的某个字段上:
String sql = "INSERT INTO `human` (username) SELECT(SELECT `username` FROM information WHERE istate ='通过')";
4、根据在1表中查询出来的结果删除其在2表中的数据:
String sql = "delete from information where pname =(select pname from person where pid=?)";
二、JavaBean类:
因为减少数据的冗余,需要将表的一些数据进行再分表,这样要是想查看所有的信息的话,需要进行多表的查询--要建个多个数据的类:
1、可以使用继承的形式:--这样子类可以获得其和父类的所有的数据;(根据子类输出结果时只显示子类有的属性的数据,但是其可以调用父类的属性)
package domain; //个人全部信息--继承登录信息页面 public class PersonalMessage extends Information{ private String pwd; private Integer pid; private String pposition; private String pdepartment; private Integer pteam; private Integer ppid; private Integer pdid; public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public Integer getPid() { return pid; } public void setPid(Integer pid) { this.pid = pid; } public String getPposition() { return pposition; } public void setPposition(String pposition) { this.pposition = pposition; } public String getPdepartment() { return pdepartment; } public void setPdepartment(String pdepartment) { this.pdepartment = pdepartment; } public Integer getPteam() { return pteam; } public void setPteam(Integer pteam) { this.pteam = pteam; } public Integer getPpid() { return ppid; } public void setPpid(Integer ppid) { this.ppid = ppid; } public Integer getPdid() { return pdid; } public void setPdid(Integer pdid) { this.pdid = pdid; } @Override public String toString() { return "PersonalMessage [pwd=" + pwd + ", pid=" + pid + ", pposition=" + pposition + ", pdepartment=" + pdepartment + ", pteam=" + pteam + ", ppid=" + ppid + ", pdid=" + pdid + "]"; } }
2、其实也可以就建一个大类,需要调用什么数据的时候,就是用哪个数据:
//请假类 public class Leave implements Serializable { private Integer lid; private Integer pid; private String pname; private Double lday; private String dateStart; private String dateWork; private String lreason; private String leaveType; private String lstate1; private String lstate2; // 额外的属性---连表查询用 private Integer pdid; private Integer pteam; private Integer ppid; private String pdepartment; private String pposition; public Integer getLid() { return lid; } public void setLid(Integer lid) { this.lid = lid;
3、上面代码中的
implements Serializable
是实现序列化的,无大碍。
三、其他的小细节:
1、修改:
查询jsp内点击某行的修改按钮(带着本行的ID)-->根据本行的ID查询本行所有的数据Servlet-->请求转发 进入修改jsp页面(可以设置某些信息不能更改:disabled="true")--->修改Servlet--->重定向 查询所有的信息Servlet ---> 查询总的jsp页面
2、form表单中action指向的地址是其submit按钮所提交的地址;
3、当页面点击未出现预期的效果,首先检查点击事件的地址,然后去XML里查看Servlet是否存在;
若是没有数据,查看是否将数据已取到了,是否将数据存到域中,JSP页面中的键值是否正确;
<查看数据的话,在java内直接system.out.println(数据),在jsp内直接${数据}>
四、使用layui:
1、当使用其表单时:
需要进行渲染:
layui.use('form', function () {
var form = layui.form;
form.render();
});
2、弹出层:(需要使用自己的js?)
/* 使用弹出层 */
layui.use('layer', function() {
var layer = layui.layer;
});
//第一种:主动加载jquery模块(跟自己引入的冲突会导致弹出框消失后,内容还存在在页面内)
layui.use(['jquery', 'layer'], function(){
var $ = layui.$ //重点处
,layer = layui.layer;
//后面就跟你平时使用jQuery一样
/*设置点击出现弹出框 */
/* $("#btn").click(function() {
layer.open({
title:"友情提示",
type : 1,
closeBtn : false,
shadeClose : true,
content : $("#info"),
cancel: function(){//关闭按钮的回调函数
location.reload();//关闭时刷新页面 (防止弹出框内容再次显示在页面内)
}
});
}) */
3、使用iframe的切换时:点击时添加上SRC地址;
<!-- 引入iframe --> <iframe class="personList" style="width: 100%; height: 100%; margin-top:0" frameborder="0" src=""></iframe> /* 点击员工信息表按钮 */ $(".personalMessagebtn").on( "click", function() { $(".personList").attr("src", "${pageContext.request.contextPath}/PersonalMessageServlet"); $(".layui-body").css("background", "none"); }); /*点击员工岗位信息表按钮 */ $(".ConditionPersonbtn").on("click", function() { $(".layui-body").css("background", "none"); $(".personList").attr("src", "${pageContext.request.contextPath}/ConditionPersonServlet", "display", "block") });
4、其他详见:https://www.cnblogs.com/30go/p/11088549.html(侵删)