Bom dia galera, primeiramente desculpa, por esse tópico parecer repetitivo, mas achei tanta informação em diversos tópicos que acabei me perdendo.
Gostaria da ajuda de vocês para em dizer quais são os erros ou má-praticas que possuo nos seguintes códigos e me ajudassem com uma alternativa para criar uma nova solução utilizando JPA com Hibernate, eu conheço o básico dos 2.
Os códigos são de um Connection e um DAO, meu sistema é utilizado por umas 20 pessoas em média, li mto a respeito sobre o pool de conexão do hibernate com o C3P0, mas não entendi quais são as vagentes de utilizalo.
public class Connection {
static BasicDataSource ds = null;
private static int connPool = 0;
private static void carregaBase(){
String database = "teste";
String server = "localhost";
String username = "root";
String password = "";
String url = "jdbc:mysql://" + server + "/" + database + "?user=" + username + "&password=" + password;
String driver = "com.mysql.jdbc.Driver";
int totConnections = 20;
ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUsername(username);
ds.setPassword(password);
ds.setUrl(url);
ds.setMaxActive(totConnections);
}
public static Connection getConnection() throws SQLException{
connPool++;
if (ds == null){ carregaBase(); }
return ds.getConnection();
}
public static void freeConnection(Connection conn){
connPool--;
if (conn != null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
conn = null;
}
}
}
Sobre o DAO, sei perfeitamente q falho, pq praticamente utilizo um DAO para cara entidade do sistema, vi que normalmente é feito um DAO genérico, mas não entendi, porque criar uma Infernate, depois outra classe abstrata, para então se criar um DAO para um Entidade que utiliza os outras 2 classes.
Tenho um exemplo de um DAO onde utilizando apenas o Hibernate, que utiliza Session do Hibernate instanciada atraves da classe HibernateUtils, mas qndo estou usando JPA junto com o Hibernate, tem como eu utilizar a Sessao?
public class UsuarioDAO {
public int insere(Usuario usuario) throws SQLException {
int idUsuario = 0;
Connection cn = null;
PreparedStatement stmt = null;
try{
cn = Connection.getConnection();
String sql = "insert into usuario(idUsuario, nome, email, senha) values (?, ?, ?, ?)";
stmt = cn.prepareStatement(sql);
// setando os valores
stmt.setInt(1, usuario.getId());
stmt.setString(2, usuario.getNome());
stmt.setString(3, usuario.getEmail());
stmt.setString(4, usuario.getSenha());
// executa
stmt.execute();
idUsuario = getLastId(cn);
} finally {
stmt.close();
Conn.freeConnection(cn);
}
return idUsuario;
}
}
Obrigado.