Para esto comenzaremos creando el paquete y la función, usaremos HR para esto(se crea cuando instalamos el Oracle):
create or replace PACKAGE PRUEBAMYBATIS AS FUNCTION obtenerNombres(cEmp_Id_in IN NUMBER) RETURN VARCHAR2; END; / create or replace PACKAGE BODY PRUEBAMYBATIS AS FUNCTION obtenerNombres(cEmp_Id_in IN NUMBER) RETURN VARCHAR2 IS varName VARCHAR2(100); BEGIN SELECT (FIRST_NAME ||' '|| LAST_NAME) INTO varName FROM EMPLOYEES WHERE EMPLOYEE_ID = cEmp_Id_in; RETURN varName; END; END;
Usaremos archivos de configuracion donde guardaremos inf. de la base de datos como el usuario o la clave...
# El nombre del archivo es "variablesDataBase.properties" # Aqui almacenaremos variables de la base de datos # no es seguro guardar aqui pero para hacer algo novedoso :=) vIP = localhost vPort = 1521 vSID = orcl VUsuario = HR vClave = prueba
Comenzaremos creando el archivo de configuracion(xmlMyBatis.xml):
Creamos
una clase donde estarán nuestras anotaciones donde indicaremos el paquete y la función
o procedimiento... Funciona igual... solo que los procedimientos no retornan
valor...
public interface MapperPrueba { @Select(value = "{call #{cNomApe_out, mode=OUT, jdbcType=VARCHAR} := " + "PRUEBAMYBATIS.obtenerNombres(" + "#{cEmp_Id_in}" + ")" + "}") @Options(statementType = StatementType.CALLABLE) void obtenerNombApe(Map parametros); }
Esta clase lee el archivo de conf. y carga sus variables...
public class CargarVariables { private final static Logger log = Logger.getLogger(CargarVariables.class.getName()); public String obtenerIPDB(){ String tmpIP = obtenerVarProper("vIP"); return tmpIP; } public String obtenerPortDB(){ String tmpPort = obtenerVarProper("vPort"); return tmpPort; } public String obtenerSIDDB(){ String tmpSID = obtenerVarProper("vSID"); return tmpSID; } public String obtenerURL(){ String tmpUrl = ""; tmpUrl = "jdbc:oracle:thin:@" + obtenerIPDB() + ":" + obtenerPortDB() + ":" + obtenerSIDDB(); return tmpUrl; } public String obtenerUsuarioDB(){ String tmpUsuario = obtenerVarProper("VUsuario"); return tmpUsuario; } public String obtenerClaveDB(){ String tmpClave = obtenerVarProper("vClave"); return tmpClave; } public String obtenerVarProper(String nombVar){ String tmpVar = ""; try { Properties props = new Properties(); props.load(new FileInputStream("variablesDataBase.properties")); tmpVar = props.getProperty(nombVar); } catch (IOException ex) { log.warning("Error : " + ex.getMessage()); } return tmpVar; } }Creamos una clase que nos retornara el SqlSession para poder llamarlo cuando queramos....
public class conector { private final static Logger log = Logger.getLogger(conector.class.getName()); SqlSessionFactory sqlSession; static CargarVariables cargarVariables = new CargarVariables(); public SqlSessionFactory getSqlSessionMB(){ Reader reader = null; try{ reader = Resources.getResourceAsReader("JAVA/MYBATIS/xmlMyBatis.XML"); }catch(IOException ioEx){ log.warning("No se cargo el archivo de conf. "+ioEx.getMessage()); } Properties propBD = new Properties(); propBD.setProperty("driver", "oracle.jdbc.driver.OracleDriver"); propBD.setProperty("url", cargarVariables.obtenerURL()); propBD.setProperty("username", cargarVariables.obtenerUsuarioDB()); propBD.setProperty("password", cargarVariables.obtenerClaveDB()); sqlSession = new SqlSessionFactoryBuilder().build(reader,propBD); return sqlSession; } }
Y
por último crearemos un main class donde enviaremos nuestro parámetro y
consultaremos datos del empleado.
public void enter(){ SqlSession sqlSession = new conector().getSqlSessionMB().openSession(); MapperPrueba mbMapper = sqlSession.getMapper(MapperPrueba.class); Map parametros = new HashMap(); parametros.put("cEmp_Id_in", "100"); mbMapper.obtenerNombApe(parametros); String tmpNomApe = parametros.get("cNomApe_out").toString(); System.out.println("LOS DATOS SON : "+tmpNomApe) ; }Bueno esto sería mi aporte a la comunidad JAVA... por favor comenta si tienes alguna mejora o recomendación... Claro también si tienes alguna duda...
Estoy adjuntando el proyecto... dentro están las librerías y la guía de MyBatis...
http://www.mediafire.com/?vqbhwhe1firc5t3