Here are a couple of comments, by no means trying to be complete:
I think you made a good start with your EmployeeEmployee class. If this is going to be grown beyond this one table, then you may want to inherit from a "Table"Table class, which at least has the constructor and probably the $db$db in it
Recommend you combine fetchByfetchBy and fetchEmployeefetchEmployee into 1 function for the following reasons:
- $employee->fetchEmployee
$employee->fetchEmployeeunnecessary duplication of what you are fetching - unnecessary employee attribute can be eliminated
Why is $type$type defaulted to usernameusername. It seems not obvious to me. Some frameworks use id as a default, I think that is a better option
The switch statement can be simplified, see how you repeat the code for each parameter type? You only need one block of code for PDO::PARAM_STRPDO::PARAM_STR, PARAM_INTPARAM_INT etc
Recommend you always use fetchAllfetchAll() and create another indirection through a new function called fetchOneBy()fetchOneBy().
Using * in queries has no direct downside at this level of complexity, however once you start using joins, it will get you into trouble.
However you'll quickly find that listing the columns will be tedious. The natural tendency is to then build a data dictionary, for example by using private variables (see Joomla) or having a getFields()getFields() function in each class. Don;tDon't go to far down this rabbit hole, as this problem has been solved many times over: https://packagist.org/packages/doctrine/orm
Hope this helps.