发表于: 2018-01-16 09:22:12
2 584
编辑日报内容...
今天完成的事情:
进行任务4:
1 可以动态变化的地方有三个:
1 :
2 :
3 :
2 设计数据表
我认为可以算业务模型的表只有两个,就是学生和职业。
如果真的建两张表,是有一个问题的。那就是建不建外键。
在阿里的java开发手册中:
6. 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新, 即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群; 级联更新是强阻塞,存在数据库更新风暴的风险; 外键影响数据库的插入速度。
我这里用了一个不是主键的额外字段做关联字段,假如我们是分布式高并发,那就不用外键和级联属性。
1 student表
阿里java规范中说:
所以这里有两个字段是表达是否概念的:是否正在学习(1表示正在学习,0表示工作),是否为优秀学生(1表示是)
2 job表,职业表
3 写出domain和dao/mapper
然后使用mybatis逆向工程生成domain和mapper层。
4 使用mybatis插入几个学生对象
放在test中
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AddStudentTest {
@Autowired
StudentMapper studentMapper;
@Autowired
SqlSession sqlSession;
@Test
public void addStudent() {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
for (int i=1;i<5;i++) {
Student student = new Student
(i, "罗大佑", 1, "一声梧叶一声秋", i % 2, i % 2);
studentMapper.insertSelective(student);
}
}
}
5 编辑service和Controller层
t10页面中需要的动态数据有三个:2个学生数量(long),一个学生List。所以需要三个查询。
1 service代码
@Service
public class StudentService {
@Autowired
private StudentMapper studentMapper;
public long countTotalStudent() {
/**
* 获取所有学生数量
*/
long totalNum;
// 创建一个条件
StudentExample example = new StudentExample();
StudentExample.Criteria criteria = example.createCriteria();
// StudyCondition 字段不为空就统计,这里统计整数
criteria.andIsStudyingIsNotNull();
totalNum = studentMapper.countByExample(example);
return totalNum;
}
public long countWorked() {
/**
* 获取已经工作的学生数量
*/
long workedStudentNum;
StudentExample example = new StudentExample();
StudentExample.Criteria criteria = example.createCriteria();
// 1表示还在学习,没有工作。0表示有工作,不在学习。
criteria.andIsStudyingEqualTo(0);
workedStudentNum = studentMapper.countByExample(example);
return workedStudentNum;
}
public List<Student> listExcellent() {
/**
* 获得 优秀学生的list
*/
StudentExample example = new StudentExample();
StudentExample.Criteria criteria = example.createCriteria();
criteria.andIsExcellentEqualTo(1);
List<Student> students = studentMapper.selectByExample(example);
return students;
}
}
2 controller代码
@Controller
public class DemoController {
private Logger logger = Logger.getLogger(DemoController.class);
@Autowired
private StudentService studentService;
@RequestMapping(value = "/t10index")
public String t10Controller(Model model) {
// 累计学习人数和已经找到工作人数
long totalNum = studentService.countTotalStudent();
model.addAttribute("totalNum", totalNum);
long workedNum = studentService.countWorked();
model.addAttribute("workedNum", workedNum);
// 优秀学员展示
List<Student> excellentStudents = studentService.listExcellent();
model.addAttribute("students",excellentStudents);
return "/t10index";
}
// t11首页
@RequestMapping(value = "/t11index")
public String t11Controller() {
logger.info("d");
return "/t11index";
}
// 使用json传递数据
@RequestMapping(value = "/t10usejson")
@ResponseBody
public String t10UseJson() {
return "";
}
}
期间参考阿里命名规范:
6 编辑t10首页视图jsp()
1 使用c标签把数据填入到jsp中
先把原来的html直接改后缀名为jsp,添加头部信息,得到初步jsp文件
2 注意静态文件的路径:
使用相对路径
<link href="../../statics/Untitled-3.css" rel="stylesheet" type="text/css">
使用绝对路径
<%
pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<link href="${APP_PATH}/statics/Untitled-3.css" rel="stylesheet" type="text/css">
推荐使用绝对路径
使用cdn加速
<link href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css">
数据填充,修改jsp文件三个地方:
两个数量:
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-3 text-center">
<p>
<img src="${APP_PATH}/statics/t10images/453254312.png">${totalNum}<br>
<span class="up-3">累计在线学习人数</span>
</p>
<p>
<img src="${APP_PATH}/statics/t10images/453254312.png">${workedNum}<br>
<span class="up-3">学员已经找到满意工作</span>
</p>
</div>
一个列表
<!--第三部分开始-->
<div class="main-c row">
<h3 class="text-center main-tab">优秀学员展示</h3>
<ul class="list-unstyled text-center">
<c:forEach items="${requestScope.students}" var="students">
<li class="col-xs-12 col-sm-6 col-md-6 col-lg-3">
<div>
<img src="${APP_PATH}/statics/t10images/242424.png">
<span>技术顾问:${students.name}</span>
<p class="text-left">${students.briefIntroduce}</p>
</div>
</li>
</c:forEach>
</ul>
</div>
访问t10页面,成功
还没部署到服务器
明天计划的事情:
尽量完成任务4,学习mybatis逆向工程生成的代码,有时间试试用json格式。
遇到的问题:
刚开始字段用了一个condition来表示是在学习还是毕业的状态,报错sql语法错误
因为condition是mysql的保留字,所以不可以用,改成is_studying字段
收获:
更加熟悉ssm框架搭建(用了大概1个小时,写好所有配置,尽力靠记忆写,实在想不起来再看以前的配置)
c标签的简单用法。
评论