Proyecto de MyBatis-Spring
Actualmente, la mayoría de los proyectos de Internet Java se construyen utilizando Spring MVC + Spring + MyBatis.
El uso de Spring IOC puede administrar efectivamente varios recursos de Java y lograr la función plug-and-play; A través del marco Spring AOP, las transacciones de la base de datos se pueden confiar a la gestión de primavera, eliminando una gran parte del código de transacción y combinando con las características SQL de MyBatis de alta flexibilidad, configurables y optimizadas, es posible construir sitios web grandes de alto rendimiento.
No hay duda de que los dos marcos principales, MyBatis y Spring, se han convertido en la combinación de marco principal de la tecnología de Internet Java. Han resistido la prueba de un gran volumen de datos y solicitudes a gran escala y se han utilizado ampliamente en los sistemas de Internet. El uso de MyBatis-Spring hace que la capa de negocios y la capa del modelo se separen mejor. Al mismo tiempo, usar mybatis en el entorno de primavera es más simple, ahorrando mucho código, e incluso puede evitar usar objetos como SQLSessionFactory y SQLSession, porque mybatis-Spring los encapsula para nosotros.
Extraído de: "Java EE Internet Marco ligero de desarrollo integrado"
Paso 1: Crear un proyecto de prueba
El primer paso es crear un nuevo proyecto webproject llamado [myBatisandSpring] en idea:
Luego cree 4 paquetes vacíos en [SRC]:
Luego cree una nueva carpeta de origen [config] para colocar varios archivos de configuración de recursos:
Luego cree una nueva carpeta de seguridad predeterminada [web-Inf] en la carpeta [web] y cree una [clases] y [lib] en ella, y cambie la ubicación de salida del proyecto en [clases]:
La estructura inicial completa del proyecto es la siguiente:
Paso 2: Introducción del paquete de frasco de dependencia
El segundo paso es preparar el paquete JAR de dependencia del proyecto:
Coloque el paquete JAR enumerado anteriormente en la carpeta [lib] en la carpeta [web-INF] y luego agregue dependencias.
Paso 3: Escribir archivos de configuración de Spring
El tercer paso es escribir el archivo de configuración de Spring:
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http:/www.springframework.org/schema/scoans/spring-ste http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-Carga de la configuración del archivo de configuración-<context: Propiedad-placeholeation =" classpath: db.properties "/> <! id = "DataSource"> <Property Name = "DriverClassName" value = "$ {jdbc.driver}"/> <propiedad name = "url" value = "$ {jdbc.url}"/> <propiedad name = "username" value = "$ {jdbc.username}"/> <name de propiedad = "Value" Value = "$ {jdbc.portsworthbc.c.c.c.c.c.c.c.wly <Paso 4: Escriba el archivo de configuración de MyBatis
Paso 4: Escriba el archivo de configuración global de MyBatis en el paquete [myBatis] sqlmapconfig.xml:
<? xml versión = "1.0" encoding = "utf-8"?> < Switch-> <setting name = "LazyLoadingEnabled" value = "true"/> <!-Cambiar la carga activa a la carga pasiva (es decir, carga a la demanda)-> <setting name = "agressiveSliveLAweLoading" value = "false"/> <!-encender el conmutador de caché (el caché secundario) el valor predeterminado es verdadero-> <name de configuración = "cacheenabuled" valor = "verdadero"/> <setentings>; <PyyPealiases> <paquete name = "cn.wmyskxz.pojo"/> </typealiases> <!-Cargue el archivo de mapa-> <mappers> <!-Cargue un archivo de mapa a la vez a través del método de recursos-> <mapper recursce = "sqlmap/usermapper.xml"/> <!-batch cargar mapeper-> <paquete paquete paquete mapeP-<paquete paquete paquete de mapeper-<paquete paquete de paquete name = "cn.wmyskxz.mapper"/> </mappers> </figuration>
En este archivo de configuración:
Paso 5: Escriba el mapeador y otros archivos de configuración
Paso 5: Escriba el archivo de asignación de mapper. Aquí, el nombre del archivo de mapeo mapeador todavía se define como "usermapper.xml" (que es consistente con la configuración en sqlmapconfig.xml). Para probar el efecto, solo se configura un mapa SQL de clase de consulta:
<? 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.dtddddd"><mapper namespace =" testing "<sept" <selecti ">" SEECTY ">" SEECTY ". parametertype = "_ int" resulttype = "user"> select * de user where id = #{id} </ectele> </mapper>En esta configuración, los parámetros de salida se asignan a "usuario", porque la clase de entidad en el paquete "cn.wmyskxz.pojo" se configuró en sqlmapconfig.xml antes de usar alias (es decir, el nombre de la clase con iniciales bajas), por lo que aquí solo necesita crear el usuario de la clase de Java en entidad correspondiente a "FinduserByid" debajo del "cn.wmyskz.wmyskz.wmyskz. paquete:
paquete cn.wmyskxz.pojo; import java.io.serializable; public class User implementa serializable {private int id; nombre de usuario de cadena privada; / * Getter and Setter */}La implementación de la interfaz serializable es prepararse para el uso posterior del proxy dinámico mapper, y no se utiliza ningún proxy dinámico.
La información de conexión de la base de datos está configurada en el recurso de la base de datos "DB.Properties" y se configura en forma de "Key = Value". La cadena usa "$ {}" para obtener el valor correspondiente a la clave:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306/mybatis? caracterSencoding = utf-8jdbc.username = rootjdbc.password = root
Además, la configuración de registro es la misma que la configuración anterior, por lo que la pegué directamente:
# Configuración de registro global# En el entorno de desarrollo, el nivel de registro debe configurarse para depurar, y el entorno de producción debe establecerse en Info o ErrorLog4j.rootlogger = Debug, Stdout# Console salida ... log4j.appender.stdout = org.apache.log4j.consoleppenderlog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout.conversionPattern =%5p [%t] -%m%nes
Paso 6: Escribe la capa DAO
Paso 6: Escriba la capa de objeto de acceso a datos.
Dado que este proyecto solo consulta al usuario del usuario, solo hay una clase en la capa DAO. La interfaz de la interfaz de la capa DAO se crea en el paquete "CN.WMyskXZ", que define el método FindUserByID y el parámetro es el valor de identificación del usuario (Tipo int)::
paquete cn.wmyskxz.dao; import cn.wmyskxz.pojo.user; interfaz pública userdao {// Información del usuario de consulta basada en ID Public User FindUserByID (INT ID) arroja excepción;}Luego cree la clase de implementación de la interfaz userdao UserDaoMpl en el mismo paquete:
paquete cn.wmyskxz.dao; import cn.wmyskxz.pojo.user; import org.apache.ibatis.session.sqlsession; import org.mybatis.spring.support.sqlsessiondaosupport; pública userDaoMession extiende sqlsessionDaosupport El usuario FindUserById (int id) lanza la excepción {// heredar la clase SQLSessionDaosupport y pasar esto.getSqlSession () Get sqlSession sqlSession sqlsession = this.getSqlSession (); Usuario user = sqlsession.selectone ("test.finduserByid", id); devolver el usuario; }}Hay algunas explicaciones:
<!-Interfaz DAO original-> <bean id = "userDao"> <Property name = "SQLSessionFactory" ref = "SQLSessionFactory"/> </bean>
Nota: Después de que la clase de implementación de DAO hereda la clase principal de SQLSessionDaosupport, no es necesario definir el método para obtener la clase de instancia de sesión de SQLSession por sí misma. La clase principal cargará la información de la fuente de datos de forma predeterminada y proporcionará un método para obtener la clase SQLSession.
Paso 7: Escribir la clase de prueba de servicio
Cree la clase de prueba [UsserServiceTest] en el paquete "cn.wmyskxz.test":
paquete cn.wmyskxz.test; import cn.wmyskxz.dao.userdao; import cn.wmyskxz.pojo.user; importar org.junit.before; importar org.junit.test; import og.springfframework.context.applicationContext; import org. // Obtenga el objeto de archivo de configuración de Spring antes de ejecutar el método de prueba // anotación @bebefore llama a este método antes de ejecutar todos los métodos de prueba de esta clase @bebore public void setup () lanza la excepción {ApplicationContext = new ClassPathXMLApPlicationContext ("classpath: Spring/ApplicationContext.xml"); } @Test public void testFindUserById () lanza la excepción {// Obtener el objeto UserDao al configurar los objetos de recursos userdao userdao = (userDao) applicationContext.getBean ("userDao"); // llame al usuario usuario user = userdao.finduserByid (1); // Salida de información del usuario System.out.println (user.getID () + ":" + user.getUsername ()); }}Ejecute el método de prueba y los resultados de la salida son los siguientes:
Implementación dinámica de proxy + anotación
El programa de ejemplo anterior no se completa utilizando el proxy dinámico Mapper y las anotaciones. Intentemos cómo usar proxy dinámico y anotaciones:
Paso 1: Escribir UserQueryMapper
Cree una nueva interfaz proxy [userQueryMapper] en [Mapper] y use anotaciones:
paquete cn.wmyskxz.mapper; import cn.wmyskxz.pojo.user; import org.apache.ibatis.annotations.select; pública interfaz userQueryMapper {@select ("Seleccionar * desde el usuario donde id = #{id}") Public User FindUserByid (int id) lanza excepción;}Nota: Por defecto, el nombre del bean es UserQueryMapper (es decir, la primera letra es minúscula)
Ahora que tenemos la clase proxy, necesitamos notificar a Spring para escanear esta clase aquí. Mapper debe usar un escáner especial para escanear el objeto de configuración:
<
Paso 2: Escribe una clase de prueba
Esta vez ya no estamos obteniendo el objeto Userdao, sino el objeto de proxy mapper definido userQueryMapper:
paquete cn.wmyskxz.test; import cn.wmyskxz.mapper.userQueryMapper; import cn.wmyskxz.pojo.user; import org.junit.before; import org.junit.test; import org.springframework.context.applicationContext; import org. // Obtenga el objeto de archivo de configuración de Spring antes de ejecutar el método de prueba // anotación @bebefore llama a este método antes de ejecutar todos los métodos de prueba de esta clase @bebore public void setup () lanza la excepción {ApplicationContext = new ClassPathXMLApPlicationContext ("classpath: Spring/ApplicationContext.xml"); } @Test public void testFinduserById () lanza la excepción {// Obtener el objeto UserDao al configurar los objetos de recursos userQueryMapper UserQueryMapper = (UserQueryMapper) ApplicationContext.getBean ("UserQueryMapper"); // llame al método userdao user user = userQueryMapper.FinduserById (1); // Salida de información del usuario System.out.println (user.getID () + ":" + user.getUsername ()); }}Ejecute el método de prueba y obtenga el resultado correcto:
Puede ver que los resultados de la consulta son los mismos que los de los agentes no mapaper anteriores.
Resumir
El anterior es el método de integración perfecto entre mybatis y spring presentados por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!