
UsersDao
public interface UsersDao extends BaseDao {
    /**
     * 根据用户Id查询用户
     */
    Users selectUsersById(int userid) throws ApplicationException;
    /**
     * 修改用户信息
     * @param users
     * @return
     */
    int updateUsersById(Users users) ;
    /**
     * 根据用户姓名模糊查询
     */
    List<Users> selectUsersByLikeName(String username);
}
UsersDaoImpl
public class UsersDaoImpl extends BaseDaoImpl implements UsersDao {
    /**
     * 根据用户ID查询用户
     * @param userid
     * @return
     */
    @Override
    public Users selectUsersById(int userid) throws ApplicationException {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null ;
        Users users = null;
        try {
            conn = jdbcUtill.getConnection();
            ps = conn.prepareStatement("select * from users where userid = ?");
            ps.setInt(1,userid);
            rs = ps.executeQuery();
            while (rs.next()){
                //手动orm映射
                users  = new Users();
                users.setUserid(rs.getInt("userid"));
                users.setUsername(rs.getString("username"));
                users.setUserage(rs.getInt("userage"));
            }
        }catch (Exception e){
            e.printStackTrace();
            throw new ApplicationException(e.getMessage());
        }finally {
            jdbcUtill.closeConnection(rs,ps,conn);
        }
        return users;
    }
    /**
     * 修改用户信息
     * @param
     * @return
     */
    @Override
    public int updateUsersById(Users users) {
        String sql = "update users set userage = ? where userid = ?";
        Object[] param = new Object[]{users.getUserage(),users.getUserid()};
        return this.executeUpdate(sql,param);
    }
    @Override
    public List<Users> selectUsersByLikeName(String username) {
        String sql = "select * from users where username like ?";
        Object[] param =new Object[]{"%"+username+"%"};
        return this.select(sql,param,Users.class);
    }
}
BaseDao
public interface BaseDao {
    /**
     * 通用的Dml操作方法
     */
    int executeUpdate(String sql,Object[] param) ;
    /**
     * 通用查询方法
     *
     */
   <T> List<T> select(String sql,Object[] param,Class<T> clazz);
}
BaseDaoImpl
public class BaseDaoImpl implements BaseDao {
    /**
     * 通用的Dml的操作
     */
    @Override
    public int executeUpdate(String sql, Object[] param) {
        Connection connection = null;
        PreparedStatement ps = null;
        int row = 0;
        try {
            connection = jdbcUtill.getConnection();
            ps = connection.prepareStatement(sql);
            //得到参数的个数
            ParameterMetaData pd = ps.getParameterMetaData();
            for (int i = 0;i<pd.getParameterCount();i++){
                ps.setObject(i+1,param[i]);
            }
            row = ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
            
        }finally {
            jdbcUtill.closeResource((Statement) ps,connection);
        }
        return row;
    }
    /**
     * 通用查询方法
     * @param sql
     * @param param
     * @param
     * @param <T>
     * @return
     */
    @Override
    public <T> List<T> select(String sql, Object[] param, Class<T> clazz) {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs  = null;
        List<T> list = null;
        try {
            connection = jdbcUtill.getConnection();
            ps = connection.prepareStatement(sql);
            //得到参数的个数
            ParameterMetaData pd = ps.getParameterMetaData();
            for (int i = 0;i<pd.getParameterCount();i++){
                ps.setObject(i+1,param[i]);
            }
            rs = ps.executeQuery();
            //获取结果集对象
            ResultSetMetaData rm = rs.getMetaData();
            while(rs.next()){
                //orm映射
                //通过反射实例化对象实体类对象
                T bean = clazz.getDeclaredConstructor().newInstance();
                //实体类的属性名必须要和表的列名相同
                for (int i = 0;i<rm.getColumnCount();i++){
                    //得到列名
                    String columnName = rm.getColumnName(i+1);
                    //获取列的值
                    Object value = rs.getObject(columnName);
                    //通过BeanUtill工具类讲解映射到对象中
                    BeanUtils.setProperty(bean,columnName,value);
                }
                list.add(bean);
            }
        }catch (Exception e){
            e.printStackTrace();
            throw new ApplicationException(e.getMessage());
        }finally {
            jdbcUtill.closeResource(rs, ps,connection);
        }
        return list;
    }
}
UsersService
public interface UsersService {
    Users findUsersById(int userid) throws ApplicationException;
    int modifyUsersById(Users users) ;
    List<Users> findUsersByLikeName(String username);
}
UsersServiceImpl
public  class UsersServiceimpl implements UsersService {
    @Override
    public Users findUsersById(int userid) throws ApplicationException {
        UsersDao ud  = new UsersDaoImpl();
        return ud.selectUsersById(userid);
    }
    @Override
    public int modifyUsersById(Users users) {
        UsersDao ud = new UsersDaoImpl();
        return ud.updateUsersById(users);
    }
    @Override
    public List<Users> findUsersByLikeName(String username) {
        UsersDao ud = new UsersDaoImpl();
        return ud.selectUsersByLikeName(username);
    }
}
Test3
public class Test3 {
    public static void main(String[] args) {
        UsersService us = new UsersServiceimpl();
        List<Users> list = us.findUsersByLikeName("a");
        for (Users users:list){
            System.out.println(users);
        }
    }
}
运行结果
java.lang.NullPointerException
	at cn.itbaizhan.dao.impl.BaseDaoImpl.select(BaseDaoImpl.java:88)
	at cn.itbaizhan.dao.impl.UsersDaoImpl.selectUsersByLikeName(UsersDaoImpl.java:71)
	at cn.itbaizhan.service.impl.UsersServiceimpl.findUsersByLikeName(UsersServiceimpl.java:29)
	at cn.itbaizhan.web.Test3.main(Test3.java:12)
Exception in thread "main" cn.itbaizhan.exception.ApplicationException
	at cn.itbaizhan.dao.impl.BaseDaoImpl.select(BaseDaoImpl.java:93)
	at cn.itbaizhan.dao.impl.UsersDaoImpl.selectUsersByLikeName(UsersDaoImpl.java:71)
	at cn.itbaizhan.service.impl.UsersServiceimpl.findUsersByLikeName(UsersServiceimpl.java:29)
	at cn.itbaizhan.web.Test3.main(Test3.java:12)
不知道哪错了,老师看一下