1. Introducción a MyBatis
MyBatis es un excelente marco de capa de persistencia que admite consultas SQL simples, procedimientos almacenados y mapeo avanzado.
MyBatis elimina la configuración manual de casi todos los códigos y parámetros JDBC y la encapsulación de búsqueda del conjunto de resultados.
MyBatis puede usar XML o anotaciones simples para la configuración y el mapeo sin procesar, mapeo de interfaces y Pojos de Java (objetos Java antiguos) en los registros en la base de datos.
JDBC -> DBUTILS (Auto -Envapsulación) -> MyBatis -> Hibernate
MyBatis escribe SQL en XML y luego accede a la base de datos.
2. Empiece con mybatis
2.1. Crea un nuevo proyecto Java
Agregue MyBatis y MySQL Driver Jar: MyBatis-3.1.1.Jar, MySQL-Connector-Java-5.1.7-Bin.jar
2.2. Crea una nueva mesa
Crear base de datos myBatis; use myBatis; cree usuarios de tabla (ID int primario auto_increment, nombre varchar (20), edad int); inserte en valores de usuarios (nombre, edad) ('tom', 12); insertar en valores de usuarios (nombre, edad) ('Jack', 11);2.3. Agregue el archivo de configuración de MyBatis conf.xml
<? xml versión = "1.0" encoding = "utf-8"?> < id = "desarrollo"> <transaccionManager type = "jdbc" /> <dataSource type = "agrupado"> <propiedad name = "controlador" valor = "com.mysql.jdbc.driver" /> <propiedad name = "url" valor = "jdbc: mysql: // localhost: 3306 /mybatis" /> <propiedad name = "user" value " /" root " /" root " /" root " /" root " /" root " /" root " /" root " name = "Password" Value = "Root"/> </shasource> </entorno> </entornos> </figuration>
2.4. Defina la clase de entidad correspondiente a la tabla
Usuario de clase pública {private int id; private string name; private int age; // get, set Method}2.5. Defina el archivo de asignación SQL usermapper.xml que opera la tabla de usuarios
<? 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 = "com.atguigu.mybatis_test.test1.usermapper"> <select id = "getUser" parametertype = "int" resulttype = "com.atguigu.mybatis_test.test1.user"> Seleccionar * de usuarios donde id =#{Id} </select> </mepper>2.6. Registre el archivo usermapper.xml en el archivo conf.xml
<Mappers> <mapper resource = "com/atguigu/mybatis_test/test1/usermapper.xml"/> </mappers>
2.7. Escribir código de prueba: ejecutar declaraciones de selección definidas
Public Class Test {public static void main (string [] args) lanza IOException {String Resource = "Conf.xml"; // Cargue el archivo de configuración de MyBatis (también carga el archivo de mapeo asociado) lector = recursos.getResourceasreer (recursos); // CONSTRUCT SQLSessionFactoryBuilder (). Build (Reader); // Cree una sesión SQLSessionSQLSession que pueda ejecutar SQL en el archivo de asignación = SessionFactory.Opensession (); // Mapeo de SQL Identificación Cadena Declaración de cadena = "Com.atgugu.mybatis.Bean.usermapper"+". sqluser user = session.selectone (declaración, 1); system.out.println (usuario);}}3. Operar la crud de la tabla de usuarios
3.1.xml implementación
3.1.1. Defina el archivo XML de asignación SQL:
<inserto id = "insertuser" parametertype = "com.atguigu.ibatis.bean.user"> Insertar en usuarios (name, edad) valores (#{name},#{age}); </sert> <elete id = "deleteuser" parametertype = "int"> Eliminar de los usuarios donde id =#{id} </elelETE> <Update ID = "Updateuser" parametertype = "com.atguigu.ibatis.bean.user"> actualizar usuarios establecer nombre =#{name}, edad =#{age} where id =#{id} </update> <select id = "selectUser" parametertype = "int" denttype = "com.atguigu.ibatis.bean.user"> select * select * de usuarios donde id =# @#}#}/SELEC. id = "selectAllusers" resultType = "com.atguigu.ibatis.bean.user"> Seleccionar * De los usuarios </select>3.1.2. Registre este archivo de asignación en config.xml
<Mapper Resource = "com/atguigu/ibatis/bean/usermapper.xml"/>
3.1.3. Llamado en Dao
El usuario público getUserById (int id) {sqlsession session = sessionFactory.opensession (); user user = session.selectone (uri+". selectUser", id); return user;}3.2. Implementación de anotaciones
3.2.1. Defina la interfaz para el mapeo SQL
interfaz pública usermapper {@insert ("inserte en usuarios de usuarios (name, edad) valores (#{name},#{age})") public int inss INTERSUSer (usuario user);@delete ("Eliminar de los usuarios donde id =#{id}") public int deletEuserById (int id);@actualizar ("actualizar los usuarios establecer nombre =#{name}, edad =#{{{{{{{{#{{{#{{#{{#{{#{{#{{#{{#{{#{edad {edad} id =#{id} ") public int updateUser (usuario de usuario);@select (" SELECCIONAR * DESDE USUARIOS WHERE ID =#{id} ") Public User getUserByid (int id);@select (" Seleccionar * de usuarios ") Lista pública <serem> getAllUser ();}3.2.2. Registre esta interfaz de mapeo en la configuración
<mapper/>
3.2.3. Llamado en Dao
El usuario público getUserById (int id) {sqlsession session = sessionFactory.opensession (); usermapper mapper = session.getMapper (usermapper.class); user user = mappper.getuserByid (id); return user;}4. Varios lugares que se pueden optimizar
4.1. La configuración para conectarse a la base de datos se puede colocar en un archivo de propiedades por separado.
## db.properties<br><properties resource="db.properties"/><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" />4.2. Definir alias para las clases de entidad y simplificar las referencias en los archivos XML de asignación SQL
<PyyPealiases> <typealias type = "com.atguigu.ibatis.bean.user" alias = "_ user"/> </typealiases>
4.3. Puede agregar el archivo de configuración LOG4J en SRC para imprimir información de registro
1. Agregar frasco:
log4j-1.2.16.Jar
2.1. log4j.properties (método 1)
log4j.properties, log4j.rootlogger = debug, console#consolelog4j.appender.console = org.apache.log4j.consoleppenderlog4j.appender.console.layout = org.apache.log4j.patternlaylog4j.appender.console %-5p [ %c] - %m%nlog4j.logger.Java.Sql.ResultSet
2.2. Log4j.xml (método 2)
<? xml versión = "1.0" encoding = "utf-8"?> <! DocType log4j: Sistema de configuración "log4j.dtd"> <log4j: configuración xmlns: log4j = "http://jakarta.apache.org/log4j/" <name de aperender = "stdout"> <dolout> <seCout> <icOut> <seCout> <Elout namepattern " valor = "%-5p%d {mm-dd hh: mm: ss, ss}%m (%f:%l) /n" /> </lout> </pender> <logger name = "java.sql"> <nivel valor = "debug" /> </logger> <logger name = "org.apache.ibatis"> <nivel de nivel = "debug" /> </logger> <logger name = "org.apache.ibatis"> <nivel valor = "debug" /> </logger> <ader> <nivel valor = "debug" /> <appender-ref ref = "stdout" /> </roter> < /log4j: configuración>5. Resuelva conflictos entre nombres de atributos de clase y clase de entidad
5.1. Preparar mesas y campos
Crear órdenes de tabla (Order_id int
5.2. Definir clases de entidad
Orden de clase pública {private int id; private String OrderNo; Private Float Price;}5.3. Implemente la consulta de GetOrderByID (ID):
Método 1: Defina alias en las declaraciones SQL
<select id = "selecterder" parametertype = "int" resulttype = "_ order"> select Order_id id, orden_no ordenno, orden_price precio de órdenes donde ordene_id =#{id} </select>Método 2: a través de <resultadomap>
<select id = "selectorDergesultMap" parametertype = "int" dulteMap = "OrderResultMap"> SELECT * de Orders Where Order_id =#{id} </elect> <resultmap type = "_ Order" id = "OrderResultMap"> <Id Property = "ID" columna = "Order_id"/> <results Property = "Order" Order "COLUMATY" COLUMANTER "COLUMANTER" COLUMATER "> <Id Property =" Id "columna =" Order_id "/> <Result Property =" ORDERNO "COLUMAMA =" COLUMATOR "COLUMALIMA =" COLUNTER "COLUMATER" Propiedad = "Price" Column = "Order_Price"/> <Result Property = "Price" Column = "Order_Price"/> <ResultMap>6. Implementar la consulta de la tabla de asociación
6.1. Asociación individual
6.1.1. Proponer requisitos
Información de clase de consulta basada en ID de clase (información con el maestro)
6.1.2. Crear tablas y datos
Crear tabla maestro (t_id int primaria clave auto_increment, t_name varchar (20)); crear clases de tabla (c_id int primaria llave auto_incement, c_name varchar (20), maestro_id int); alter tabla clase Agregar restricción FK_TEACHER_ID GRANJA (maestro_id) Referencias maestro (t_id); Insertar en valores de maestro (t_name) ('ls1'); insertar en valores de maestro (t_name) ('ls2'); insertar en valores de clase (c_name, maestro_id) ('bj_a', 1); insertar en clase (c_name, maestro_id) valores ('bj_b', 2);6.1.3. Definir clases de entidad:
maestro de clase pública {private int id; name de cadena privada;} clases de clase pública {private int id; name de cadena privada; profesor privado;}6.1.4. Defina el archivo de asignación SQL classMapper.xml
< c.teacher_id = t.t_id y c.c_id = s.class_id y c.c_id = 1-> <select id = "getClass3" parametertype = "int" resultmap = "classResultMap3"> Seleccionar * de la clase C, maestro T, estudiante s donde c.tacher_id = t.t_id y c.c_id = s.class_id y c.c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap3"> <id propiedad = "id" columna = "c_id"/> <resultado de la propiedad = "name" column = "c_id"/> <asociación propiedad = "maestro" columna = "maestro_id" javatipo = "_ maestro"> <id propiedad = "id" columna "columna" columna " propiedad = "name" column = "t_name"/> <resultado propiedad = "name" columna = "t_name"/> </sociation> <!-oftype Especifica el tipo de objeto en la colección de estudiantes-> <colección de propiedad = "estudiantes" oftype = "_ estudiante"> <id "id" id "columna =" s_id "/> <resulte propiedad =" nombre " columna = "S_name"/> </ Collection> </ resultadoMap> <!-Método 2: Consulta anidada: devuelve el tipo complejo esperado ejecutando otra instrucción de asignación de SQL Seleccionar * de la clase donde c_id = 1; seleccionar * del maestro donde t_id = 1 // 1 es el valor de maestro_id obtenido por la consulta anterior * del alumno donde class_id = 1 // 1 es el valor de C_id obtenido por el primero. id = "getClass4" parametertype = "int" resultmap = "classResultMap4"> select * de clase donde c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap4"> <id propiedad = "id" columna = "c_id"/> <resulte propiedad "columna" columna = "c_name"/> <> <> <> <> "maestro" columna = "maestro_id" javatype = "_ maestro" select = "getTeacher2"> </sociation> <colección de propiedad = "estudiantes" oftype = "_ estudiante" columna = "c_id" select = "getStudent"> </cle collection> </resultmap> <select id = "getTeacher2" parametertype = "int" resultype = "_ maestro" Select t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_ids de t_id id de t_ids de t_id id de t_id de t_id idio t_id =#{id} </select> <select id = "getStudent" parametertype = "int" denttype = "_ estudiante"> seleccione S_ID id, nombre S_NAME de Student Where class_id =#{id} </elect>6.1.5. Prueba
@Testpublic void testoo () {sqlSession sqlsession = factory.opensession (); classes c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass", 1); system.out.println (c);}@testpublic void testoo2 () {sqlsession factory.opensession (); clases c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getclass2", 1); system.out.println (c);}6.2. Asociación de uno a muchos
6.2.1. Proponer requisitos
Consulte la información de clase correspondiente de acuerdo con Classid, incluidos estudiantes y maestros
6.2.2. Crear tablas y datos:
Create Tabla Student (S_ID int primaria Key Auto_Increment, S_name varchar (20), class_id int); insertar en valores de estudiante (s_name, class_id) ('xs_a', 1); insertar en student (s_name, class_id) valores ('xs_b', 1); insertar en estudiante (s_name, class_id) valores ('xs_c', 1); 1); Class_id) valores ('xs_d', 2); insertar en valores de estudiante (s_name, class_id) ('xs_e', 2); insertar en valores de estudiante (s_name, class_id) ('xs_f', 2);6.2.3. Definir clases de entidad
Public Class Student {private int id; private String Name;} public class Classes {private int id; name de cadena privada; profesor privado; lista privada <estudiante> estudiantes;}6.2.4. Defina el archivo de asignación SQL classMapper.xml
< c.teacher_id = t.t_id y c.c_id = s.class_id y c.c_id = 1-> <select id = "getClass3" parametertype = "int" resultmap = "classResultMap3"> Seleccionar * de la clase C, maestro T, estudiante s donde c.tacher_id = t.t_id y c.c_id = s.class_id y c.c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap3"> <id propiedad = "id" columna = "c_id"/> <resultado de la propiedad = "name" column = "c_id"/> <asociación propiedad = "maestro" columna = "maestro_id" javatipo = "_ maestro"> <id propiedad = "id" columna "columna" columna " propiedad = "name" column = "t_name"/> <resultado propiedad = "name" columna = "t_name"/> </sociation> <!-oftype Especifica el tipo de objeto en la colección de estudiantes-> <colección de propiedad = "estudiantes" oftype = "_ estudiante"> <id "id" id "columna =" s_id "/> <resulte propiedad =" nombre " columna = "S_name"/> </ Collection> </ resultadoMap> <!-Método 2: Consulta anidada: devuelve el tipo complejo esperado ejecutando otra instrucción de asignación de SQL Seleccionar * de la clase donde c_id = 1; seleccionar * del maestro donde t_id = 1 // 1 es el valor de maestro_id obtenido por la consulta anterior * del alumno donde class_id = 1 // 1 es el valor de C_id obtenido por el primero. id = "getClass4" parametertype = "int" resultmap = "classResultMap4"> select * de clase donde c_id =#{id} </select> <resultmap type = "_ classes" id = "classResultMap4"> <id propiedad = "id" columna = "c_id"/> <resulte propiedad "columna" columna = "c_name"/> <> <> <> <> "maestro" columna = "maestro_id" javatype = "_ maestro" select = "getTeacher2"> </sociation> <colección de propiedad = "estudiantes" oftype = "_ estudiante" columna = "c_id" select = "getStudent"> </cle collection> </resultmap> <select id = "getTeacher2" parametertype = "int" resultype = "_ maestro" Select t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_id id de t_ids de t_id id de t_ids de t_id id de t_id de t_id idio t_id =#{id} </select> <select id = "getStudent" parametertype = "int" denttype = "_ estudiante"> seleccione S_ID id, nombre S_NAME de Student Where class_id =#{id} </elect>6.2.5. Prueba
@Testpublic void testom () {sqlSession sqlsession = factory.opensession (); classes c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass3", 1); system.println (c);}@testpualpeid testom2 () {) = factory.opensession (); clases c = sqlsession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getclass4", 1); system.out.println (c);}7. Consulta dinámica de SQL y difuso
7.1. Requisitos
Implementar usuario de consultas de múltiples acondicionamiento (nombre difuso, edad, edad entre el valor mínimo especificado y el valor máximo).
7.2. Preparar base de datos y tablas
Crear tabla D_USER (ID int primaria Key Auto_Increment, nombre varchar (10), edad int (3)); insertar en valores d_user (nombre, edad) ('tom', 12); insertar en valores d_user (nombre, edad) ('bob', 13); Insertar en valores d_user (nombre, edad) ('Jack', 18); 7.3.ConditionUser (consulta clase condicional de entidad) Nombre de cadena privada; privado int minage; private int maxage;7.4. Clase de entidad de tabla de usuarios
Private int id; nombre de cadena privada; private int Age;
7.5.Usermapper.xml (archivo de mapa)
<? 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 = "com.atguigu.day03_mybatis.test6.usermapper"> <select id = "getUser" parametertype = "com.atguigu.day03_mybatis.test6.conditionUser" dentType = "com.atgui.day03_mybatis.test6.user"> SELECT * de D de de Age> =#{Minage} y Age <=#{maxage} <if test = 'name! = "%null%"'> y name Like#{name} </if> </select> </mapper>7.6.Sertest (prueba)
public class Usertest {public static void main (String [] args) lanza ioexception {lector lector = recursos.getResourCeaseReader ("conf.xml"); sqlsessionFactory sessionFactory = new SqlSessionFactoryBuilder (). Build (Reader); sqlSession sqlsession = sessionFactory.opensession (); "com.atguigu.day03_mybatis.test6.usermapper.getuser"; list <serer> list = sqlsession.selectlist (declaración, nuevo condicionuser ("%a%", 1, 12)); system.out.println (list);}}Etiquetas SQL dinámicas disponibles en MyBatis
8. Llamar a los procedimientos almacenados
8.1. Exigir
Consulta el número de hombres o mujeres, si el entrante es 0, las mujeres de lo contrario
8.2. Prepare tablas de bases de datos y procedimientos almacenados:
Crear tabla P_user (ID int primaria clave auto_increment, nombre varchar (10), sexo char (2)); insertar en valores de p_user (nombre, sexo) ('a', "masculino"); insertar en valores p_user (nombre, sexo) ('b', "mujer"); insertar en valores p_user (nombre, sexo) ('c', "masculino"); #Cree el procedimiento almacenado (busque el número de hombres o mujeres, si el entrante es 0, las mujeres son de otra manera hombres) delimitador $ create procedimiento mybatis.ges_user_count (en sex_id int, user_count int) comienzan si sex_id = 0 thenselect Count (*) de mybatis.p_user donde p_user.sex = 'femenino' Count (*) desde mybatis.p_user donde p_user.sex = 'masculino' en user_count; end if; final de $#llamar del delimitador del procedimiento almacenado; set @user_count = 0; llamar mybatis.ges_user_count (1, @user_count); seleccione @user_count;8.3. Crear la clase de entidad de la tabla
Usuario de clase pública {ID de cadena privada; nombre de cadena privada; sexo de cadena privada;}8.4.Usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test7.usermapper"> <!-Query obtiene el número de hombres o mujeres. Si el entrado es 0, entonces las mujeres son de otra manera machos.call mybatis.get_user_count (1, @user_count);-> <select id = "getCount" stattleType = "callable" parametermap = "getCountMap"> call myBatis.get_User_Count (?,?) id = "getCountMap"> <parámetro de parámetro = "sex_id" mode = "en" jdbctype = "entero"/> <parameter Property = "user_count" mode = "out" jdbctype = "entero" // </parametermap> </mapper>
8.5. Prueba
Map <string, integer> parammap = new Hashmap <> (); parammap.put ("sex_id", 0); session.selectone (instrucción, parammap); integer usercount = parammap.get ("user_count"); system.out.println (UserCount);9. Mybatis caché
9.1. Comprender mybatis cachache
Al igual que la mayoría de los marcos de capa de persistencia, MyBatis también proporciona soporte para los cachés L1 y L2.
1. Cache de nivel 1: caché local hashmap basado en perpetualcache, su alcance de almacenamiento es sesión. Después de la sesión de la sesión o cierre, se borrarán todos los cachés en la sesión.
2. El mecanismo del caché secundario es el mismo que el del caché primario. Por defecto, también usa el almacenamiento perpetualcache y hashmap. La diferencia es que su alcance de almacenamiento es Mapper (espacio de nombres), y puede personalizar la fuente de almacenamiento, como Ehcache.
3. Para el mecanismo de actualización de datos de caché, cuando se realiza un cierto alcance (sesión de nombres de caché de caché de primer nivel) en operaciones C/U/D, todos los cachés en seleccionar Selects bajo este alcance se borrarán de manera predeterminada.
9.2. Mybatis Nivel 1 caché
9.2.1. Consulta basada en la tarea
Consulte el objeto de registro de usuario correspondiente basado en ID.
9.2.2. Preparar tablas y datos de bases de datos
Crear tabla C_USER (ID int primaria clave auto_increment, nombre varchar (20), edad int); insertar en valores c_user (nombre, edad) ('tom', 12); inserte en valores de c_user (nombre, edad) ('Jack', 11);9.2.3. Crear la clase de entidad de la tabla
El usuario de la clase pública implementa serializable {private int id; private string name; private int Age;9.2.4.usermapper.xml
<? 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 = "com.atguigu.mybatis.test8.usermapper"> <select id = "getUser" parametertype = "int" denttype = "_ cuser"> select * de c_user donde id =#{id} </select> <update id = "updateuser" parametertype = "_cuser"> update c_user c_user c_user Age =#{Age} Where id =#{id} </update> </mapper>9.2.5. Pruebas
/** Cache de nivel 1: es decir, caché de nivel de sesión (encendido por defecto)*/@testPublic void testCache1 () {sqlSession session = myBatisUtils.getSession (); string stat-"com.atguigu.mybatis.test8.usermappers.getUser"; usuario user = session.selectone (declaración, 1); system.out.Printl (usuario); 1 caché se usará por defecto*//*user = session.selectone (declaración, 1); system.out.println (usuario);*//*1. Debe ser la misma sesión. Si el objeto de sesión se ha cerrado (), es imposible usarlo*//*session = mybatisutils.getSession (); user = session.selectone (declaración, 1); system.out.println (user);*//*2. Las condiciones de consulta son las mismas*//*user = session.selectone (declaración, 2); system.out.println (usuario);*//*3. Session.cLearCache () no se ha ejecutado para limpiar el caché*//*session.cLearcache (); user = session.selectone (declaración, 2); system.out.println (user);*//*4. No se han agregado, eliminado y modificado (estas operaciones limpiarán el caché)*//*session.update ("com.atguigu.mybatis.test8.usermapper.updateuser", nuevo usuario (2, "usuario", 23)); user = session.selectone (declaración, 2); system.println (usuario);*/}9.3. Míbatis nivel 2 caché
9.3.1. Agregue un <cache> en usermapper.xml
<mapper namespace = "com.atguigu.mybatis.test8.usermapper"> <cache/>
9.3.2. Pruebas
/** Test Nivel 2 Cache*/@TestPublic Void testCache2 () {string Declaration = "com.atguigu.mybatis.test8.usermapper.getuser"; sqlsession session = myBatisutils.getSession (); usuario user = session.selectone (declaración, declaración, 1); session.commit (); System.out.println ("user ="+user); sqlsession session2 = mybatisutils.getSession (); user = session2.selectone (declaración, 1); session.commit (); system.println ("user2 ="+user);}9.3.3. Notas complementarias
1. Todas las declaraciones de selección en el archivo de la declaración de asignación se almacenarán en caché.
2. Mapee todo lo que inserte, actualice y elimine las declaraciones en el archivo de instrucción actualizará el caché.
3. El caché se volverá a jugar con el algoritmo menos utilizado recientemente (LRU, el menos recientemente usado).
4. El caché se actualizará de acuerdo con el intervalo de tiempo especificado.
5. El caché almacenará 1024 objetos
<cacheEviction = "fifo" // La estrategia de reciclaje es la primera entrada, First-Out FlushInterval = "60000" // Tiempo automático de actualización 60SSIZE = "512" // caché hasta 512 objetos de referencia Readonly = "True" // solo leer solo
10. Spring Integration mybatis
10.1. Agrega jarra
【Mybatis】
mybatis-3.2.0.jar
mybatis-spring-1.1.1.Jar
log4j-1.2.17.Jar
【primavera】
Spring-AOP-3.2.0.Release.Jar
Spring-Beans-3.2.0.Release.Jar
Spring-Context-3.2.0.Release.Jar
Spring-Core-3.2.0.Release.Jar
Spring-Expression-3.2.0.Release.Jar
Spring-JDBC-3.2.0.Release.Jar
prueba de primavera-3.2.4.release.jar
Spring-TX-3.2.0.Release.Jar
AOPALLIANCE-1.0.JAR
CGLIB-NODEP-2.2.3.JAR
Commons-logging-1.1.1.Jar
【Paquete de controlador MySQL】
MySQL-Connector-Java-5.0.4-Bin.Jar
10.2. Tablas de base de datos
Crear tabla S_USER (user_id int Auto_incement Key primario, user_name varchar (30), user_birthday date, user_salary double)
10.3. Clase de entidad: usuario
Usuario de clase pública {private int id; name de cadena privada; cumpleaños de fecha privada; salario doble privado; // set, get método}10.4.DAO Interfaz: Usermapper (xxxmapper)
interfaz pública usermapper {void save (usuario de usuario); ovoid Update (usuario de usuario); void delete (int id); user findByid (int id); list <serer> findAll ();}10.5.SQL Mapeo Archivo: usermapper.xml (el mismo nombre que la interfaz ignora el mayúscula y la mayúscula)
<? 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 = "com.atguigu.mybatis.test9.usermapper"> <resultmap type = "user" id = "userResult"> <resultado column = "user_id" propiedad = "id"/> <resultado column = "user_name" propiedad = "nombre"/> <<ruming "/" saleRy "/" propiedad "/" Resultado "Resultado" Property "Property" Property "Property" SALURY " columna = "user_salary" propiedad = "salario"/> <resultmap> <!-Obtenga la ID después de insertar datos-> <insertar id = "salvar" keycolumn = "user_id" keyproperty = "id" useGeneratedKeys = "true"> Insertar en S_USER (user_name, user_birthday, user_salary) valores ( #{name}, #{birtheray}, #{salary}) </sert> <update id = "update"> update s_userset user_name = #{name}, user_birthay = #{cumpleaños}, user_salario = #{salary} #{id} </update> <eliminar id = "eliminar"> Eliminar de s_userwhere user_id = #{id} </elete> <select id = "findByid" resultmap = "userResult"> select *de s_userwhere user_id = #{id} </select> <select iD = "findall" resultmap = "userResult" de select *de select *de *from *from *de * S_USER </select> </mapper>10.6. Archivo de configuración de la inspring: frijoles.xml
<? xml versión = "1.0" encoding = "utf-8"?> <frijoles xmlns = "http://www.springframework.org/schema/Beans" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" "" xmlns: contexte = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.springframework.org/schema/tx" xsi: schemalocation = "http: //www.sspringfr amework.org/schema/Beansshttp://www.springframework.org/schema/Beans/spring-Beans-3.2.xsdhttp://www.springframework.org/schema/context/sprin G-Context-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! 1. valor = "jdbc: mysql: // localhost: 3306/mybatis"/> <propiedad name = "username" value = "root"/> <propiedad name = "contraseña" value = "root"/> </bean> <!-2. Fábrica de sqlsession de MyBatis: sqlSessionFactoryBeandataSource/typealiasespackage-> <bean id = "sqlsessionFactory"> <propiedad name = "dataSource" ref = "dataSource"/> <Property name = "typealIsespackage" value = "com.atigu.spring_mybatis2.Mydomain"/</</behera 3.-3.-3. MyBatis escanea automáticamente para cargar archivos de mapeo SQL: MappersCannerConfigurersqlSessionFactory/BasePackage-> <Bean> <Property Name = "BasePackage" valor = "com.atigu.spring_mybatis2.mapper"/> <name de propiedad = "sqlSessionFactory" ref = "sqlsession"/> </> </4. Gestión: DataSourCetransactionManager-> <bean id = "txManager"> <Property name = "dataSource" ref = "dataSource"/> </bean> <!-5. Use la transacción declarativa-> <tx: transacción-maneger-maneger de anotación = "txManager"/> </-behors>
10.7. Archivo de configuración de Mybatis: mybatis-config.xml
<? xml versión = "1.0" encoding = "utf-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" <1. innecesario-> <!-Establecer archivo de configuración externa-> <!-Establecer un nombre de categoría-> <!-Establecer el entorno de conexión de base de datos-> <!-Archivo de asignación-> </Configuración>
10.8. Prueba
@RunWith (SpringJUnit4ClassRunner.class) // Use SpringTest Test Framework @ContextConfiguration ("/Beans.xml") // Cargue la configuración de la clase pública Smtest {@AUTOWIREDIREDIREDIREDIRS Date ()); user.setName ("Mary"); user.setsalary (300); usermapper.save (user); system.out.println (user.getid ());}@testpublic void update () {user user = usermapper.findbyid (2); user.setsalary (2000); usermapper.update (user); delete () {usermapper.delete (3);}@testPublic void findByid () {user user = usermapper.findbyid (1); system.out.println (user);}@testPublic void findAll () {list <ser user> users = usermapper.findall (); system.out.println (}}}}}}}}Lo anterior es la rápida introducción a MyBatis (análisis conciso y simple y fácil de entender) introducida por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!