Java Note

Cadrul Ibatis Datamapper (cunoscut și sub numele de SQL
Hărți) vă permite să reduceți în mod semnificativ codificarea pe
Java pentru o aplicație care gestionează baza de date relațională.
Poate că prima impresie pe care o are este că este aceeași cu hibernatul (care este o cartografiere a obiectelor cu plăci
relaționale – ORM). Ibatis este diferit. După cum vom vedea în acest tutore, ibats hărți SQL interogări și vă permite să interacționați cu JavaBeans, precum și parametrii de intrare și ieșire.

Mâini pentru a lucra

Pentru a începe, vom obține cadrul de la pagina | ASF: http://ibatis.apache.org/
dosarul pe care îl vom descărca (IBATIS_DBL-2.1.7.XX. zip) Contect
trei fișiere. În acest tutore vom folosi numai Ibatis-comun-2.jar și ibatis-sqlmap-2.jar. Nu aveți nevoie de niciun alt .Jar, cel puțin pentru acest capitol.

Definirea structurii datelor

Vom crea Javabean Categorie cu structura
.

package com.jugperu.tutores.ibatis.beans;
public class Categoria {
private int id; // podemos utilizar tipos de datos nativos
private String nombre;
/*... poner sus respectivos métodos
setXX() y getXX() para que tenga el
patrón JavaBean (value object)*/
}

De asemenea, trebuie să creăm baza noastră de date. Putem folosi orice motor; Firește, vom avea nevoie de șoferul dvs. respectiv.

Vom crea categoria noastră de masă, care va avea următoarea structură:

cat_name

Varchar (30)

cat_id

Autonameric (Key Main)

După cum puteți vedea, am pus nume de alte câmpuri decât proprietățile Javabeanului nostru. Vom vedea ca în Ibatis putem asocia fiecare coloană cu proprietatea sa pe obiecte.

Configurarea conexiunii la baza de date de la aplicația noastră

vom Creați fișierul bazei de date.Properties în pachet
com.jugperu.tutores.ibatis.rources, care va avea următoarele valori:

#el driver de nuestra base de datos
jdbc.driver=org.hsqldb.jdbcDriver
#el url para nuestra conexion.
jdbc.url=jdbc:hsqldb:file:data/productos.hsqldb
#el usuario
jdbc.username=sa
#y la contraseña
jdbc.password=

Vom crea fișierul sqlmapconfig.xml care va avea următorul conținut:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="com/jugperu/tutores/ibatis/resources/database.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${jdbc.driver}"/>
<property name="JDBC.ConnectionURL" value="${jdbc.url}"/>
<property name="JDBC.Username" value="${jdbc.username}"/>
<property name="JDBC.Password" value="${jdbc.password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/jugperu/tutores/ibatis/resources/Almacen.xml"/>
</sqlMapConfig>

atributul „resursă” de la Elementul „Proprietăți”
Trebuie să indicați locația fișierului .properties pe care tocmai l-am creat. Trebuie să fie în funcție de clasele noastre de
. Dacă vrem să folosim o locație care depășește domeniul de aplicare al aplicației, vom folosi atributul „URL”.

 <properties url="file://c:/proyecto/database.properties"/>

Vedem că proprietățile conexiunii (elemente < ABC6C03176 „> ) Utilizați variabile cum ar fi $ {JDBC .DRiver}. Acest lucru se datorează faptului că utilizați valorile fișierele noastre
Baza de date.Properties. Fișierul SQLMAPCONFIG.XML numai
Puteți utiliza un fișier .properties pentru aceste cazuri.

iv id = „389630F449″ 389630F449 ” sqlmap / > Puncte la un fișier
Depozitare.xml. Acest fișier îl va descrie mai jos .
că Proprietăți / > poate fi specificat pentru a indica o resursă care este în afara domeniului de aplicare al aplicației.

Celelalte elemente ale acestui .xml va detalia-l în următorul capitol.

Definirea hărții CO NSULTS.

Vom crea fișierul de stocare în como.jugperu.tutores.ibatis.rescources, care va avea următorul conținut

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="almacen">
<typeAlias type="com.jugperu.tutores.ibatis.beans.Categoria" alias="categoria"/>
<insert parameterClass="categoria">
insert into CATEGORIA
(cat_nombre)
values (#nombre#)
</insert>
<select resultClass="categoria" parameterClass="int">
select cat_id as id, cat_nombre as nombre
from categoria
where cat_id=#value#
</select>
</sqlMap>

Vom detalia conținutul acestui .xml:

Tystealias / > ne va permite să descriem un alias pentru a evita scrierea unui nume de clasă lungă. În acest caz, în loc de a scrie
„com.jugperu.tutores.ibatis.beans.category”
Vom folosi „categoria”

Vedem că are elemente pe care le au se poate asocia rapid cu declarațiile SQL. Toate aceste elemente au atributul „ID”. Acest lucru ne va permite să identificăm fiecare dintre ele.
Vom detalia structura fiecăruia:

Acest element primește ca un parametru un obiect al cărui tip este definit în atributul „RestriclSlass”. Ca numele complet al clasei noastre este foarte lung, avem Definiți un alias cu < Tystealias / >. Prin urmare, tipul de Parametru
este com.jugperu.tutors.ibatis. Beass.Category.

Comanda Insert trebuie să salveze relația cu sintaxa motorului pe care o utilizați.Valorile închise în semne numerice
(#) se referă la proprietățile obiectului primit ca parametru.

Selectați > primește ca un parametru O valoare numerică „INT” și returnarea returnează un obiect „categorie” tip. Parametrul „int”
este un alias predefinit al clasei java.lang.integer. De

Invocarea acestei declarații SQL vom trece ca parametru la un obiect integer.

 <select resultClass="categoria" parameterClass="int">
select cat_id as id, cat_nombre as nombre
from categoria
where cat_id=#value#
</select>

în acest element are o declarație SQL în cazul în care câmpurile care sunt selectate au un alias. Asta este, câmpul Cat_ID are ca și alias ” Id „, și cat_name are ca alias” nume „.
În acest fel, Ibatis va plasa fiecare domeniu al rezultatelor rezultate și le plasează în proprietățile lor respective pe Agendame.

Test Programul

Cea mai bună modalitate de a face un program de testare utilizează o testare a anunțului în jalit. Vom crea testul nostru
Apelându-l IBATSMAPSTESTS și va avea următoarele metodă de configurare
()

 Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
// el .xml para la conexión
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
//construye el manejador de llamadas al iBatis

59d736b314 „>

Vom face, de asemenea, un test pentru a obține un obiect.

 public void testGetCategoriaPorId() throws SQLException {
try {
sqlMap.startTransaction();
Categoria c1 = (Categoria) sqlMap.queryForObject(
"getCategoriaPorId", Integer.valueOf(2));
assertNotNull(c1);
mostrar(c1);
} catch (SQLException ex) {
ex.printStackTrace();
assertTrue(false);
} finally {
sqlMap.endTransaction();
}
}
private static void mostrar(Categoria cat) {
System.out.println(cat.getId() + "\t" + cat.getNombre());
}

Tastele auto-generate

Metoda „Insert” SQLMAP returnează un obiect
care conține valoarea noii cheie generate (dacă este cazul). Dar, în exemplul nostru, valoarea pe care o returnează este nulă, deși
am declarat că cheia primară este Autonumérica. Ibatis
Nu veți ști niciodată ce este valoarea dacă nu punem pe instrucțiunea SQL ce valoare trebuie să vă întoarceți.

Noi editați Storage.xml pe
< inserați > În așa fel încât să se uite din următorul mod.

...
<insert parameterClass="categoria">
insert into CATEGORIA
(cat_nombre)
values (#nombre#)
<selectKey resultClass="int">
select distinct identity() as id
from categoria
</selectKey>
</insert>
...

Aceasta este propoziția pentru HSQLDB, care este motorul utilizat în acest sens și exemplu. Pentru MySQL comanda SQL care este în interiorul
iv id = „389630F449” Selectkey > ar trebui să fie:

...
<selectKey resultClass="int">
select last_insert_id() as id
</selectKey>
...

SQL Server:

divid id = „AE748CCEC2”>

Gestionarea rezultatelor

Definirea rezultatelor Hartă

Am văzut că să asocieze toate domeniile unei interogări A
Proprietățile Javabean, fiecare dintre acestea trebuie să aibă un aliah.
care pot fi o mare problemă, deoarece, dacă ar fi despre mai multe domenii, ar trebui să punem mai multe „ca” pentru fiecare. Și dacă au existat mai multe declarații SQL, noi, de asemenea,

Poate fi problematică pentru a face o modificare.

Ibatis ne permite să creăm o hartă de rezultat. Există: putem defini asociația că vom folosi între proprietățile obiectului și câmpurile interogării .

Pentru a face acest lucru, vom adăuga următorul articol în stocare.xml

 <resultMap class="categoria">
<result property="id" column="cat_id"/>
<result property="nombre" column="cat_nombre"/>
</resultMap>

De fiecare dată când folosim ca rând TA „Categoria Res”,
Ibatis va fi responsabilă pentru crearea unei instanțe de „categorie” și puneți valorile fiecărei coloane pe fiecare proprietate care este utilizată.

Vom adăuga o nouă interogare:

 <select resultMap="res-categoria">
select *
from categoria
</select>

După cum puteți vedea, nu mai este necesar să plasați un alias pentru fiecare câmp .

și vom crea un test nou pentru al testa:

 List lista = sqlMap.queryForList("getAllCategoria", null);
for (Iterator iter = lista.iterator(); iter.hasNext(); ) {
Categoria cat = (Categoria) iter.next();
mostrar(cat);
}

rezultate fără javabeans

Nu vom folosi neapărat un JavaBean pentru a obține un rezultat pentru un rezultat. Putem folosi un java.util.hashmap pentru a obține toate câmpurile unei interogări. Fiecare cheie va fi numele câmpului, iar valoarea acestuia va fi valoarea asociată.

 <resultMap class="java.util.HashMap">
<result property="id" column="cat_id"/>
<result property="nombre" column="cat_nombre"/>
</resultMap>
...
<select resultMap="res-map-categoria">
select *
from categoria
where cat_id=#value#
</select>

Obiectul returnat de QueryForobject () va fi clasic clasic java.util.hashmap.

 HashMap map = (HashMap) sqlMap.queryForObject(
"getMapCategoriaPorId", Integer.valueOf(1));

, prin urmare, am putea construi o interogare cu diverse servicii Fields, fără a vă îngrijora de structura care se va întoarce.

Putem obține și un singur câmp pe o listă.

 <resultMap class="java.lang.String">
<result property="nombre" column="cat_nombre"/>
</resultMap>
...
<select resultMap="res-categoria-nombre">
select *
from categoria
</select>

și fiecare obiect din lista obținută de la QueryForlist () va fi un java.lang.string.

 List lista = sqlMap.queryForList("getNombresCategoria", null);

naturally, noi Ar putea crea o interogare care are ca obiect hashmap și îl invocă cu un QueryForlist (). Rezultatul va fi o listă în care fiecare element va fi un hashmap.

Gestionarea parametrilor

Ibatis vă permite să definiți parametrii care vor primi consultări. Structura sa este foarte asemănătoare cu rezultatele. Pentru aceasta vom folosi o java.util.map.
Fiecare cheie va fi accesată ca și cum ar fi o proprietate a unui Javabean

 <update parameterClass="java.util.Map">
update categoria
set cat_nombre=#nombre#
where cat_id=#id#
</update>

Asociații

Una dintre principalele probleme ale gestionării bazei de date
Relațiile care utilizează obiecte este asocierea dintre tabele.

Crearemos Una Tabla Productor:

divid id = „b313371760”>
iv id = „91079Fd1ed Tipo

pr_id

Autonumérico (CLAVE Principal)

r_nombre

Varchar (30)

PR_PRECIO

zecimal

r_stock Pr_stock Pr_stock Pr_stock Pr_stock

Numérico entero

Pr_categoria

Numérico No Nulo (clave Foránea de Categoria)

iv id = „82b7a2c808”

Crearemos el javabean con Sus Resisivas Propiedade:

divid id = „79378347d9”>

Agregando Un Registro

crearemos un inserat > Para Manejar La Insertos a la Tabla.

 <typeAlias type="com.jugperu.tutores.ibatis.beans.Producto" alias="producto"/>
//...
<insert parameterClass="producto">
insert into producto
(pr_nombre,pr_stock,pr_precio,pr_categoria)
values (#nombre#,#stock#,#precio#,#categoria.id#)
</insert>

Notă Cómo SE Accede un UNA PROPEDAD DE PRODUCTO
que es de clase Categoria. En Caso Que La Propiedad
Categoria Fuera Nulo, Ibatis Toma Toda La Expresie
(categoria.id) Como Nulo.

Probamos inserat un objeto produs:

 Categoria cat = (Categoria) sqlMap.queryForObject(
"getCategoriaPorId", Integer.valueOf(1));
Producto p1 = new Producto();
p1.setNombre("Kingston");
p1.setPrecio(300.50);
p1.setStock(5);
p1.setCategoria(cat);
sqlMap.insert("insertProducto", p1);

ES NECESARIO RECALCAR QUE IBATIS NU AGREGA AUTOMÁTHATENTE LOS
Objetos Asociados Que nu există. Es Decid, Si SE
Creatul Un Ogjeto Categoria Y SE ASOCIA Un nuevo Objeto De

/ P>

Obteniendo Un Registro

Para Obtener ONUADRO MAPEADO EN
OBJETO, AL IV ID = „389630F449” RESULTMAP > SE AGENGARA ONE ATRIBUTO
MÁS:

 <resultMap class="producto">
<result property="id" column="pr_id"/>
<result property="nombre" column="pr_nombre"/>
<result property="stock" column="pr_stock"/>
<result property="precio" column="pr_precio"/>
<result property="categoria" column="pr_categoria" select="getCategoriaPorId"/>
</resultMap>

Como se ve, para la PropiedAd Categoria Se Tomará El
Campo Pr_Categoria y SE Bugercará Su Valor Del Select
GetCategoriaporid. Al Hers Esto, SE Invocará un Dicho
Selectare y Se Le Pasará Como Parámetro El Pasará Como Parámetro El Pasará Como Parámetro El Pasará Como Parámetro El Pasará Como PARÁMETRO EL VALOR DE
PR_CATEGORIA OBTENIENDO EL OBJETO Corespontieră. Será Muy Simplu:

 <select resultMap="res-producto">
select *
from producto
where pr_id=#value#
</select>

Manejando:

 Producto p = (Producto) sqlMap.queryForObject("getProductoPorId",
Integer.valueOf(1));
mostrar(p); //muestra cada campo del objeto "p”
//.....
private static void mostrar(Producto p) {
System.out.println(p.getId() + "\t" + p.getNombre() + "\t" +
p.getPrecio() + "\t" + p.getStock() + "(" +
p.getCategoria().getNombre() + ")");
}

PERRO ESTA SOLUCIÓN TIENE UNA DEFICIENCIA: Para Obtener ONU
Productor, Ibatis Hará Dos Consultas: Uno para el Productor Y
Otro para la categoría. Si Fueran Varios Productos, Hará
UNA CONSULTA POR LODOS Y N CONSULTAL POR CADA PRADO Para
OBTENER SU Categoria.

ESTO SE PUDE SUBUCIONAR HACIENDO ONU A se alătura Modificando El
< rezultat iv id = „abc6c03176” .

 <resultMap class="producto">
<result property="id" column="pr_id"/>
<result property="nombre" column="pr_nombre"/>
<result property="stock" column="pr_stock"/>
<result property="precio" column="pr_precio"/>
<result property="categoria.id" column="pr_categoria"/>
<result property="categoria.nombre" column="cat_nombre"/>
</resultMap>
....
<select resultMap="res-producto-opt">
select *
from producto p, categoria c
where p.pr_categoria=c.cat_id
</select>

Concluzii

con iobatis se puede mapear las consultas ol necesitamos para
Nuestro Proyecto. La Sintaxis Que Setile Para Manejar Los
Registos de la baza de datorie Está Fuertemente Aislada en La
Lógica de Negocio. Esto Nos Permite Tener Un Código
Limpio de Sentenciias SQL. SI ES NECESARIO HACKER ALGUNA Modificación
en sql, Bastará con Editar El Xml Y No UNA CLASE RO Java
Evitando La Compilación De Esta.

Leave a Comment

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *