1. Introdução a Mybatis
Mybatis é uma excelente estrutura de camada de persistência que suporta consultas SQL simples, procedimentos armazenados e mapeamento avançado.
O MYBATIS elimina as configurações manuais de quase todo o código e parâmetros JDBC e o encapsulamento de pesquisa do conjunto de resultados.
O Mybatis pode usar XML simples ou anotações para configuração e mapeamento bruto, interfaces de mapeamento e POJOS de Java (objetos Java antigos simples) para registros no banco de dados.
JDBC -> DBUTILS (AUTO -ENCAPULENTE) -> MYBATIS -> Hibernate
O Mybatis grava SQL no XML e depois acessa o banco de dados.
2. Comece com Mybatis
2.1. Crie um novo projeto Java
Adicione Mybatis e MySQL Driver Jar: Mybatis-3.1.1.jar, MySQL-Connector-Java-5.1.7-bin.jar
2.2. Crie uma nova tabela
Criar banco de dados mybatis; use mybatis; crie usuários de tabela (id int a chave primária automática_increment, nome varchar (20), idade int); inserir em usuários (nome, idade) valores ('tom', 12); inserir nos usuários (nome, idade) ('jack', 11);2.3. Adicione o arquivo de configuração do mybatis conf.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id = "Development"> <transactionManager tipo = "jdbc" /> <dataSource type = "pooled"> <propriedade name = "driver" value = "com.mysql.jdbc.driver" /> <nome da propriedade = "url" value = "jdbc: mysql: // localHost: 3306 /mybatis" " name = "senha" value = "root"/> </dataSource> </ambiental
2.4. Defina a classe de entidade correspondente à tabela
Public class Usuário {private Int ID; Nome da String Private; private Int Age; // Get, Set Method}2.5. Defina o arquivo de mapeamento SQL UserMApper.xml que opera a tabela de usuários
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.atguigu.mybatis_test.test1.userMapper"> <select id = "getUser" parametertype = "int" resulttype = "com.atguigu.mybatis_test.test1.user"> selecione * Where Id =#{id} </select>2.6. Registre o arquivo UsermApper.xml no arquivo conf.xml
<Mappers> <Mapper Resource = "com/atgugugu/mybatis_test/test1/userMApper.xml"/> </mappers>
2.7. Código de teste de escrita: Executar declarações de seleção definida
Public class Test {public static void main (string [] args) lança IoException {String Resource = "conf.xml"; // carrega o arquivo de configuração de mybatis (também carrega o arquivo de mapeamento associado) leitor leitor = resources.getResourceasReader (recurso); SqlSessionFactoryBuilder (). Build (leitor); // Crie uma sessão SQLSessionsqlSession que pode executar o SQL no arquivo de mapeamento = sessionFactory.opensssion (); // mapeando sql identificação string string instrutation = "com.atguruer.mybatis.bean.USApper SQLUSER User = session.SelectOne (Declaração, 1); System.out.println (Usuário);}}3. Opere a tabela Crud of the Usuários
3.1.xml Implementação
3.1.1. Defina o arquivo XML de mapeamento SQL:
<insert id = "insertUser" parametertype = "com.atguigu.ibatis.bean.user"> inserir nos usuários (nome, idade) valores (#{name},#{Age}); </insert> <delete id = "DeleteUser") ParameterType = "com.atguigu.ibatis.bean.user"> Atualizar usuários Defina o nome =#{name}, Age =#{Age} onde id =#{id} </atualize> <select id = "selectUser" ParameterType = "Resultstype =" com.atgugu.ibatis " id =#{id} </select> <select id = "selectAllUsers" resultType = "com.atguigu.ibatis.bean.user"> selecione * dos usuários </leclect>3.1.2. Registre este arquivo de mapeamento em config.xml
<Mapper Resource = "com/atguigu/ibatis/bean/userMapper.xml"/>
3.1.3. Chamado em Dao
Usuário público getUserById (int id) {SQLSession Session = sessionFactory.opensssion (); usuário do usuário = session.SelectOne (URI+". SelectUser", id); return user;}3.2. Implementação de anotações
3.2.1. Defina a interface para mapeamento SQL
interface pública Interface UserMApper {@insert ("Inserir nos usuários (nome, idade) valores (#{nome},#{Age})") public int InsertUser (usuário do usuário);@delete ("excluir de usuários em que id =#{id}") public int deLeteUSerById (intvie);@atualize####{#{} {})) public int deLeteUSerById (intvie);@atualize####{##{}) id =#{id} ") public int updateUser (usuário do usuário);@Select (" Selecione * FROM Usuários onde id =#{id} ") User public user getUserById (int id);@select (" selecione * FROM USUERS ") LISTA Public <suser> getAllUser ();}3.2.2. Registre esta interface de mapeamento na configuração
<Mapper/>
3.2.3. Chamado em Dao
Usuário público getUserById (int id) {sqlSession session = sessionFactory.opensession (); UserMApper mapper = session.getMapper (userMapper.class); usuário user = mappper.getUserById (id); retornar usuário;}4. Vários lugares que podem ser otimizados
4.1. A configuração para conectar -se ao banco de dados pode ser colocada em um arquivo de propriedades separadamente.
## db.properties <br> <Properties Resource = "db.properties" /> <propriedade name = "driver" value = "$ {driver}" /> <names name = "url" value = "$ {url}" /> <nome da propriedade = "username" "=" $ {username} " />4.2. Definir alias para classes de entidade e simplificar referências em arquivos XML de mapeamento de SQL
<TypeAliases> <typeAlias type = "com.atguigu.ibatis.bean.user" alias = "_ user"/> </typealiases>
4.3. Você pode adicionar arquivo de configuração log4j no SRC para imprimir informações de log
1. Adicione jar:
log4j-1.2.16.jar
2.1. log4j.properties (Método 1)
log4j.properties, log4j.rootLogger = debug, console#consolelog4j.appender.console = org.apache.log4j.consoleappenderLog4j.appender.console.ApPender.ApnOnPender.ApnOnPender.ApnOnpPern.Ponsol.AppANDOPNEPRONG4J.LAYOUT = Orgache.Log4j.PathernlaTlog4Jog4JOG4J.Layout = orgache.lonsolsOlOoutnOoutNoG4Jog4j.AppANDOG4J.Layout = Orgache.Log4j.PathernlaTlog4Jog4JOG4J. %-5p [ %c] - %m%nlog4j.logger.java.sql.resultset = infecolog4j.logger.org.apache = infecolog4j.logger.java.sql.connection = dencugug4j.logger.java.sql.statement = dencugurg4j.logger.java.sql.statement = Debuglog4J.Logger
2.2. log4j.xml (método 2)
<? xml versão = "1.0" coding = "utf-8"?> <! DOCTYPE LOG4J: Sistema de configuração "log4j.dtd"> <log4j: configuração xmlns: Log4j = "http://jakarta.apache.org/Log4j/"> <pnder> <pnder Names = stonatsnatsnats) value = "%-5p%d {mm-dd hh: mm: ss, ss}%m (%f:%l) /n" /> </sayout> </ppender> <name logger = "java.sql"> <nível de value = "depurno" /> < /logger> <logger name = "oug.apache.ibtis =" Depury " /> < /logger> <logger =" ORG.APACHAT.IBTOTIS = "Depury> /> < /logger> <somic> <nível value = "debug" /> <appender-ref ref = "stdout" /> < /root> < /log4j: configuração>5. Resolva conflitos entre nomes de campos e nomes de atributos de classe de entidade
5.1. Prepare mesas e campos
Criar ordens da tabela (order_id int primário Auto_increntle, order_no varchar (20), ordem do Order_price); inserir em pedidos (order_no, order_price) valores ('aaaa', 23); insert em ordens (order_no, order_price) ('bbbb', 33); 22);5.2. Definir classes de entidade
Public classe Ordem {private Int ID; Private String OrderNo; Private Float Price;}5.3. Implementar a consulta do getOrderById (ID):
Método 1: Definir alias nas instruções SQL
<select id = "selettorder" parameterType = "int" resultype = "_ order"> selecione order_id id, order_no orderno, order_price preço de pedidos onde order_id =#{id} </select>Método 2: Através de <sultmap>
<select id = "SelectorerResultMap" parameterType = "int" resultMap = "OrderResultMap"> Selecione * FROM ORDERS WHERE ORDEM_ID =#{id} </select> <resultMap type = "_ Order" ID = "OrderResultMap"> <ID) Property = "Price" Column = "Order_price"/> <Result Property = "Price" Column = "Order_price"/> <ResultMap>6. Implementar a consulta da tabela de associação
6.1. Associação individual
6.1.1. Propor requisitos
Informações da aula de consulta com base no ID da classe (informações com professor)
6.1.2. Crie tabelas e dados
Crie o professor de tabela (t_id int primário Auto_increment, t_name varchar (20)); Crie a classe de tabela (c_id int a chave primária Auto_increme, c_name varchar (20), professor_id int); altere a classe de tabela de tabela restrição fk_teacher_id chave (professora_id) professor (t_id); Inserir no professor (t_name) valores ('ls1'); inserir no professor (t_name) valores ('ls2'); inserir na classe (c_name, professor_id) valores ('bj_a', 1); inserir na classe (c_name, professor_id) ('bj_b', 2);6.1.3. Definir aulas de entidade:
Public Class Professor {private Int ID; Nome de String Private;} Classes de classe pública {Private Int ID; Nome de String Private; Professor Privado;}6.1.4. Defina o arquivo de mapeamento SQL Classmapper.xml
Método 1: Resultados aninhados: Use mapas de resultado aninhados para processar um subconjunto de resultados da junta duplicados Selecionar * da classe C, Professor T, Student s, onde C.teacher_id = t.t_id e c.c_id = s.class_id e c.c_id = 1-> <select ID = "getClass3" ParameterTe = "int" Map. c.teacher_id = t.t_id e c.c_id = s.class_id e c.c_id = 1-> <select id = "getClass3" parameterType = "int" resultMap = "ClassResultMap3"> selecione * da classe C, professor t, Student s c.c_id =#{id} </select> <resultado Property = "Nome" Column = "T_NAME"/> <Result Property = "Name" Column = "T_Name"/> </Association> <!-OFTYPE Especifica o tipo de objeto na coleção dos alunos-> <Coleção de propriedade = "estudantes" de "_luster"> <Id Property = "Id" Column = "S_id"/> Column = "S_NAME"/> </Coleção> </ResultMap> <!-Método 2: Consulta aninhada: Retorne o tipo de complexo esperado executando outra instrução de mapeamento SQL Selecione * da classe em que C_ID = 1; selecione * Campo de field em que T_ID id = "getClass4" parameterType = "int" resultmap = "classResultMap4"> selecione * da classe onde c_id =#{id} </select> <resultado column = "professor_id" javatype = "_ professor" select = "getTeacher2"> </association> <coleção de propriedade = "estudantes" ofttype = "_ student" column = "c_id" select = "getStudent"> </coletor> </resultMap> <select id = "getTeacher2" ParameterTypy " Do professor onde t_id =#{id} </select> <select id = "getStudent" parameterType = "int" resultType = "_ Student"> selecione S_ID ID, s_name Nome do aluno onde class_id =#{id} </select>6.1.5. Teste
@Testpublic void testo () {sqlSession sqlSession = factory.opensssion (); classes c = sqlSession.SelectOne ("com.atguigu.day03_mybatis.test5.oomapper.getclass", 1); system.out.println (c);}; = Factory.opensssion (); Classes C = sqlSession.SelectOne ("com.atguigu.day03_mybatis.test5.oomapper.getclass2", 1); System.out.println (c);}6.2. Associação One-Para-Many
6.2.1. Propor requisitos
Consulte as informações de classe correspondentes de acordo com a Classid, incluindo alunos e professores
6.2.2. Crie tabelas e dados:
Criar tabela aluno (s_id int a chave primária Auto_increment, s_name varchar (20), class_id int); inserir no aluno (s_name, class_id) valores ('xs_a', 1); insert no aluno (s_name, valores de classe ('xb),' 1); insert (s_name, s_name, class_id) ('xb', '1); insert (s_name, estudante (s_name, classe_id) valores ('xs_d', 2); inserir no aluno (s_name, classe_id) valores ('xs_e', 2); inserir no aluno (s_name, classe_id) ('xs_f', 2);6.2.3. Definir classes de entidade
Public Class Student {private Int ID; Nome de String Private;} Classes de classe pública {Private Int ID; Nome de String Private; Professor Privado; Lista Privada <Student> Alunos;}6.2.4. Defina o arquivo de mapeamento SQL Classmapper.xml
Método 1: Resultados aninhados: Use mapas de resultado aninhados para processar um subconjunto de resultados da junta duplicados Selecionar * da classe C, Professor T, Student s, onde C.teacher_id = t.t_id e c.c_id = s.class_id e c.c_id = 1-> <select ID = "getClass3" ParameterTe = "int" Map. c.teacher_id = t.t_id e c.c_id = s.class_id e c.c_id = 1-> <select id = "getClass3" parameterType = "int" resultMap = "ClassResultMap3"> selecione * da classe C, professor t, Student s c.c_id =#{id} </select> <resultado Property = "Nome" Column = "T_NAME"/> <Result Property = "Name" Column = "T_Name"/> </Association> <!-OFTYPE Especifica o tipo de objeto na coleção dos alunos-> <Coleção de propriedade = "estudantes" de "_luster"> <Id Property = "Id" Column = "S_id"/> Column = "S_NAME"/> </Coleção> </ResultMap> <!-Método 2: Consulta aninhada: Retorne o tipo de complexo esperado executando outra instrução de mapeamento SQL Selecione * da classe em que C_ID = 1; selecione * Campo de field em que T_ID id = "getClass4" parameterType = "int" resultmap = "classResultMap4"> selecione * da classe onde c_id =#{id} </select> <resultado column = "professor_id" javatype = "_ professor" select = "getTeacher2"> </association> <coleção de propriedade = "estudantes" ofttype = "_ student" column = "c_id" select = "getStudent"> </coletor> </resultMap> <select id = "getTeacher2" ParameterTypy " Do professor onde t_id =#{id} </select> <select id = "getStudent" parameterType = "int" resultType = "_ Student"> selecione S_ID ID, s_name Nome do aluno onde class_id =#{id} </select>6.2.5. Teste
@Testpublic void testom () {sqlSession sqlSession = factory.opensssion (); classes c = sqlsession.leclectone ("com.atguigu.day03_mybatis.test5.oomapper.getclass3, 1); system.out.println (c); sqlSession = Factory.opensssion (); Classes C = sqlSession.SelectOne ("com.atguigu.day03_mybatis.test5.oomapper.getClass4", 1); System.out.println (c);}7. SQL dinâmico e consulta difusa
7.1. Requisitos
Implementar usuário de consulta multi-condição (nome da correspondência difusa, idade entre o valor mínimo especificado e o valor máximo).
7.2. Prepare o banco de dados e as tabelas
Criar tabela d_user (id int a chave primária Auto_increment, nome varchar (10), idade int (3)); inserir em d_user (nome, idade) valores ('tom', 12); inserir em d_user (nome, idade) valores ('bob', 13); inserir em d_user (nome, idade) valores ('jack', 18); 7.3.3ConditionUser (classe de entidade condicional de consulta) Nome da string privada; minagem privada Int; private int maxage;7.4. Classe de entidade da tabela do usuário
private int id; nome de string privado; private int Age;
7.5.userMapper.xml (arquivo de mapa)
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.atguigu.day03_mybatis.test6.UserMApper"> <select id = "getUser" parametertype = "com.atguigu.day03_mybatis.test6.conditionUser" resultType = "com.atguigu.day03_mybats6.ternbatiser" ResultType = "com.atguigu.day03_mybats6. idade> =#{minage} e idade <=#{maxage} <if test = 'name! = "%null%"'> e nome como#{name} </if> </select> </mapper>7.6.usertest (teste)
public class Usertest {public static void main (string [] args) lança IoException {Reader Reader = Resources.GetResourCeasReader ("conf.xml"); sqlsessionFactory SesstFactory = new SqlSessionFactoryBuilder (). Build (Opred); SqlSession = sqlSession = sqlSessionFactoryBuilder (). "com.atguigu.day03_mybatis.test6.userMapper.getUser"; list <suser> list = sqlSession.SelectList (Declaração, New ConditionUser ("%A%", 1, 12)); System.out.println (list);}}}}Tags SQL dinâmicas disponíveis em Mybatis
8. Chamando procedimentos armazenados
8.1. Fazer uma demanda
Consulte o número de homens ou mulheres, se a entrada for 0, as fêmeas de outra forma machos
8.2. Prepare tabelas de banco de dados e procedimentos armazenados:
Crie Tabela P_User (ID int Primária Chave Primária Auto_increment, Nome Varchar (10), Sex Char (2)); inserir em P_User (nome, sexo) valores ('a', "masculino"); inserir em p_user (nome, sexo) valores ('b', "feminino"); inserir em p_user (nome, sexo) valores ('c', "masculino"); #Create Procedimento armazenado (procure o número de machos ou fêmeas, se a entrada for 0, as fêmeas são de outra forma) delimiter $ Crie procedimento mybatis.ges_user_count (em sex_id int, out user_count integ) se com sexo; De mybatis.p_user onde p_user.sex = 'masculino' em user_count; end if; end; end;8.3. Crie a classe de entidade da tabela
Public class Usuário {Private String ID; Nome de String Private; sexo privado de String;}8.4.userMapper.xml
<Mapper Namespace = "com.atguigu.mybatis.test7.userMapper"> <!-Query recebe o número de homens ou mulheres. Se a entrada for 0, as fêmeas são de outro modo. id = "getCountMap"> <parâmetro de propriedade = "sex_id" mode = "em" jdbctype = "integer"/> <parâmetro de propriedade = "user_count" mode = "out" jdbctype = "inteiro" // </ameterMap> <//
8.5. Teste
Map <string, Integer> parammap = new hashmap <> (); parammap.put ("sex_id", 0); session.selectone (declaração, parammap); número inteiro userCount = parammap.get ("user_count"); system.out.println (userCount);9. cache mybatis
9.1. Entenda o cache mybatis
Assim como a maioria das estruturas de camadas de persistência, o Mybatis também fornece suporte para caches L1 e L2.
1 Cache de Nível 1: Cache local HashMap Com base no PerpetualCache, seu escopo de armazenamento é sessão. Após a descarga da sessão, todos os caches na sessão serão limpos.
2. O mecanismo do cache secundário é o mesmo do cache primário. Por padrão, ele também usa o PerpetualCache e o HashMap Storage. A diferença é que seu escopo de armazenamento é o Mapper (namespace) e pode personalizar a fonte de armazenamento, como o ehcache.
3. Para o mecanismo de atualização de dados do cache, quando um determinado escopo (namespaces de cache de cache de primeiro nível/namespaces de cache de segundo nível) é executado em operações C/U/D, todos os caches em seleções sob este escopo serão liberados por padrão.
9.2.Mybatis Nível 1 Cache
9.2.1. Consulta baseada na tarefa
Consulte o objeto de registro de usuário correspondente com base no ID.
9.2.2. Prepare tabelas e dados de banco de dados
Criar tabela c_user (id int a chave primária Auto_increment, nome varchar (20), idade int); inserir em c_user (nome, idade) valores ('tom', 12); inserir em c_user (nome, idade) valores ('jack', 11);9.2.3. Crie a classe de entidade da tabela
public class O usuário implementa serializável {private int id; nome da string privada; private int Age;9.2.4.userMapper.xml
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.atguigu.mybatis.test8.UserMApper"> <select id = "getUser" parameterType = "int" resultType = "_ CUSER"> selecione * c_userTy Where ID =#{id} </select> <atualização ID = "UpdateUser" ParameterType = cUs "{{id} </select> <atualização =" UpdateUser " AGE =#{AGE} onde id =#{id} </atualização> </mapper>9.2.5. Teste
/** Cache de nível 1: isto é, cache no nível da sessão (ligado por padrão)*/@testpublic void testCache1 () {SqlSession Session = mybatisutils.getSession (); String declaration = "com.atguigu.mybatis.test8.UserMApper.GeTUSER";; 1); System.out.println (Usuário); ** O cache de nível 1 será usado por padrão*//*user = session.SelectOne (Declaração, 1); System.out.println (User);*//*1. Deve ser a mesma sessão. Se o objeto de sessão foi fechado (), é impossível usá -lo*//*session = mybatisutils.getSession (); user = session.selectone (declaração, 1); system.out.println (usuário);*//*2. As condições de consulta são as mesmas*//*user = session.selectone (Declaração, 2); System.out.println (Usuário);*//*3. Session.clearcache () não foi executado para limpar o cache*//*session.clearcache (); user = session.selectOne (declaração, 2); system.out.println (user);*//*4. No operations that have been added, deleted and modified (these operations will clean up the cache)*//*session.update("com.atguigu.mybatis.test8.userMapper.updateUser",new User(2, "user", 23));user = session.selectOne(statement, 2);System.out.println(user);*/}9.3.Mybatis Nível 2 Cache
9.3.1. Adicione um <cache> em UserMapper.xml
<Mapper Namespace = "com.atguigu.mybatis.test8.userMapper"> <cache/>
9.3.2. Teste
/** Cache do Nível 2 do Teste 2*/@TestPublic void testCache2 () {String declaration = "com.atguigu.mybatis.test8.usermapper.getUser"; SQLSession Session = mybatisutils.getSession (); usuário usuário = session.selectone (instrução, declaração,, 1); session.Commit (); System.out.println ("user ="+User); SQLSession session2 = mybatisutils.getSession (); user = session2.SelectOne (Declaração, 1); session.Commit (); System.out.println ("User2 ="+User);}9.3.3. Notas suplementares
1. Todas as instruções selecionadas no arquivo de declaração de mapeamento serão armazenadas em cache.
2. Mapeie todas as instruções de inserção, atualização e exclusão no arquivo de instrução atualizará o cache.
3. O cache será julgado usando o algoritmo menos usado recentemente (LRU, o menos recentemente usado).
4. O cache será atualizado de acordo com o intervalo de tempo especificado.
5. O cache armazenará 1024 objetos
<cacheeviction = "fifo" // A estratégia de reciclagem é o primeiro in, o primeiro a sair de FlushInterval = "60000" // Tempo de atualização automático 60SSIZE = "512" // cache até 512 objetos de referência readOnly = "true" // Leia apenas
10. Integração da primavera mybatis
10.1. Adicione jar
【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
primavera-jdbc-3.2.0.release.jar
Spring-test -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
【MySQL Driver Package】
MySQL-Connector-Java-5.0.4-bin.jar
10.2. Tabelas de banco de dados
Crie a Tabela S_USER (User_ID int Auto_increntry Primária Chave, User_name Varchar (30), User_birthday Data, User_salary Double)
10.3. Classe de entidade: usuário
Public classe Usuário {private int id; nome da string privada; data privada aniversário; salário duplo privado; // set, get Method}10.4.Dao Interface: UserMApper (xxxmapper)
interface pública UserMApper {void Save (usuário do usuário); void update (usuário do usuário); void Delete (int id); Usuário findById (int id); list <suser> findAll ();}10.5.
<? xml versão = "1.0" coding = "utf-8"?> <! namespace = "com.atguigu.mybatis.test9.UserMApper"> <resultado Property = "Salário"/> <Result Column = "User_salary" Property = "Salário"/> <ResultMap> <!-Obtenha o ID após a inserção de dados-> <inserir id = "salvar" keycolumn = "user_id" keyProperty = "id" useGeneratedKeys = "True"> inser s_user (user_name, user_birthday, user_salary) valores ( #{name}, #{aniversário}, #{salary}) </insert> <update id = "update"> update s_userset user_name = #{name}, user_birthday = {{}, user_name = #{name}, user_} #{id} </atualize> <delete id = "delete"> exclua de s_userwhere user_id = #{id} </delete> <select id = "findbyid" resultmap = "userResult"> select *de s_userwhere user_id = # # # #} </select> <let = "encontrado" "e" S_USER </leclect> </papper>10.6.Spring File de configuração: beans.xml
<? xml versão = "1.0" coding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-innstance" xmlns: p = "" http./xmlschema-innstance "xmlns: p =" "http./xmlschema-innstance" xmlns: p = "" http./xmlschema-innstance "xmlns: p =" " "xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springfr Amework.org/schema/beanshttp://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.xsdhtp: //www.springframework.org/schema/spring-t--ti--3.2.xsd 1. Fonte de dados: DriverManagerDataSource -> <Bean id = "DataSource" class = "org.springframework.jdbc.dataSource.drivermanagerDataSource"> <nome da propriedade = "DriverClassName" Value = "com.mysql.jdbc.driver"/> value = "jdbc: mysql: // localhost: 3306/mybatis"/> <propriedade name = "nome de usuário" value = "root"/> <propriedade name = "senha" value = "root"/> </ean> <!-2. Mybatis 'SQLSession Factory: sqlSessionFactoryBeAndataSource/typeAliasespackage-> <bean id = "sqlSessionFactory"> <nome da propriedade = "DataSource" ref = "DATASOURCE"/> <Nome da propriedade = "typeAlIaSPackage" = "com.atigu.siSPRING"/> Nome = "typeAliaspackage" = "com.atigu.s. Mybatis Scans automaticamente para carregar arquivos de mapeamento SQL: MAPPERSCANNERCONFIGERERSQLSessionFactory/BasEpackage-> <Bean> <Nome da propriedade = "Basepackage" Value = "com.atigu.spring_mybatis2.Mapper <ession <ession)! Gerenciamento: DataSourCetransactionManager-> <Bean id = "txManager"> <propriedade name = "DataSource" ref = "DataSource"/> </ Bean> <!-5. Use transação declarativa-> <tx: transação de anotação-manager = "txmanager"/> </bans>
10.7.mybatis Arquivo de configuração: mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- After Spring integrates myBatis, this configuration O arquivo é basicamente desnecessário-> <!-Defina o arquivo de configuração externa-> <!-Defina um nome de categoria-> <!-Defina o ambiente de conexão do banco de dados-> <!-Mapeamento de arquivo-> </figuration>
10.8. Teste
@Runwith (springjunit4classrunner.class) // use Springtest Test Framework @ContextConfiguration ("/beans.xml") // carregar configuração public class smtest {@autowired // injetar private userMapper UsermApper; @TestPublic Void () {) 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.Delete (3);}@testPublic void findById () {Usuário UserrMApper.findbyid (1); System.out.println (user);}@testpublic void findall () {list <suser> = UsermApper.findall (); System.out.PrinNn ()O exposto acima é a rápida introdução ao mybatis (análise concisa e simples e fácil de entender) introduzida pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!