一、前端表单
<form action="/user/add" id="registerForm" method="post">
<div class="form-group">
<label for="exampleInputEmail1">User Name</label>
<input type="text" class="form-control" id="exampleInputEmail1" placeholder="User Name" name="userName">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password" name="password">
</div>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="../js/jquery.validate.js"></script>
<script>
$("#registerForm").validate({
debug:false,
rules:{
userName:{
required:true,
remote:{
url: "/user/find/",
type: "POST"
}
},
password:{
required:true
}
},
messages:{
userName:{
required:"pl fill user name",
remote:"this user name has been used"
},
password:{
required:"pl fill password"
}
}
});
$("#saveUser").click(function(){
$("#registerForm").submit();
});
</script>
二、控制层
@Controller
public class UserController {
@Autowired
UserService userService;
/**
* @Description //添加用户
* @Param [user]
* @Author oneTi
* @Date 9:15 2018/8/8
* @Return java.lang.String
**/
@RequestMapping("/user/add")
public String addUser(UserInfo user)
{
userService.addUser(user);
return "redirect:/welcome"; //redirect :重定向,否者跳转的地址将成为127.0.0.1:8080/user/add
}
/**
* @Description //按姓名删除用户
* @Param [name]
* @Author oneTi
* @Date 9:16 2018/8/8
* @Return java.lang.String
**/
@RequestMapping("/user/delete/{name}")
public String deleteUser(@PathVariable("name") String name)
{
userService.deleteUserByName(name);
return "welcome";
}
/**
* @Description //按姓名查找用户
* @Param [name]
* @Author oneTi
* @Date 9:17 2018/8/8
* @Return java.lang.Boolean
**/
@RequestMapping("/user/find/")
@ResponseBody
public Boolean isExistUser(String userName)
{
if(userService.findUserInfoByUserName(userName) != null)
{
return false;
}
return true;
}
三、服务层(接口和实现类)
public interface UserService {
/**
* @Description 增加人员
* @Param
* @Author oneTi
* @Date 15:45 2018/8/6
* @Return
**/
UserInfo addUser(UserInfo user);
/**
* @Description //更新人员
* @Param
* @Author oneTi
* @Date 15:49 2018/8/6
* @Return
**/
UserInfo updateUser(UserInfo user);
/**
* @Description //根据名称删除用户
* @Param
* @Author oneTi
* @Date 15:05 2018/8/7
* @Return
**/
void deleteUserByName(String userName);
/**
* @Description //根据姓名查找用户
* @Param
* @Author oneTi
* @Date 17:29 2018/8/7
* @Return
**/
UserInfo findUserInfoByUserName(String userName);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserRepository userRepository;
public UserInfo addUser(UserInfo user){
return userRepository.save(user);
}
public UserInfo updateUser(UserInfo user){
return userRepository.save(user);
}
public void deleteUserByName(String userName){
if(userName != null)
{
userRepository.deleteByUserName(userName);
}
}
public UserInfo findUserInfoByUserName(String userName){
if(userName != null)
{
return userRepository.getUserInfoByUserName(userName);
}
return null;
}
}
四、持久化层
/**
* @Description //
* JPA 提供了许多接口,非常方便;不用自己再去写底层封装了~
* 按照命名规则来定义方法,即可以操作数据库了,如查询:findBy + 实体属性名, get + 实体类名 + By + 实体属性名,...
* 还可以使用@Query注解,直接语句查询..
* 只提这两点~
**/
public interface UserRepository extends JpaRepository<UserInfo, Long> {
/**
* @Description //按名称查找所有用户
* @Param
* @Author oneTi
* @Date 15:35 2018/8/6
* @Return
**/
List<UserInfo> findByUserName(String userName);
/**
* @Description //按姓名查找单个用户
* @Param
* @Author oneTi
* @Date 14:22 2018/8/7
* @Return
**/
UserInfo getUserInfoByUserName(String userName);
/**
* @Description //按姓名查找单个用户 使用Query注解方式
* @Param
* @Author oneTi
* @Date 14:47 2018/8/7
* @Return
**/
// @Query("select u from UserInfo u where u.userName = ?1")
// UserInfo findUserInfoByName(String userName);
/**
* @Description //按姓名查找单个用户 使用原生查询方式
* @Param
* @Author oneTi
* @Date 14:54 2018/8/7
* @Return
**/
// @Query(value = "SELECT * FROM USER_INFO WHERE USER_NAME = ?1", nativeQuery = true)
// UserInfo findUserInfoByName(String userName);
/**
* @Description //根据名称删除用户
* @Param
* @Author oneTi
* @Date 15:00 2018/8/7
* @Return
**/
@Transactional
void deleteByUserName(String userName);
五、演示图
表单验证即查询~
空表
新增
查询(上面表单中userName验证)
删除(访问http://127.0.0.1:8033/user/delete/1)
六、注意事项
1、异步查询的时候,使用@ResponseBody注解将返回值写入到Http response body中,不然前端获取不到返回值。
2、删除的时候,删除方法要使用@Transactional返将该方法注入到事务中。
附上springboot jpa 官方在线文档:spingboot jpa 官方文档