1、环境配置
参考上一篇maven环境配置过程:
https://blog.csdn.net/weixin_42189888/article/details/107456448
2、开发流程
在ssm中有一个相对固定的开发模式。这里就实际操作方法做一下一般的解释:
首先要明确项目的骨架,一般都是分为这么几个层次模块:
- dao 用于编写与数据库相关操作的接口
- service 编写业务逻辑服务
- cotroller 根据用户与界面的交互进行对应的反馈操作
- 页面编写
一般的开发流程是明确了项目的功能之后,定好用户操作会引起的一系列业务反馈逻辑。思考逻辑会用到哪些数据,在dao层编写最底层的数据操作。抽象出业务可能会用到哪些服务,编写service方法。明确用户会有哪些操作,我们要给用户怎么样的反馈,以此编写controller方法。下面就以此为基础展示系统中增删改查操作的实现。
2.1 查询和登录
1.明确查询的相关接口,根据用户名返回用户,或者是返回一个所有用户的列表:
User findByUserName(String username);
List<User> findAll();
2.在mapper中编写sql语句
<select id="findByUserName" parameterType="String" resultType="user">
select * from user_tb where username=#{username}
</select>
<select id="findAll" resultType="user">
select * from user_tb
</select>
3.编写service层:
注意,在smm中,不用new而用注入的方式生成变量。
这里提供了与查询相关的登录服务。在调用dao层查询到相关用户之后(或查不到)与用户输入的密码进行对比,完成简单的登录身份认证。
@Autowired
//private UserDao userDao;//不用new,spring中的Ioc
private UserDao userDao;
@Override
public int login(String username, String password) {
User user=userDao.findByUserName(username);
if(user!=null && user.getPassword().equals(password)){
return user.getId();
}
return -1;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
4.编写controller层获取用户的表单,调用登录服务。并根据登录服务的返回结果,返回不同的界面。
注意请求的注解要根据jsp界面来设置。
@RequestMapping("/login.do")
private ModelAndView login(User user){
int id=userService.login(user.getUsername(),user.getPassword());
ModelAndView mv=new ModelAndView();
if(id!=-1){
mv.setViewName("main");
}else{
mv.setViewName("../failer");
}
return mv;
}
@RequestMapping("/findAll.do")
public ModelAndView findAll(){
List<User> users=userService.findAll();
ModelAndView mv=new ModelAndView();
mv.addObject("users",users);
mv.setViewName("user-list");
return mv;
}
2.2 增加用户
1.编写增加用户的dao层接口:
void add(User user);
2.编写insert语句:
<insert id="add" parameterType="user">
insert into user_tb (username,password) values (#{username},#{password})
</insert>
3.编写服务层:
@Override
public void add(User user) {
userDao.add(user);
}
4.编写controller:
这里注意一下增加完用户之后直接重定向到主界面体验更好。
@RequestMapping("/add.do")
public String add(User user){
userService.add(user);
return "redirect:findAll.do";
}
2.3 删除用户
1.编写增加用户的dao层接口:
void deleteById(int id);
2.编写delete语句:
<delete id="deleteById" parameterType="int">
delete from user_tb where id=#{id}
</delete>
3.编写服务层:
@Override
public void deleteById(int id) {
userDao.deleteById(id);
}
4.编写controller:
同样删除用户之后直接重定向到主界面体验更好。
@RequestMapping("/deleteById.do")
public String delete(int id){
userService.deleteById(id);
return "redirect:findAll.do";
}
2.4 更新用户
这里分两步,第一步是获取要更新的用户信息到用户更新表单,第二步是获取更新信息,更新数据库信息,然后重定向到用户列表
1.编写增加用户的dao层接口:
User selectById(int id);
void update(User user);
2.编写update select语句:
<select id="selectById" parameterType="int" resultType="user">
select * from user_tb where id=#{id}
</select>
<update id="update" parameterType="user">
update user_tb set username=#{username},password=#{password} where id=#{id}
</update>
3.编写服务层:
@Override
public User selectUserById(int id) {
return userDao.selectById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
4.编写controller:
这里有两个用户操作,一个是用户点击更新之后去往用户修改表单。一个是用户填完表单之后提交新的用户信息,并重定向。
@RequestMapping("/toUpdate.do")
public ModelAndView toUpdate(int id){
User user=userService.selectUserById(id);
ModelAndView mv=new ModelAndView();
mv.setViewName("user-update");
mv.addObject("user",user);
return mv;
}
@RequestMapping("/update.do")
public String update(User user){
userService.update(user);
return "redirect:findAll.do";
}
3、测试
当前数据库的信息
3.1 运行,登录
进入主界面
3.2 进入用户列表,添加一个新用户:
3.3 删除用户:
3.4 更新用户信息