经过前面的介绍,我们可以实现简单RESTful服务了,并使用map集合模拟了,学生信息的增删改查。但是实际开发中我们更多的是与数据库打交道,使用数据库来处理数据,因此在下面的章节中我们将会介绍Jersey框架与数据库进行交互的操作。
本章节我们介绍Jersey与JdbcTemplate的结合使用。
在spring与Jersey整合的基础上需要加上spring Jdbc的支持,以及mysql的数据库驱动
org.springframework
spring-jdbc
4.2.1.RELEASE
mysql
mysql-connector-java
6.0.3
create database testlx;
CREATE TABLE `user` (
`id` varchar(32) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public class User {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String 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;
}
}
配置文件中需要配置数据源 JdbcTemplate bean等
application.xml文件
spring-base.xml文件
spring-datasource.xml文件
UserService接口
public interface UserService {
public void insert(User user);
public void update(User user);
public void delete(String id);
public User selectById(String id);
public List selectAll();
}
UserServiceImpl实现
我们使用Spring自动生成bean的方式生成该对象,所以需要加上@Service注解,同时需要注入JdbcTemplate
@Service
public class UserServiceImpl implements UserService{
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 插入用户
* @param user
*/
public void insert(User user) {
try {
String sql = "insert into user(id,name,age) values(?,?,?)";
Object[] params = new Object[]{user.getId(),user.getName(),user.getAge()};
jdbcTemplate.update(sql,params);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 更新用户
* @param user
*/
public void update(User user) {
try {
String sql = "update user set name = ?,age = ? where id = ?";
Object[] params = new Object[]{
user.getName(),user.getAge(),user.getId()
};
jdbcTemplate.update(sql,params);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 根据id删除用户
* @param id
*/
public void delete(String id) {
try {
String sql = "delete from user where id =?";
Object[] params = new Object[]{id};
jdbcTemplate.update(sql,params);
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 通过id 查询用户
* @param id
* @return
*/
public User selectById(String id) {
try {
String sql = "select * from user where id =?" ;
final User user = new User();
final Object[] params = new Object[]{id};
jdbcTemplate.query(sql, params, new RowCallbackHandler() {
public void processRow(ResultSet resultSet) throws SQLException {
user.setId(resultSet.getString("id"));
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
}
});
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 查询所有用户
* @return
*/
public List selectAll() {
try {
String sql = "select * from user " ;
List lists;
lists = jdbcTemplate.query(sql, new RowMapper() {
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getString("id"));
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
return user;
}
});
return lists;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
需要注意的是,之前的介绍中Resource类不需要继承和实现,不需要使用注解,但是在本项目中,我们需要在Resource中注入UserService,因此也需要将Resource的创建交给Spring进行管理。
@Component//resource转换为spring组件
@Path("/user")
public class UserResource {
@Resource
private UserService userService;
@Path("/add")
@POST
public Response add(@FormParam("id") String id,
@FormParam("name") String name,
@FormParam("age") int age){
User user = new User();
user.setAge(age);
user.setName(name);
user.setId(id);
userService.insert(user);
return JerseyTool.returnSuccess(new ResponseDto("OK","添加用户成功").toString());
}
/**
*
* 查询所有用户信息
* @return
*/
@GET
@Path("/getAll")
public Response getAll(){
List users = userService.selectAll();
return JerseyTool.returnSuccess(JSON.toJSONString(users));
}
/**
* 根据用户id查询用户
* @param id
* @return
*/
@GET
@Path("/getById")
public Response getById(@QueryParam("id") String id){
User user = userService.selectById(id);
return JerseyTool.returnSuccess(JSON.toJSONString(user));
}
/**
* 更新用户信息
* @param id
* @param name
* @param age
* @return
*/
@PUT
@Path("update")
public Response update(@FormParam("id") String id,
@FormParam("name") String name,
@FormParam("age") int age){
User user = new User();
user.setAge(age);
user.setName(name);
user.setId(id);
userService.update(user);
return JerseyTool.returnSuccess(new ResponseDto("OK","添加用户成功").toString());
}
/**
* 根据id删除用户
* @param id
* @return
*/
@DELETE
@Path("/delete")
public Response deleteById(@QueryParam("id") String id){
userService.delete(id);
return JerseyTool.returnSuccess(new ResponseDto("OK","删除用户成功").toString());
}
}
为了更方便的响应json结果,我提供了ResponseDto。
public class ResponseDto {
private String code;
private String msg;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public ResponseDto(String code, String msg) {
this.code = code;
this.msg = msg;
}
@Override
public String toString() {
JSONObject json = new JSONObject();
json.put("code",getCode());
json.put("msg",getMsg());
return json.toString();
}
}
通过Main方法启动程序.
为了更方便的测试,我们使用谷歌浏览器Postman插件进行测试。
1、添加用户
2、查询所有用户
3、根据id查询用户
4、删除用户
Jersey系列相关源码请访问: Jersey_learing项目