依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
1、DAO层
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.example.demo.entity.User;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
List<User> findByStatus(Integer status);
@Modifying
@Query("update User u set u.status = :status where u.id = :userId")
int updateUserStatus(@Param("userId") Long userId, @Param("status") Integer status);
void deleteById(Long userId);
@Query("select u, o from User u left join Order o on u.id = o.userId")
List<Object[]> findUserAndOrderList();
@Query("select u.status, count(*) from User u group by u.status")
List<Object[]> findUserCountByStatus();
@Query("select uv.id, uv.username, uv.status from UserView uv")
List<Object[]> findUserViewList();
@Procedure(name = "update_user_status")
void updateUserStatusByProcedure(Long userId, Integer status);
}
2、服务层
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserByUsername(String username) {
return userRepository.findByUsername(username);
}
public List<User> getUserListByStatus(Integer status) {
return userRepository.findByStatus(status);
}
public int updateUserStatus(Long userId, Integer status) {
return userRepository.updateUserStatus(userId, status);
}
public void deleteUserById(Long userId) {
userRepository.deleteById(userId);
}
public List<Object[]> getUserAndOrderList() {
return userRepository.findUserAndOrderList();
}
public List<Object[]> getUserCountByStatus() {
return userRepository.findUserCountByStatus();
}
public List<Object[]> getUserViewList() {
return userRepository.findUserViewList();
}
public void updateUserStatusByProcedure(Long userId, Integer status) {
userRepository.updateUserStatusByProcedure(userId, status);
}
}
3、SQL脚本
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`status` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE VIEW `user_view` AS
SELECT `id`, `username`, `status` FROM `user`;
CREATE PROCEDURE `update_user_status`(IN `user_id` BIGINT, IN `status` INT)
BEGIN
UPDATE `user` SET `status` = `status` WHERE `id` = `user_id`;
END;
INSERT INTO `user` (`id`, `username`, `password`, `status`) VALUES (1, 'admin', '1