Programación en la operación de interfaz
En términos generales, cuando construimos clases que asignan interfaces SQL, generalmente se ve así:
public static void testBasicQuery (int id) {sqlsession session = mybatisutilss.getSqlSession (); Pruebe { / * * el david.mybatis.demo.ivisitoreperation.basicquery aquí debe corresponder al espacio de nombres en la configuración en la figura a continuación * / visitante visitante = (visitante) session.selectone ("David.mybatis.demo.ivisitoreperation.basicquery", id); Mybatisutils.clossession (sesión); System.out.println (visitante); } Catch (Exception e) {// tODO: manejar excepción}}< por ID </select> </mapper>
De esta manera, si los nombres de ambos lados no se corresponden accidentalmente durante el proceso de desarrollo real, se producirá una excepción. Para evitar tal situación, podemos usar el método de interfaz para realizar las operaciones correspondientes. Modificemos este artículo a continuación.
Primero, creamos una nueva clase de IvisitOperation bajo el nombre del paquete David.Mybatis.Demo, lo que indica que las interfaces de todos los métodos de la base de datos se operarán en el futuro, como se muestra a continuación:
paquete David.mybatis.demo; import java.util.list; import david.mybatis.model.pagenateargs; import david.mybatis.model.visitor; interfaz pública ivisitoreperation { /** consultas básicas* / visitante básico (int id);} public stestbasicQuery bynerface (intentd) Sqlsession session = mybatisutils.getSqlSession (); intente {ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); Visitante visitante = voperation.basicQuery (id); Mybatisutils.clossession (sesión); System.out.println (visitante); } Catch (Exception e) {// tODO: manejar excepción}}Esto se hace, por lo que no tenemos que preocuparnos por el desajuste que puede resultar de nombres de métodos de escritura manual.
Operación CRUD
Lo siguiente explicará la creación de operaciones RCUD y GetList basadas en operaciones de una sola tabla. Para crear algunos datos de prueba, primero obtengamos un método ADD.
Continúe agregando métodos de interfaz Agregar, eliminar, actualizar, consulta y GetList en la última clase de interfaz de ivisitoreperación, como se muestra a continuación:
/** Consulta básica*/ Public Visitor BasicQuery (int id); /** Agregar visitante*/ public int add (visitante visitante); /** Eliminar visitante*/ public int delete (int id); /** Actualizar visitante*/ public int actualización (visitante visitante); /** Consulta visitante*/ consulta de visitante público (int id); / * * Lista de visitantes de consulta */ Lista pública <Scisitor> GetList ();
Para las operaciones CRUD correspondientes, los nodos Insertar, Actualizar, Eliminar y Seleccionar se encuentran respectivamente debajo del nodo <Mapper> de VisisMapper.xml. Para obtener detalles de configuración detallados, consulte el sitio web oficial http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
La configuración en este ejemplo es la siguiente: use #{parameter_name} para pasar los parámetros y, por supuesto, también puede usar $ {parameter_name} directamente.
En la manera anterior, MyBatis lo convertirá en forma parametrizada, por ejemplo, insertar en valores de tabla (nombre) (#{name}) => Insertar en valores de tabla (nombre) (?) (En el caso de MySQL)
En la última manera, MyBatis pasará los parámetros sin hacer ninguna operación, como Insertar en los valores de la tabla (nombre) ($ {name}) => Insertar en los valores de la tabla (nombre) ([el valor que pasó]), pasar aa, aquí es aa, pasar 'aa', aquí está 'aa'.
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace = "David.mybatis.Demo.IVISITEROPERATION"> <!-UseGeneratedKeys = "true" significa si usar una secuencia de crecimiento automático, keyproperty = "id" especifica qué columna es la columna de autocuración, parametType = "visitante" especifica el tipo de correspondencia en la definición de la definición en la definición en la definición de la interfaz de ivisitore. ResultMap en consulta. El tipo de retorno personalizado es la mejor opción para devolver los tipos complejos y también es el arma más poderosa en myBatis-> <insertar id = "agregar" parametertype = "visitante" useGeneratedKeys = "true" keyproperty = "id"> insertar en visitante (nombre, correo electrónico, status, createtime) valores ( #{name}, #{ #}, #{status}, #}, #} <delete id = "delete" parametertype = "int"> Eliminar del visitante donde el estado> 0 y id =#{id} </elelete> <update id = "update" parametertype = "visitante"> actualizar el set de visitante name =#{name}, correo electrónico =#{correo electrónico}, status =#{status} Where Id =#{id} y status> 0; </update> <select id = "Query" ParameterType = "int" resultType = "Visitor"> select id, nombre, correo electrónico, estado, createTime de visitante donde id =#{id} y status> 0 orden por id </select> <select id = "Basicquery" parametType = "int" resultype = "visitante"> select * de visitante de Visitor Where Id =#{ {{Id} y stater by Id " <select id = "getList" resultMap = "visitorrs"> <include refid = "getListsQl" /> < /select> <resultMap type = "Visitor" id = "visitorrs"> <id columna = "id" propiedad = "id" /> <resultado columna = "name" propiedad = "nombre" /> <resultado columna = "correo electrónico" propiedad = "correo electrónico" /> <resulte columna = "status" status "status" Status " columna = "CreateTime" Property = "CreateTime"/> </resultMap> <Sql id = "GetListsQl"> Seleccionar * Desde el estado del visitante> 0 </sql> </mapper>Una cosa a tener en cuenta aquí es que la ID en el nodo de operación debe corresponder al nombre de la interfaz en la definición de interfaz, y el tipo de parámetro también debe corresponder a él. Por ejemplo, la interfaz es ADD (visitante del visitante). Luego, al configurar el nodo inserto, id = "agregar" y parametertype = "visitante"
De lo contrario, se informará una excepción correspondiente. Por ejemplo, si el nodo de identificación no corresponde al nombre de la interfaz, aparecerá la siguiente excepción:
Puede notar que al obtener una lista en el archivo de configuración visitormapper.xml, usa resultados de resultados. Cuando use ResultMap, puede especificar qué camina sus propios mapas de instrucción SQL, porque a veces no necesita tantas columnas, por lo que no necesita configurar tantos mapas al configurar la asignación, o su columna ha sido alias, por lo que no puede usar directamente el resultado de "visitante" para mapear, el método de mapeo predeterminado de mybatis coincide si el nombre de atributo de los favoritos es consistente con la tabla de la tabla. También puede controlar si se debe mapear configurando el valor de atributo <Sentaces> en el nodo <Configuration> para controlar si se debe mapear con el nombre de camello en Javabean de la siguiente manera.
<nettings> <setting name = "mapunderscoretOcamelcase" value = "false" /> </ettingings>
Para otras configuraciones que modifican el mapeador, puede verlas en http://mybatis.github.io/mybatis-3/configuration.html#settings.
Para la clase Mapper de visitante es la siguiente:
<mappper namespace = "david.mybatis.demo.ivisitoreperation"> <sql id = "getListsql"> seleccione ID como Visitor_id, Name, Correo electrónico, estado, CreateTime de Visitor Where Status> 0 </Sql> <Select ID = "GetList" ResultMap = "Visitorrs"> <incluir a REFID = "getListsql"/> <<</</select ". Aquí está la propiedad de la propiedad. Los campos en él deben ser los mismos que las propiedades que define en la entidad. Esto es sensible a la caja, de lo contrario, el setter predeterminado no encontrará la propiedad correspondiente al asignar valores a la propiedad. Puede probar la propiedad de columna correspondiente al nombre del conjunto de resultados devuelto por la instrucción de consulta. If an alias is given to the corresponding field, for example, id becomes visitor_id, then the corresponding column name must also correspond to --> <resultMap type="Visitor" id="visitorRs"> <id column="visitor_id" property="id" /> <result column="Name" property="name" /> <result column="Email" property="email" /> <result column="Status" property="status" /> <result columna = "CreateTime" Property = "CreateTime"/> </resultmap> </mapper>
Aquí también notará que hay un nodo <sql>. Esto se utiliza para extraer declaraciones o campos públicos de SQL para su reutilización en otros lugares. Para obtener otras instrucciones detalladas, consulte http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
El resto es la misma operación que ahora. Puede crear una clase Demorun en el programa de demostración para almacenar varios métodos de prueba, de la siguiente manera:
paquete David.mybatis.Demo; import java.util.arrays; import java.util.list; import org.apache.ibatis.session.sqlsession; import david.mybatis.model.basicqueryargs; import.mybatis.model.crud_enum; importar david.mybatal.model.model.model.model. David.mybatis.model.pagenateargs; import david.mybatis.model.visitor; import david.mybatis.model.website; public class Demorun {public static void testBasicQuery (int id) {sqlsession session = mybatisutils.getsqlsession (); Pruebe { / * * el david.mybatis.demo.ivisitoreperation.basicquery aquí debe corresponder al espacio de nombres en la configuración en la figura a continuación * / visitante visitante = (visitante) session.selectone ("David.mybatis.demo.ivisitoreperation.basicquery", id); Mybatisutils.clossession (sesión); System.out.println (visitante); } catch (Exception e) {// tODO: manejar excepción E.PrintStackTrace (); }} public static void testBasicQueryByInterfaceway (int id) {sqlsession session = mybatisutils.getSqlSession (); intente {ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); Visitante visitante = voperation.basicQuery (id); Mybatisutils.clossession (sesión); System.out.println (visitante); } catch (Exception e) {// tODO: manejar excepción E.PrintStackTrace (); }} /** Agregar registro de visitantes en lotes* / public static void addVisitors () {sqlsession session = mybatisutils.getsqlSession (); List <Sisitor> Visitors = Arrays.aslist (New Visitor [] {New Visitor ("MongoDb", "[email protected]"), New Visitor ("Redis", "[email protected]"), New Visitor ("MemCached", "Memcached.com"), New Visitor ("Couch." [email protected] ") Visitante ("hbase", "[email protected]"), nuevo visitante ("bigtable", "[email protected]"), nuevo visitante ("colmena", "[email protected]"), nuevo visitante ("mapreduce", "[email protected]"),}); para (visitante visitante: visitantes) {addvisitor (visitante, sesión); } Mybatisutils.clossessession (sesión); Mybatisutils.showMessages (crud_enum.list, visitores.size ()); } /** Agregar información del visitante* / @supesswarnings ("no usado") Private estático void addvisitor (visitante visitante, sesión de sqlsession) {if (session == null) session = mybatisutils.getSqlSession (); Ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); int registro = voperation.add (visitante); session.commit (); if (session == null) mybatisutils.clossession (sesión); Mybatisutils.showmessages (crud_enum.add, discoNCount); } /** Sobrecarga add visitante* / public static void addVisitor (visitante visitante) {addVisitor (visitante, nulo); } /** Eliminar información del visitante* / public static void DeleteVisitor (int id) {sqlsession session = mybatisutils.getSqlSession (); Ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); int registro = voperation.delete (id); session.commit (); Mybatisutils.clossession (sesión); Mybatisutils.showMessages (crud_enum.delete, discoNTCount); } /** Actualizar información del visitante* / public static void UpdateVisitor (int id) {sqlsession session = myBatisUtils.getSqlSession (); Ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); Visitante visitante = voperation.query (id); System.out.println ("Objeto original:" + visitante); Name de cadena = visiter.getName (); if (name.contains ("actualizado"))) {visitor.setName (name.substring (0, name.indexof ("actualizado"))); } else {Visitor.setName (nombre + "actualizado"); } int registro = voperation.update (visitante); session.commit (); Mybatisutils.clossession (sesión); Mybatisutils.showMessages (crud_enum.update, discount); System.out.println ("OBJETIVO DE ACTUALIZACIÓN:" + VISITOR); } /** Información del visitante de consulta* / public static void queryVisitor (int id) {sqlsession session = myBatisUtils.getSqlSession (); Ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); Visitante visitante = voperation.query (id); Mybatisutils.clossession (sesión); Mybatisutils.showMessages (crud_enum.query, 1); System.out.println (visitante); } /** Consulta la lista de visitantes* / public static void QueryVisitorList () {sqlsession session = myBatisUtilss.getSqlSession (); Ivisitoreperation voperation = session.getMapper (ivisitoreperation.class); Lista <Sisitor> Visitantes = voperation.getList (); para (visitante visitante: visitantes) {system.out.println (visitante); } Mybatisutils.clossessession (sesión); Mybatisutils.showMessages (crud_enum.list, visitores.size ()); }} La clase Demorun ejecuta una simple mesa simple y la demostración se completa.