package com.javaxyq.data.impl;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.javaxyq.data.NonexistentEntityException;
import com.javaxyq.data.PreexistingEntityException;
import com.javaxyq.data.SceneNpc;
import com.javaxyq.data.SceneNpcDAO;
import com.javaxyq.util.DBToolkit;
import com.javaxyq.util.SmartBeanProcessor;
public class SceneNpcDAOImpl implements SceneNpcDAO {
private BeanListHandler<SceneNpc> resultHandler;
public SceneNpcDAOImpl() {
BasicRowProcessor rowProcessor = new BasicRowProcessor(new SmartBeanProcessor());
resultHandler = new BeanListHandler<SceneNpc>(SceneNpc.class, rowProcessor);
}
@Override
public void create(SceneNpc sceneNpc) throws PreexistingEntityException, Exception {
String sql = "insert into SCENE_NPC (" +
"ID, SCENE_ID, CHARACTER_ID, NAME, SCENE_X, SCENE_Y, CONFIG, DESCRIPTION" +
") values(?,?,?,?,?,?,?,?)";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
Object[] params = new Object[] {sceneNpc.getId(), sceneNpc.getSceneId(), sceneNpc.getCharacterId(),
sceneNpc.getName(), sceneNpc.getSceneX(), sceneNpc.getSceneY(), sceneNpc.getConfig(),
sceneNpc.getDescription()};
runner.update(sql, params);
}
@Override
public void destroy(Integer id) throws NonexistentEntityException, SQLException {
String sql = "delete from SCENE_NPC where ID=?";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
runner.update(sql, id);
}
@Override
public void edit(SceneNpc sceneNpc) throws NonexistentEntityException, Exception {
String sql = "update SCENE_NPC set " +
" SCENE_ID=?, CHARACTER_ID=?, NAME=?, SCENE_X=?, SCENE_Y=?, CONFIG=?, DESCRIPTION=?" +
" where ID=?";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
Object[] params = new Object[] {sceneNpc.getSceneId(), sceneNpc.getCharacterId(),
sceneNpc.getName(), sceneNpc.getSceneX(), sceneNpc.getSceneY(), sceneNpc.getConfig(),
sceneNpc.getDescription(), sceneNpc.getId()};
runner.update(sql, params);
}
@Override
public List<SceneNpc> findNpcsBySceneId(int sceneId) throws SQLException {
String sql = "select * from SCENE_NPC where SCENE_ID=? ";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
List<SceneNpc> results = runner.query(sql, resultHandler, sceneId);
return results;
}
@Override
public SceneNpc findSceneNpc(Integer id) throws SQLException{
String sql = "select * from SCENE_NPC where id=? ";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
List<SceneNpc> results = runner.query(sql, resultHandler, id);
if(results.size() == 1) {
return results.get(0);
}else if(results.size() >= 1) {
throw new SQLException("��¼��Ψһ");
}
return null;
}
@Override
public List<SceneNpc> findSceneNpcEntities() throws SQLException {
String sql = "select * from SCENE_NPC ";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
List<SceneNpc> results = runner.query(sql, resultHandler);
return results;
}
@Override
public List<SceneNpc> findSceneNpcEntities(int maxResults, int firstResult) throws SQLException{
if(firstResult < 1) {
firstResult = 1;
}
if(maxResults < 0) {
maxResults = 0;
}
String sql = "select * from SCENE_NPC OFFSET ? ROWS FECTH NEXT ? ROWS";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
List<SceneNpc> results = runner.query(sql, resultHandler);
return results;
}
@Override
public int getNextSceneNpcId() throws SQLException{
String sql = "select max(id) from SCENE_NPC ";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
Object result = runner.query(sql, new ScalarHandler());
int maxId = 0;
if (result != null) {
maxId = ((Number) result).intValue();
}
return maxId+1;
}
@Override
public int getSceneNpcCount() throws SQLException{
String sql = "select count(1) from SCENE_NPC ";
QueryRunner runner = new QueryRunner(DBToolkit.getDataSource());
Object result = runner.query(sql, new ScalarHandler());
int count = 0;
if (result != null) {
count = ((Number) result).intValue();
}
return count;
}
}