有关控制器和dao功能的问题

时间:2011-08-31 10:05:05

标签: spring controller

我做了一些小项目 只有添加,删除,showlist功能 添加和删​​除功能很好的工作,但获取列表功能是行不通的。 (在我的项目memoservice.getAll()函数中运行不正常) 所以我试着获得这样的列表,

List <Memo> mem = getAll();

但没有返回值; 我的项目有什么问题。帮我PLZ!

有些代码在这里。

MemoController.java

package springbook.sug.web;

import javax.inject.Inject;
import javax.inject.Provider;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.support.SessionStatus;

import springbook.sug.domain.Memo;
import springbook.sug.service.MemoService;
import springbook.sug.web.security.LoginInfo;

@Controller
@RequestMapping("/memo")
public class MemoController {
    @Autowired
    private MemoService memoService;

    private @Inject Provider<LoginInfo> loginInfoProvider;

    @RequestMapping("/list")
    public String list(ModelMap model) {
        model.addAttribute(this.memoService.getAll());
        return "memo/list";
    }

    @RequestMapping("/list/{userId}")
    public String list(@PathVariable int userId, ModelMap model) {
        model.addAttribute(this.memoService.get(userId));
        return "memo/list";
    }

    @RequestMapping("/delete/{memoId}")
    public String delete(@PathVariable int memoId) {
        this.memoService.delete(memoId);
        return "memo/deleted";
    }

    @RequestMapping("/add/")
    public String showform(ModelMap model) {
        Memo memo = new Memo();
        model.addAttribute(memo);
        return "memo/add";
    }

    @RequestMapping(method=RequestMethod.POST)
    public String add(@ModelAttribute @Valid Memo memo, BindingResult result, SessionStatus status) {
        if (result.hasErrors()) {
            return "list";
        }
        else {
            this.memoService.add(memo);             
            status.setComplete();
            return "redirect:list";
        }
    }
}

MemoService.java

package springbook.sug.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import springbook.sug.dao.MemoDao;
import springbook.sug.domain.Memo;

@Service
@Transactional
public class MemoServiceImpl implements MemoService{
    private MemoDao memoDao;

    @Autowired
    public void setMemoDao(MemoDao memoDao) {
        this.memoDao = memoDao;
    }

    public Memo add(Memo memo) {
        memo.initDates();
        return this.memoDao.add(memo);
    }

    public void delete(int memoId) {
        this.memoDao.delete(memoId);
    }

    public Memo get(int userId) {
        return this.memoDao.get(userId);
    }

    public Memo update(Memo memo) {
        return this.memoDao.update(memo);
    }

    public List<Memo> getAll() {
        return this.memoDao.getAll();
    }
}

MemoDao.java

package springbook.sug.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

import springbook.sug.domain.Memo;

@Repository
public class MemoDaoJdbc implements MemoDao {
    private SimpleJdbcTemplate jdbcTemplate;
    private SimpleJdbcInsert memoInsert;

    private RowMapper<Memo> rowMapper = 
            new RowMapper<Memo>() {
                public Memo mapRow(ResultSet rs, int rowNum) throws SQLException {
                Memo memo = new Memo();
                memo.setMemoId(rs.getInt("memoId"));
                memo.setMemoContents(rs.getString("memoContents"));
                memo.setMemoRegister(rs.getString("memoRegister"));
                memo.setCreated(rs.getDate("created"));

                return memo;
        }
    };

    @Autowired
    public void init(DataSource dataSource) {
        this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
        this.memoInsert = new SimpleJdbcInsert(dataSource)
                        .withTableName("memos")
                        .usingGeneratedKeyColumns("memoId");
    }

    public Memo add(Memo memo) {
        int generatedId = this.memoInsert.executeAndReturnKey(
                new BeanPropertySqlParameterSource(memo)).intValue();
        memo.setMemoId(generatedId);
        return memo;
    }

    public Memo update(Memo memo) {
        int affected = jdbcTemplate.update(
                "update memos set " +
                "memoContents = :memoContents, " +
                "memoRegister = :memoRegister, " +
                "created = :created, " + 
                "where memoId = :memoId",
                new BeanPropertySqlParameterSource(memo));
        return memo;
    }

    public void delete(int memoId) {
        this.jdbcTemplate.update("delete from memos where memoId = ?", memoId);
    }

    public int deleteAll() {
        return this.jdbcTemplate.update("delete from memos");
    }

    public Memo get(int memoId) {
        try {
        return this.jdbcTemplate.queryForObject("select * from memos where memoId = ?", 
                this.rowMapper, memoId);
        }
        catch(EmptyResultDataAccessException e) {
            return null;
        }
    }

    public List<Memo> search(String memoRegister) {
        return this.jdbcTemplate.query("select * from memos where memoRegister = ?", 
                this.rowMapper, "%" + memoRegister + "%");
    }

    public List<Memo> getAll() {
        return this.jdbcTemplate.query("select * from memos order by memoId desc", 
                this.rowMapper);
    }

    public long count() {
        return this.jdbcTemplate.queryForLong("select count(0) from memos");
    }
}

1 个答案:

答案 0 :(得分:0)

运行代码时是否收到异常?如果是这样,则需要堆栈跟踪。如果没有,您的表中是否有数据要返回?你是如何将数据源注入你的dao实现的?您的应用程序上下文可能有所帮助。