编写Dao和Service
先在domain下编写实体类Student
package com.bipowernode.domain;
public class Student {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
在Dao包下编写StudentDao接口
package com.bipowernode.dao;
import com.bipowernode.domain.Student;
import java.util.List;
public interface StudentDao {
int insertStudent(Student student);
List<Student>selectStudents();
}
在Dao下写Mybatis的mapper文件,参见我的文章
IDEA项目中创建MyBatis的mapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bipowernode.dao.StudentDao"><!--namespace是接口名的
全限定名称(右键 copy reference)-->
<select id="selectStudents" resultType="com.bipowernode.domain.Student">
<!--id是接口中方法的名称 -->
<!--resultType指定查询结果的类型的全限定名称-->
<!--由于在mybatis.xml中已经配置了别名 <package name="com.bjpowernode.domain"/>
所以这里可以直接写resultType="Student"-->
select id,name,age from student order by id desc
<!-- 这里直接写的列名而不是select*,因为项目开发过程中表的结构可能会发生变化,
且节约网络流量,效率会有所提升,比如有时候表中列比较多
网络中传输的数据就很多,用到哪一列就选哪一列-->
</select>
<insert id="insertStudent" >
insert into student(name ,age)values(#{name},#{age})
<!--我们的insertStudent方法的参数是一个对象,我们可以用这个对象的属性名来代表实际
的参数值(对应values)-->
</insert>
</mapper>
Service部分
先在service下写StudenService接口
package com.bipowernode.service;
import com.bipowernode.domain.Student;
import java.util.List;
public interface StudenService {
int addStudent(Student student);
List<Student> findtStudents();
}
在service的impl包下实现接口
package com.bipowernode.service.impl;
import com.bipowernode.dao.StudentDao;
import com.bipowernode.domain.Student;
import com.bipowernode.service.StudenService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
//@Service创建service对象
public class StudenServiceImpl implements StudenService {
// 声明DAO
//可以适应引用类型自动注入,@Autowired或者@Resource
@Resource//自动注入Dao,注入之后对象studentDao的属性就有值了
private StudentDao studentDao;
@Override
public int addStudent(Student student) {
//对象studentDao的属性有值之后就可以调用方法
int nums=studentDao.insertStudent(student);
return nums;
}
@Override
public List<Student> findtStudents() {
return studentDao.selectStudents();
}
}
编写Controller和jsp页面
编写Controller
package com.bipowernode.controller;
import com.bipowernode.domain.Student;
import com.bipowernode.service.StudenService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
@Controller
@RequestMapping("/student")
//因为做的是学生模块,所以可以在类上加@RequestMapping("/student")
public class StudentController {
@Resource//自动注入service
private StudenService service;//声明service
//注册学生
@RequestMapping("/addStudent.do")
public ModelAndView addStudent(Student student){
//这个方法得加参数,那用什么接收请求参数呢,可以逐个接收或者用对象接收
// 暂时用student来作为接收参数使用
ModelAndView mv = new ModelAndView();
//调用service来处理student
int nums=service.addStudent(student);
String tips="注册失败";
if(nums>0)//注册成功
{
tips = "学生 [" +student.getName()+"]注册成功";
}
//添加数据
mv.addObject("tips",tips);
//指定结果页面
mv.setViewName("result");
return mv;
}
}
编写result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
result.jsp结果页面,注册结果:${tips}
</body>
</html>
至此,后端基本写完了,接下来写前端jsp页面
前端index.jsp页面编写
因为自动生成的jsp没有编码规范,我们删掉重新建一个
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>功能入口</title>
</head>
<body>
<div align="center">
<p>SSM整合的例子</p>
<img src="images/ssm.jpg">
<table>
<tr>
<td>注册学生</td>
</tr>
<tr>
<td>浏览学生</td>
</tr>
</table>
</div>
</body>
</html>
运行看看
是不是很崩溃呢,图片显示不了
原来是一个"/"引发的血案,搞了一个多小时呢哎
<img src="images/ssm.jpg"/>
打卡下班,明天再来!!!!
附件
链接:https://pan.baidu.com/s/14Fib_RkqUvVw3_INBD3Myg
提取码:os27