From: Gustavo Martin Morcuende Date: Tue, 27 Aug 2013 19:40:55 +0000 (+0200) Subject: MyBatis: cleaning code, improving logger. X-Git-Url: https://git.gumartinm.name/?a=commitdiff_plain;h=46ff10a9ca87f03c94781beaf56c8d07f00771d8;p=JavaForFun MyBatis: cleaning code, improving logger. --- diff --git a/MyBatis/pom.xml b/MyBatis/pom.xml index 0c7e15e..f34609b 100644 --- a/MyBatis/pom.xml +++ b/MyBatis/pom.xml @@ -36,7 +36,7 @@ 1.3.2 - Gnerate MyBatis Artifacts + Generate MyBatis Artifacts generate diff --git a/MyBatis/src/main/java/de/example/mybatis/TestMain.java b/MyBatis/src/main/java/de/example/mybatis/TestMain.java index 9e14d0c..c383502 100644 --- a/MyBatis/src/main/java/de/example/mybatis/TestMain.java +++ b/MyBatis/src/main/java/de/example/mybatis/TestMain.java @@ -2,101 +2,70 @@ package de.example.mybatis; import java.io.IOException; import java.util.Date; +import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.apache.log4j.Logger; import de.example.mybatis.model.Ad; import de.example.mybatis.repository.mapper.AdMapper; public class TestMain { + static Logger logger = Logger.getLogger(TestMain.class); public static void main(final String[] args) throws IOException { - //Initialize dao - //UserDao manager = new UserDaoIbatis(); - // File file = new File("sql-maps-config.xml"); - // FileInputStream fileInputStream = new FileInputStream(file); - // AL FINAL NO NECESITABA TODO ESTO DE FILECHANNEL Y BYTEBUFFERS xD se me fue la pinza :( - // al menos mira lo del FileChannel.size() porque es interesante recordarlo - // y saber que si el archivo puede cambiar el metodo FileChannel.size() no te vale :( - // y tendrias que usar algo como lo que hiciste en AxisC3 driver :) - // FileChannel fileChannel = fileInputStream.getChannel(); - - // FileChannel.size() internamente usa fstat64 recuperando st_size - // asi puede saber el tamaño del archivo antes de leerlo. Esto puede - // ser un problema si el archivo puede cambiar por alguna razon desconocida - // mientras lo estoy leyendo. - // ver: FileChannelImpl.c (la implementacion nativa de FileChannel) - // otra solucion es lo que hice para AxisC3, un array de byes mutable - // que se incrementa tanto como haga falta hasta que haya leido todos los bytes - // Por tanto si a priori no puedo saber el tamaño del archivo a leer deberia - // usar un array de bytes mutables cuyo tamaño puede incrementarse si hace falta - // como hice con el AxisC3 :) - - //fileInputStream.read(new byte[(int)fileChannel.size()]); <----- puedo leer tambien asi pero me apetece usar byte buffers - // de java.nio :) - - - //joer.size devuelve long!!!! hago casta int pierdo datos :( ¿solucion? - // ByteBuffer gus = ByteBuffer.allocate((int)fileChannel.size()); - // int result = 0; - // while (result != -1) { - // result = fileChannel.read(gus); - // } - // TestMain.class.getResourceAsStream("sql-maps-config.xml"); - // Reader reader = Resources.getResourceAsReader("sql-maps-config.xml"); - - // Desde el Javadoc de org.xml.sax.InputSource: - //

The SAX parser will use the InputSource object to determine how - // to read XML input. If there is a character stream available, the - // parser will read that stream directly, disregarding any text - // encoding declaration found in that stream. - // If there is no character stream, but there is - // a byte stream, the parser will use that byte stream, using the - // encoding specified in the InputSource or else (if no encoding is - // specified) autodetecting the character encoding using an algorithm - // such as the one in the XML specification. If neither a character - // stream nor a - // byte stream is available, the parser will attempt to open a URI - // connection to the resource identified by the system - // identifier.

- - // LUEGO SI LE PASO UN FileInputStream/InputStream (no es un character stream) y no especifico el encoding - // se deberia autodetectar el encoding usando la especificacion XML (leyendo - // la cabecera del archivo xml) GUAY!!!! JUSTO LO QUE ME GUSTA :) - // SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(fileInputStream); - - // JOER NO HACIA FALTA TANTO LIO PARA CONSEGUIR UN INPUTSTREAM. DE HECHO LA MEJOR - // FORMA ES HACERLO ASI SIEMPRE (con el getResourceAsStream) ASÍ NO DEPENDES - // DE PATHS ABSOLUTIOS NI NADA, TE SIRVE PARA .jars, O DIRECTORIOS FISICOS, LO QUE SEA QUE ESTE - // EN EL CLASSPATH: + // From org.xml.sax.InputSource Javadoc: + // The SAX parser will use the InputSource object to determine how to + // read XML input. If there is a character stream available, the parser + // will read that stream directly, disregarding any text encoding + // declaration found in that stream. If there is no character stream, + // but there is a byte stream, the parser will use that byte stream, + // using the encoding specified in the InputSource or else (if no + // encoding is specified) autodetecting the character encoding using an + // algorithm such as the one in the XML specification. If neither a + // character stream nor a byte stream is available, the parser will + // attempt to open a URI connection to the resource identified by the + // system identifier. + + // Then if we use an InputStream (it is not a character stream) and + // we do not specify the encoding, the encoding should be autodetected + // reading the XML header. :) That is what I want. :) final SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(/**TestMain.class.getResourceAsStream("sql-maps-config.xml")**/ Resources.getResourceAsStream("mybatis-sql-maps-config.xml"), "mybatisexample"); + final SqlSession session = sqlSessionFactory.openSession(); - // EN MYBATIS HAY UNA FORMA MEJOR QUE ESTA - // try { - // Ad ad = session.selectOne("de.example.mybatis.model.Ad.selectByPrimaryKey", 101); - // } finally { - // session.close(); - // } - // ESTA FORMA ES MUCHO MEJOR :) try { - final AdMapper mapper = session.getMapper(AdMapper.class); - final Ad adprueba = new Ad(); - adprueba.setAdMobileImage("lol"); - adprueba.setCompanyCategId(200L); - adprueba.setCreatedAt(new Date()); - adprueba.setCompanyId(2L); - adprueba.setUpdatedAt(new Date()); - mapper.insert(adprueba); + final AdMapper adMapper = session.getMapper(AdMapper.class); + final Ad adTest = new Ad(); + adTest.setAdMobileImage("lol"); + adTest.setCompanyCategId(200L); + adTest.setCreatedAt(new Date()); + adTest.setCompanyId(2L); + adTest.setUpdatedAt(new Date()); + adMapper.insert(adTest); session.commit(); - // Ad ad = mapper.selectByPrimaryKey(1000L); + + final List adLists = adMapper.selectByExample(null); + for (final Ad ad : adLists) { + logger.info("Ad id: " + ad.getId()); + if (ad.getAdGps() != null) { + logger.info("Ad GPS: " + new String(ad.getAdGps(), "UTF-8")); + } + logger.info("Ad mobileImage: " + ad.getAdMobileImage()); + logger.info("Ad mobileImage: " + ad.getCompanyCategId()); + logger.info("Ad id: " + ad.getCompanyId()); + logger.info("Ad id: " + ad.getCreatedAt()); + logger.info("Ad id: " + ad.getUpdatedAt()); + logger.info("\n"); + } + } finally { session.close(); } diff --git a/MyBatis/src/main/resources/generator/generatorConfig.xml b/MyBatis/src/main/resources/generator/generatorConfig.xml index 946fd15..9f1442a 100644 --- a/MyBatis/src/main/resources/generator/generatorConfig.xml +++ b/MyBatis/src/main/resources/generator/generatorConfig.xml @@ -17,7 +17,7 @@ + connectionURL="jdbc:mysql://localhost:3306/mybatis_example?characterEncoding=UTF-8" userId="root" password="root">