package com.qianfeng.dao;
import com.qianfeng.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface IUserDao {
List getAllUsers();
int deleteUser(@Param("uid") int uid);
User getUserById(@Param("uid") int uid);
int updateUser(User user);
int saveUser(User user);
}
我们使用了MyBatis配置的第二种方式:即使用接口+xml文件方式
9. IUserService与UserServiceImpl
package com.qianfeng.service;
import com.qianfeng.pojo.User;
import java.util.List;
public interface IUserService {
List getAllUsers();
boolean deleteUser(int uid);
User getUserById(int uid);
boolean updateUser(User user);
boolean saveUser(User user);
}
package com.qianfeng.service.impl;
import com.qianfeng.dao.IUserDao;
import com.qianfeng.pojo.User;
import com.qianfeng.service.IUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao;
@Override
public List getAllUsers() {
return userDao.getAllUsers();
}
@Override
public boolean deleteUser(int uid) {
return userDao.deleteUser(uid)>0;
}
@Override
public User getUserById(int uid) {
return userDao.getUserById(uid);
}
@Override
public boolean updateUser(User user) {
return userDao.updateUser(user)>0;
}
@Override
public boolean saveUser(User user) {
return userDao.saveUser(user)>0;
}
}
使用service注解来配合组件扫描,使用Resouce注解不用使用new关键字来创建对象。
10. UserController.java
package com.qianfeng.controller;
import com.qianfeng.pojo.User;
import com.qianfeng.service.IUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.List;
@Controller
public class UserController {
@Resource
private IUserService userService;
@GetMapping("/users")
public ModelAndView getAllUsers(){
return new ModelAndView("/users","users",userService.getAllUsers());
}
@GetMapping("/deleteUser/{uid}")
public String deleteUser(@PathVariable int uid){
boolean flag = userService.deleteUser(uid);
return "redirect:/users";
}
@GetMapping("/updateUser/{uid}")
public ModelAndView updateUserPage(@PathVariable int uid){
return new ModelAndView("/update","user",userService.getUserById(uid));
}
@PostMapping("/updateUser")
public String updateUser(User user){
boolean flag = userService.updateUser(user);
return "redirect:/users";
}
@PostMapping("/saveUser")
public String saveUser(User user){
boolean flag = userService.saveUser(user);
return "redirect:/users";
}
}
JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。
登录需要验证类
public class Login {
@NotEmpty
引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器
ServletContextListener
特点: 依赖于sevlet容器,需要配置web.xml
使用方法:
public class StartListener implements
The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(), Math.floor(), and Math.round() — handle rounding in differen