El artículo anterior "Javaweb Practical Mall Development (I)" ha creado clases de entidades y herramientas de paginación. Este artículo usa mybatis para crear capas DAO.
Además, la documentación de la API de MyBatis se puede utilizar como referencia
1. El uso de mybatis
1. Introducir un paquete de estante
Aquí presento los paquetes mybatis y mysql en lib
2. Escriba config.xml para configurar el entorno de la base de datos
Publique el código primero, luego explique uno por uno
<? xml versión = "1.0" encoding = "utf-8"?> < <typeAliases> <package name="com.model"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name = "username" value = "$ {username}"/> <propiedad name = "contraseña" valor = "$ {contraseña}"/> </dataSource> </entorno> <!-Segundo entorno-> <entorno id = "publicar"> <transaccionManager = "jdbc"/> <dataSource type = "emparejado"/> </balentle> </entornos> </configuration)El primer paso es introducir el formato de archivo XML, es decir, DTD, que debe copiarse directamente de la plantilla proporcionada por MyBatis.
<! Doctype Configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
Pregunta 1
La función Propiedades es configurar el archivo de propiedades correspondientes, el recurso especifica la ruta correspondiente y podemos configurar el controlador de la base de datos, URL, nombre de usuario, contraseña, etc. en el archivo de propiedades. Consulte lo siguiente. De esta manera, MyBatis leerá automáticamente los siguientes parámetros, y puede usar $ {} para hacer referencia a él en el XML.
controlador = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/shop username = root contraseña = 123456
Pregunta 2
Typealiases configura alias en la ruta especificada. Podemos configurar un solo nombre de alias <typealias type = "com.model.user" alias = "user"/> de esta manera, com.model.user se cambia a alias usuarios. No hay necesidad de escribir todos los nombres más tarde. Solo necesita el usuario para reemplazar la modificación por lotes <paquete name = "com.model"/>. De esta manera, puede modificar todas las clases de un paquete, y el alias predeterminado es el nombre de la clase de entidad.
Pregunta 3
Los entornos se utilizan para configurar el entorno de la base de datos y pueden configurar múltiples entornos, como el entorno de desarrollo y el entorno de liberación, el valor predeterminado se refiere al entorno predeterminado
Tenga en cuenta que no hay S en el entorno, lo que representa un entorno en entornos. Se distingue por ID, por lo que ID debe ser único.
TransactionManager representa el tipo de base de datos de conexión, JDBC se conecta a Java
DataSource configura el modo de fuente de datos, agrupado es el modo de grupo de conexión. Para otros modos, puede ir al documento oficial para verlo y elegir de acuerdo con sus necesidades.
La propiedad es configurar la conexión de la base de datos. No mueva el nombre, modifique el valor = "controlador". Aquí está el uso de {} para leer la configuración en el archivo de propiedades superiores. Preste atención a que coincida con el nombre para leerlo.
3. Declaración de mapeo de mapeador de escritura SQL
Aquí escribo el método de carga de userdao, es decir, leo un usuario basado en ID. El siguiente código es equivalente a la función de carga de usuario público (INT ID). Para MyBatis, hay dos tipos de reemplazo #{} El reemplazo se citará automáticamente de acuerdo con el tipo, como el tipo de cadena #{name} reemplazado con 'Nombre'. El otro es un reemplazo de $ {}, que se reemplaza directamente en el formato original y no agregará otras cosas.
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper> <select id="load" parameterType="int" resultType = "User"> Seleccionar * Desde el usuario donde id =#{id} </select> </mapper>El primer paso es introducir el archivo de encabezado DTD y formular las reglas para el archivo XML
Etiqueta de selección, lo que indica que actualmente es una declaración de selección
El atributo de identificación es equivalente al nombre de la función, a la que se hace referencia ID
El atributo Parametertype, que representa el tipo de parámetro entrante, puede especificar el tipo básico o un tipo personalizado. Si es un tipo personalizado, su método GET se llamará automáticamente para obtener sus atributos.
La propiedad resultante, el tipo de valor de retorno, puede personalizar directamente el tipo y llamará automáticamente el método establecido para establecer los parámetros de consulta y usar más propiedades en artículos posteriores.
4. Llame al mapa mapeador
Antes de llamar, primero debe configurar la asignación en config.xml. Tenga en cuenta que el XML configurado aquí es la ruta del archivo.
<Mappers> <Mapper Resource = "COM/Model/User.xml"/> </Mappers>
Luego escribe una clase de prueba
public static void main (string [] args) {try {inputStream is = recursos.getResourceasStream ("config.xml"); // Lea el archivo de configuración sqlsessionFactory factory = new sqlSessionFactoryBuilder (). Build (IS); // Use el archivo de configuración para crear fábricas sqlsession session = factory.opensession (); ///////ser session.selectone (user.class.getName ()+". Load", 1); // llamar a la función de carga System.out.println (user.getNickName ()); // Output Nickname session.close (); // session} Catch (ioException e) {e.PrintStackTrace (); }} resultado:
5. Clase de herramienta de SQLSession
Escribir clases de prueba como la anterior es demasiado problemática, por lo que encapsula SQLSession para facilitar el uso de la capa DAO
paquete com.util; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; importar org.apache.ibatis.session.sqlsessionFactory; importar org.apache.ibatis.session.sqlsession; import org.apache.session.session.sqlsession; java.io.ioException; import java.io.inputstream;/*** creado por NL101 el 2016/2/23. */public class SessionUtil {private static sqlSessionFactory factory = null; static {try {inputStream is = recursos.getResourceasstream ("config.xml"); // lee el archivo de configuración fábrica = new SqlSessionFactoryBuilder (). Build (IS); // Crear fábrica usando el archivo de configuración} Catch (IOException E) {E.PrintStackArtace (); }} / ** * Get Session * @return * / public static sqlSession getSession () {return factory.opensession (); } / ** * Cerrar sesión * @param session * / public static void closesession (session session) {if (session! = Null) session.close (); sesión = nulo; }}Lo anterior es el uso básico de mybatis, y ahora comienza a encapsular la capa DAO
2. Encapsulate Dao
1.userdao.java
Public User Load (INT ID) Obtenga un usuario basado en ID
Se ha escrito arriba
Public Boolean Add (usuario de usuario) Agregar un usuario
Código XML
<
Código Java
/** /*** Agregar un usuario* @param Usuario El usuario se agregará* @return verdadero éxito* /public boolean add (usuario de usuario) {int isAdd = 0; Sqlsession session = sessionUtil.getSession (); Pruebe {isAdd = session.insert (user.class.getName ()+". add", user); session.commit (); // enviar} Catch (Exception e) {session.rollback (); // rolleback si el envío falla} finalmente {sessionUtil.clossessession (sesión); } System.out.println (isAdd); devolver isadd> 0; } Public Boolean Delete (int id) Eliminar un usuariocódigo XML
<!-Eliminar un usuario-> <delete id = "eliminar" parametertype = "int"> eliminar del usuario donde id =#{id} </elete>Código Java
/ ** * Eliminar el usuario basado en ID * @param ID para eliminar la identificación del usuario * @return true éxito */ public boolean delete (int id) {int isDelete = 0; Sqlsession session = sessionUtil.getSession (); intente {isDelete = session.delete (user.class.getName ()+". delete", id); session.commit (); } catch (Exception e) {session.rollback (); // falló return System.out.println ("Eliminar el usuario fallido"); E.PrintStackTrace (); } Finalmente {sessionUtil.clossession (sesión); } return isDelete> 0; } Public Boolean Update (usuario de usuario) Usuario de actualizacióncódigo XML
<
Código Java
/ *** actualizar usuario* @param user el usuario será actualizado* @return true éxito*/ public boolean Update (usuario de usuario) {int isUpdate = 0; Sqlsession session = sessionUtil.getSession (); intente {isUpdate = session.delete (user.class.getName ()+". Update", usuario); session.commit (); } catch (Exception e) {session.rollback (); // falló de retorno system.out.println ("actualizar fallido"); E.PrintStackTrace (); } Finalmente {sessionUtil.clossession (sesión); } return isupdate> 0; } Public Useric Login (String UserName, String Password) determina si el usuario existecódigo XML
<!-Juicio de inicio de sesión del usuario-> <select id = "Login" Parametertype = "String" resultType = "User"> SELECT * DEL USUARIO WHERE USERNAME =#{USERNAME} </select>Código Java
/ *** Determine si un usuario existe* @param UserName Nombre de usuario* @param contraseña contraseña* @return thurne return User no existe return null*/ public user inicio (string username, string contraseña) {user user = null; Sqlsession session = sessionUtil.getSession (); Pruebe {user = session.selectone (SoapBinding.use.class.getName ()+". Login", UserName); // Cuando la contraseña es incorrecta, configure el usuario en NULL if (! User.getPassword (). Equals (contraseña)) {user = null; }} finalmente {sessionUtil.clossessession (sesión); } Return User; } Public Pager Find (Nombre de cadena, clasificación de cadena, orden de cadena) Procesamiento de paginación Código XML:
SQL dinámico se usa aquí. Con respecto a SQL dinámico, es el uso de etiquetas como dónde, si, elegir, etc., puede consultar el documento oficial. Además, en MyBatis, el concepto de NULL no existe. Por ejemplo, pasa user = nulo, pero al reemplazarlo, se reemplaza con una cadena "nula". Si este valor no está disponible, es nulo.
< Número de registros de página-> <select id = "findCount" parametertype = "map" denttype = "int"> select Count (*) de user <if test = "name! = null"> where (username like #{name} o apodo como #{name}) </fif> </select>Código Java: En general, todavía se basa en la paginación diseñada por el artículo anterior
/*** Consulta de página basada en condiciones especificadas* @Param Condiciones de consulta de nombre, NULL representa una condición incondicional* @param clasificación de clasificación, NULL representa la clasificación de ID* @Param Condición de clasificación de orden, NULL representa el orden ascendente* @return*/public Pager <Ser User> find (String Name, String Sort, String Order) SystemContext.getPageSize (); // Page Size Pager <Serem> Pagers = new Pager <> (); Map <string, object> maps = new HashMap <> (); if (name! = null &&! name.equals ("")) {name = "%"+name+"%"; maps.put ("nombre", nombre); } if (sort == null || sort.equals ("")) {sort = "id"; // sorted by id por defecto} if (orden == null || orden.equals ("")) {orden = "asc"; // sort de default} maps.put ("sort, sort, sort, sort); maps.put ("orden", orden); maps.put ("PagStart", PAGESTART); maps.put ("PageSize", PageSize); Sqlsession session = sessionUtil.getSession (); Lista <serem> DataS = NULL; Pruebe {datas = session.selectList (user.class.getName ()+". Find", maps); // Obtener registro pagers.setDatas (datos); Pagers.SetPageSize (PageSize); Pagers.SetPageStart (PAGESTART); int totalRecord = session.selectone (user.class.getName ()+". findCount", maps); // Obtenga el número total de registros pagers.settotalRecord (TotalRecord); pagers.setPageIndex (pagStart/PageSize+1); } Finalmente {sessionUtil.clossession (sesión); } Páginas de retorno; } Estructura actual del proyecto
En el próximo artículo, escribiré un basado general para facilitar la redacción de código. Y continúe aprendiendo el uso de otras propiedades de mybatis. Gracias por tu lectura.