import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
SpringMvcConfig
java复制代码
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan("com.cc.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
功能模块
首先依据准备的表结构创建对应的POJO类:
java复制代码
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
接下来就是关于数据库操作的Dao:
java复制代码
public interface UserDao {
@Insert("insert into user(name,age) values(#{name},#{age})")
public void save(User user);
@Update("update user set name=#{name} where id = #{id}")
public void update(User user);
@Delete("delete from user where id =#{id}")
public void delete(Integer id);
@Select("select * from user where id =#{id}")
public User getById(Integer id);
@Select("select * from user")
public List<User> getAll();
}
以及Dao对应的Service接口和实现类
java复制代码
public interface UserService {
/**
* 保存
* @param user
* @return
*/
public boolean save(User user);
/**
* 修改
* @param user
* @return
*/
public boolean update(User user);
/**\
* 根据id删除
* @param id
* @return
*/
public boolean delete(Integer id);
/**
* 根据id查询
* @param id
* @return
*/
public User getById(Integer id);
/**
* 查询所有
* @return
*/
public List<User> getAll();
}
java复制代码
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public boolean save(User user) {
userDao.save(user);
return true;
}
@Override
public boolean update(User user) {
userDao.update(user);
return true;
}
@Override
public boolean delete(Integer id) {
userDao.delete(id);
return true;
}
@Override
public User getById(Integer id) {
return userDao.getById(id);
}
@Override
public List<User> getAll() {
return userDao.getAll();
}
}
剩下就是REST风格的Controller控制类:
java复制代码
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public boolean save(@RequestBody User user) {
return userService.save(user);
}
@PutMapping
public boolean update(@RequestBody User user) {
return userService.update(user);
}
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Integer id) {
return userService.delete(id);
}
@GetMapping("/{id}")
public User getById(@PathVariable Integer id) {
return userService.getById(id);
}
@GetMapping
public List<User> getAll() {
return userService.getAll();
}
}
测试
在开发中通常要进行两种测试,分别是业务接口测试,第二个是表现层的接口测试。
业务层接口测试
在test目录下新建测试包:
java复制代码
@RunWith(SpringJUnit4ClassRunner.class) //使用Spring的测试运行器来运行测试。
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testGetById(){
User user = userService.getById(2);
System.out.println(user);
}
@Test
public void testGetAll(){
List<User> user = userService.getAll();
System.out.println(user);
}
}