1. Introdução e configuração de mybatis+spring+mysql
1.1 Introdução a Mybatis
Mybatis é uma estrutura de camada de persistência que pode personalizar o SQL, procedimentos armazenados e mapeamentos avançados. Mybatis elimina a maior parte do código JDBC, a configuração de parâmetros manuais e a recuperação do conjunto de resultados. O Mybatis usa apenas XML e anotações simples para configurar e mapear tipos de dados básicos, interfaces de mapa e pojos para registros de banco de dados. Comparado com soluções ORM "um para o Hibernate e o Apache OJB, o MYBATIS é uma implementação" semi-automatizada "ORM.
O pacote JAR que precisa ser usado: mybatis-3.0.2.jar (pacote Mybatis Core). mybatis-spring-1.0.0.jar (combinado com a primavera).
Download Endereço:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2mybatis+Spring+MySQL Configuração simples
1.2.1 Construir o ambiente de primavera
(1) estabelecer um projeto da Web Maven;
(2) Adicione os arquivos de estrutura e configuração da mola;
(3) Adicione os pacotes JAR necessários (Spring Framework, Mybatis, Mybatis-Spring, Junit, etc.) ao pom.xml;
(4) altere os arquivos de configuração de web.xml e spring;
(5) Adicione uma página JSP e o controlador correspondente;
(6) teste.
Para referência: http://limingnihao.iteye.com/blog/830409. Construa o projeto Springmvc com o Maven do Eclipse
1.2.2 Estabelecendo o banco de dados MySQL
Estabeleça um banco de dados de gerenciamento de seleção de cursos de estudante.
Tabela: Tabela do aluno, tabela de aula, mesa do professor, tabela do curso, tabela do curso do aluno.
Relacionamento lógico: cada aluno tem uma aula; Cada classe corresponde a um professor de classe; Cada professor pode ser apenas o professor de turma de uma aula;
Use o seguinte SQL para criar um banco de dados, primeiro crie uma tabela de alunos e insira dados (mais de 2 itens).
Para mais SQL, faça o download do arquivo de origem do projeto no recurso/SQL.
/* Crie um banco de dados*/ crie banco de dados Student_manager; Use Student_Manager; / ***** Crie a tabela do aluno *****/ Crie a tabela student_tbl (Student_id Varchar (255) Chave primária, Student_Name Varchar (10) Não NULL, Student_sex Varchar (10), Data de Student_birthday, Class_id Varchar (255)); /*Insira dados do aluno*/ inserir em student_tbl (student_id, student_name, student_sex, student_birthday, classe_id) valores (123456, 'xxx', 'feminino', '1980-08-01', 121546)
Crie o arquivo de configuração mysql.properties usado para conectar -se ao MySQL.
jdbc.driverclassName = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // localhost: 3306/student_manager? user = root & senha = limingnihao & useunicode = true & caractere = utf-8
1.2.3 Construa o ambiente mybatis
O pedido é casual e o pedido atual é porque você pode modificar os arquivos escritos o mínimo possível.
1.2.3.1 Criar aula de entidade: StudentEntity
Classe public Studententity implementa serializável {private estático final serialversionuid = 3096154202413606831L; CLASSENTIDADE DE CLASSIFICAÇÃO PRIVADA; data privada StudentBirthday; Private String StudentID; String privado StudentName; Private String StudentSex; public ClassEntity getClassentity () {return ClassEntity; } data pública getStudentBirthday () {return studentbirthday; } public string getStudentId () {return StudentId; } public string getStudentName () {return StudentName; } public string getStudentSex () {return studentSex; } public void setClassentity (classentity ClassEntity) {this.classentity = ClassEntity; } public void setStudentBirthday (data de StudentBirthday) {this.studentbirthday = studentbirthday; } public void setStudentId (String studentId) {this.studentId = StudentId; } public void setStudentName (String studentName) {this.studentName = StudentName; } public void setStudentSex (String studentSex) {this.studentsex = StudentSex; }} 1.2.3.2 Crie uma interface de acesso a dados
A interface Dao correspondente da aula do aluno: Studentmapper.
interface pública Studentmapper {public StudentEntity GetStudent (String studentId); Public Studententity GetStudentAndClass (String studentId); Lista pública <TristentEntity> getStudentall (); public void InsertStudent (entidade estudantil); Public Void Deletestudent (entidade estudantil); public void updatestudent (entidade estudantil); }1.2.3.3 Criar arquivo de instrução de mapeamento SQL
Declaração SQL da aula de estudante Arquivo Studentmapper.xml
Tag ResultMap: Mapeamento dos campos e atributos da tabela.
Selecione Tag: consulta SQL.
<? xml versão = "1.0" Encoding = "utf-8"?> <! <ResultMap type = "StudentEntity" id = "StudentResultMap"> <id de propriedade = "studentId" column = "student_id"/> <result Property = "StudentName" Column = "Student_Name"/> <Result Property = "StudentSex" Column = "Student_sex"/Result Propriedade = "StudentBirthday" De acordo com id-> <select id = "getStudent" parametertype = "string" resulttype = "studentEntity" resultmap = "studentResultmap"> <! [CDATA [selecione * de Student_Tbl St Where St.Student_Id = #{StudentId}]> </select> <!-Query List-> ResultType = "com.manager.data.model.studententity" resultmap = "StudentResultmap"> <! [CDATA [selecione * de Student_tbl]] 1.2.3.4 Crie arquivo de configuração do Mybatis Mapper
Crie o arquivo de configuração do Mybatis no SRC/Main/Resource: mybatis-config.xml.
Tíqueas típicas Tag: Dê um alias um alias. A classe com.manager.data.model.studententity pode ser usada em vez de estudante.
Tag dos maperes: Carregar o arquivo de instrução de mapeamento SQL da classe de entidade no mybatis.
<? xml versão = "1.0" Encoding = "utf-8"?> <! Doctype Configuration public "-// mybatis.org//dtd config 3.0 // pt" "http://mybatis.org/dtd/mybatis-3-config.dtdddddtis"> type = "com.manager.data.model.studententity"/> </typeAliases> <Mappers> <mapper Resource = "com/gerente/data/maps/studentmapper.xml"/> </mappers> </figuration>
1.2.3.5 Modificar o arquivo de configuração da Spring
Ele adiciona principalmente o feijão da classe de fábrica de produção de SQLSession: SQLSessionFactoryBean (no pacote mybatis.spring). Requer especificar a localização do arquivo de configuração e o DataSource.
Fean de implementação correspondente à interface de acesso a dados. Criado através do MapperFactoryBean. É necessário executar o nome completo da classe de interface e a referência ao feijão SQLSession Factory.
Arquivo de configuração da propriedade Importar-> <Contexto: Property-PlaceLitder Location = "ClassPath: mysql.properties" /> <bean id = "DataSource"> <propriedade name = "driverclassName" value = "$ {jdbc.driverclassname} /> <names =" url ") id = "transactionManager"> <propriedade name = "DataSource" ref = "DataSource" /> < /bean> <bean id = "sqlsessionFactory"> <propriedades name = "configLocation" value = "classpath: mybatis-config.xml" /> <names /"datasource" ref = " id = "studentmapper"> <propriedade name = "mapperInterface" value = "com.manager.data.studentmapper" /> <propriedade name = "sqlsessionFactory" ref = "sqlsessfactory" /> </siean> Você também não pode definir o feijão do mapeador, usar anotações:
Adicionar Studentmapper à Anotação
@Repository @transaction Public Interface Studentmapper {}As necessidades correspondentes são adicionar digitalizações no despachante-servlet.xml:
<Bean> <propriedade name = "annotationclass" value = "org.springframework.stereotype.repository"/> <propriedade name = "bashepackage" value = "com.liming.manager"/> <nome da propriedade = "sqlsessionFactory" refer = "sqlSessionFactory"/> </rient
1.2.4 Teste Studentmapper
Use os testes Springmvc para criar um testcontrolador, configurar o tomcat e acessar a página Index.do para teste:
@Controller public class TestController {@Autowired Private Studentmapper Studentmapper; @RequestMapping (value = "index.do") public void indexpage () {estudanteEntity entity = studentmapper.getStudent ("10000013"); System.out.println ("nome:" + entity.getStudentName ()); }}Teste com Junit:
@Runwith (value = springjunit4classrunner.class) @ContextConfiguration (value = "test-servlet.xml") public class StudentMapperTest {@AUTOWIRED CLASSMAPPAPPAPPAPPER DE PRIVADORES; @Autowired Private Studentmapper Studentmapper; @Transaction Public void getStudenttest () {estudanteEntity entity = studentmapper.getStudent ("10000013"); System.out.println ("" + entity.getStudentId () + entity.getStudentName ()); Lista <DentulyEntity> StudentList = Studentmapper.getStudentall (); para (ENTRONENTITY ENTITYTEMP: StudentList) {System.out.println (entityTemp.getStudentName ()); }}} 2.MyBatis 'Arquivo de configuração
Ao definir o SQLSessionFactory, você precisa especificar o arquivo de configuração principal do Mybatis:
<bean id = "sqlSessionFactory"> <propriedade name = "configLocation" value = "classPath: mybatis-config.xml" /> <propriedade name = "dataSource" ref = "datasource" /> < /bean>
As sub-marcas em configuração na configuração do mybatis incluem:
Configuração |-Propriedades |-Configurações | --- TypeAliases | --- TIPEHANHERS | --- ObjectFactory | --- Plugins | --- Ambientes | --- Ambiente | --- | ---- | --- TransactionManager | ---- | ---- | __ DATASURCE | __ Mappers
2.1 Propriedades Propriedades
Os arquivos de configuração de propriedades estão relacionados ao java.properties. Configure o recurso de propriedades para especificar o caminho das .Properties e, em seguida, configure o nome e o valor da propriedade na tag Propriedades. Você pode substituir o valor da propriedade correspondente no arquivo .Properties.
<!-substituição da propriedade-> <Propriedades Resource = "mysql.properties"> <propriedade name = "jdbc.driverclassName" value = "com.mysql.jdbc.driver"/> <Nome da propriedade = "Jdbc.url" Value = "Jdbc: MySQL: // LocalHost: 3: 3) value = "root"/> <nome da propriedade = "senha" value = "limingnihao"/> </Properties>
2.2 Configurações
Esta é uma etapa importante para Mybatis modificar os detalhes do processo de operação. A tabela a seguir descreve essas configurações, significados e valores padrão.
Configurações | descrever | Valores permitidos | valor padrão |
Cacheenabled | Todos os caches neste arquivo de configuração estão globalmente as configurações de Oxh/Off. | verdadeiro | falso | verdadeiro |
LazyLoadingEnabled | Configurações globais de carregamento preguiçoso. Se definido como 'false', todos os associados serão inicializados e carregados. | verdadeiro | falso | verdadeiro |
agressividade do carregamento | Quando definido como 'True', os objetos de carregamento preguiçoso podem ser carregados por todas as propriedades preguiçosas. Caso contrário, cada propriedade é carregada conforme necessário. | verdadeiro | falso | verdadeiro |
Multipreresultsetsetsenabled | Permitir e não permita que uma única instrução retorne vários conjuntos de dados (dependendo dos requisitos do driver) | verdadeiro | falso | verdadeiro |
usecolumnLabel | Use rótulos da coluna em vez de nomes de colunas. Drives diferentes têm abordagens diferentes. Consulte a documentação da unidade ou teste -a com essas duas opções diferentes. | verdadeiro | falso | verdadeiro |
UseGeneratedKeys | Permite que o JDBC gere teclas primárias. O suporte da unidade é necessário. Se definido como true, essa configuração forçará a chave primária gerada, algumas unidades são incompatíveis, mas ainda podem ser executadas. | verdadeiro | falso | falso |
AutomappingBeHavior | Especifica se e como o Mybatis mapeia automaticamente os campos da tabela de dados para as propriedades dos objetos. Parcial apenas mapeará automaticamente simples, sem resultados aninhados. O completo mapeará automaticamente todos os resultados complexos. | NENHUM, PARCIAL, COMPLETO | PARCIAL |
defaultExecutorType | Configure e defina o executor, e o executor simples executa outras instruções. O executor de reutilização pode reutilizar as instruções de declarações preparadas, e o executor do lote pode executar repetidamente as instruções e atualizações em lote. | SIMPLES Reutilizar LOTE | SIMPLES |
DefaultStatementTimeout | Defina um limite de tempo para determinar quanto tempo a unidade aguardará o banco de dados para responder a um tempo limite | Número inteiro positivo | Não definido (nulo) |
<friffings> <Configuração name = "Cacheenabled" value = "true" /> <Configuração name = "LAZYLOULLINGENLABADO" VALUE = "true" /> <Configuração name = "multipleResultSetSEnabled" value = "true" /> <effortGenen name = "USECOLumnLabel" value = "True" /<nome do nome = "useGenerTeyKeyS" </configurações>
2.3 TypeAliases Type Alias
Tipo Alias é a abreviação dos tipos de Java.
Ele está simplesmente associado à configuração XML, abreviada como um longo nome de classe Java. Por exemplo:
<TypeAalias> <typeAlias alias = "userentity" type = "com.manager.data.model.userentity" /> <typeAlias alias = "StudentEntity" type = "com.manager.data.model.studentity" /> <typeAlias alias = "classentity" type = "combora.Manager.Manidade.Deal.Deal.Deal.Morias
Com essa configuração, "StudentEntity" pode ser usado em qualquer lugar em vez de "com.manager.data.model.studententity".
Para tipos normais de Java, existem muitos alias do tipo embutido. Ambos são insensíveis ao caso e, devido a nomes sobrecarregados, você deve prestar atenção ao manuseio especial de tipos nativos.
Alias | O tipo de mapa |
_byte | byte |
_longo | longo |
_curto | Curto |
_int | int |
_INTEGER | int |
_dobro | dobro |
_flutuador | flutuador |
_Boolean | booleano |
corda | Corda |
byte | Byte |
longo | Longo |
Curto | Curto |
int | Inteiro |
Inteiro | Inteiro |
dobro | Dobro |
flutuador | Flutuador |
booleano | Booleano |
data | Data |
decimal | BigDecimal |
BigDecimal | BigDecimal |
objeto | Objeto |
mapa | Mapa |
Hashmap | Hashmap |
lista | Lista |
Arraylist | Arraylist |
Coleção | Coleção |
Iterador | Iterador |
2.4 TIPELHELERS TIPO TIPE
Se mybatis define um parâmetro em uma instrução de pré -processamento ou obtém um valor do conjunto de resultados, o processador de tipo é usado para converter o valor obtido no tipo Java da maneira apropriada. A tabela a seguir descreve o processador do tipo padrão.
Tipo Processador | Tipos de java | Tipo JDBC |
BooleanTypeHandler | Booleano, booleano | Qualquer valor booleano compatível |
ByteTypeHandler | Byte, byte | Qualquer número compatível ou tipo de byte |
Shorttypehandler | Curto, curto | Qualquer formulário digital ou curto compatível |
IntegertypeHandler | Inteiro, int | Qualquer digital e número inteiro compatíveis |
LongTypeHandler | Longo, longo | Qualquer modelo digital ou longo compatível |
FloottypeHandler | Flutuar, flutuar | Qualquer tipo de ponto flutuante digital ou de precisão única compatível |
DoubleTypeHandler | Duplo, dobro | Qualquer tipo de ponto flutuante de precisão digital ou dupla compatível |
BigDecimalTypeHandler | BigDecimal | Qualquer tipo de decimal numérico ou decimal compatível |
StringTypeHandler | Corda | Tipos de char e varchar |
ClobtypeHandler | Corda | Tipos de Clob e Longvarchar |
NStringTypeHandler | Corda | Tipos de nvarchar e nchar |
NCLOBTYPEHANDLER | Corda | Tipo NCLOB |
BytearrayTypeHandler | byte[] | Qualquer tipo de fluxo de bytes compatível |
BLOBTYPEHANDLER | byte[] | Blob e Tipos Longvarbinary |
DATETYPEHANDLER | Data (java.util) | Tipo de timestamp |
DateOnlyTyPeHandler | Data (java.util) | Tipo de data |
TimeOnlyTyPeHandler | Data (java.util) | Tipo de tempo |
SQLTIMESTAMPTYPEHANDLER | Timestamp (Java.SQL) | Tipo de timestamp |
SQLDATETYPEHANDLER | Data (Java.SQL) | Tipo de data |
SQLTIMETYPEHANDLER | Tempo (java.sql) | Tipo de tempo |
ObjectTypeHandler | Qualquer | Outro tipo ou não especificado |
Enumtypehandler | Tipo de enumeração | VARCHAR - Qualquer tipo de sequência compatível, armazenado como código (não indexado). |
classe pública LimingStringTyPeHandler implementa TypeHandler {@Override public void setParameter (preparado PS, int i, parâmetro de objeto, jdbctype jdbctype) lança sqlexception {System.out.println ("setParameter - parâmetro:" + (string))) " jdbctype.type_code); ps.SetString (i, (((string) parâmetro)); } @Override Public Object getResult (ResultSet RS, String columnName) lança SqLexception {System.out.println ("getResult - columnName:" + columnName); retornar rs.getString (columnName); } @Override Public Object getResult (CLABLABLESTATEMENT CS, INT columnindex) lança sqlexception {System.out.println ("getResult - colunindex:" + colunindex); retornar cs.getString (columnindex); }}Adicione a tag TypeHandler nos TypeHandlers no arquivo de configuração.
<TepeHandlers> <typeHandler javatype = "string" jdbctype = "varchar" handler = "liming.student.manager.type.limingstringtypehandler"/> </typeandlers>
2.5 ObjectFactory Object Factory
Toda vez que o mybatis cria uma nova instância do objeto de resultado, o ObjectFactory é usado. O ObjectFactory padrão não é diferente de criar uma instância usando o construtor da classe de destino. Se já houver parâmetros mapeados, também é possível usar um construtor com parâmetros.
Se você reescrever a operação padrão do ObjectFactory, poderá criar o seu próprio herdando org.apache.ibatis.reflection.factory.defaultObjectFactory.
A interface ObjectFactory é simples. Ele contém dois métodos para a criação, um é lidar com o construtor padrão e o outro é lidar com o construtor de parâmetros. Por fim, o método do setProperties pode ser usado para configurar o ObjectFactory. Depois de inicializar sua instância do ObjectFactory, as propriedades definidas no corpo do elemento ObjectFactory serão passadas para o método do setProperties.
classe pública LimingObjectFactory estende DefaultObjectFactory {private estático final serialversionuid = -399284318168302833l; @Override Public Object Create (Class Type) {return super.create (tipo); } @Override Public Object Create (Tipo de classe, Lista <Class> construttorargtypes, list <bject> construttorargs) {System.out.println ("Crie - tipo:" + type.tostring ()); retornar super.create (tipo, construttorargtypes, construttorargs); } @Override public void SetProperties (Propriedades Propriedades) {System.out.println ("SetProperties - Propriedades:" + Properties.toString () + ", algumaProperty:" + Properties.getProperty ("algumproperty")); super.setProperties (Propriedades); }}Adicione a tag ObjectFactory ao arquivo de configuração
<ObjectFactory type = "Liming.student.manager.configuration.limingObjectFactory"> <Nome da propriedade = "SomeProperty" value = "100"/> </objectFactory>
2.6 Plugins Plugin
Mybatis permite interceptar chamadas executadas por declarações mapeadas em um determinado ponto. Por padrão, o mybatis permite que os plugins interceptem chamadas de método:
Detalhes dos métodos nessas classes podem ser encontrados analisando a assinatura de cada método, e seu código -fonte está disponível no pacote de distribuição Mybatis. Você deve entender o comportamento de seus métodos de substituição, supondo que você esteja fazendo mais do que monitorar chamadas. Se você tentar modificar ou substituir um determinado método, poderá quebrar o núcleo de Mybatis. Esta é uma classe e método de baixo nível e você deve usar plugins com cautela.
Usar plugins é a energia muito simples que eles fornecem. Implementação simples da interface interceptadora e determine a assinatura especificada que você deseja interceptar.
2.7 Ambientes
Mybatis pode ser configurado com vários ambientes. Isso pode ajudá -lo a mapear o SQL para corresponder a vários bancos de dados, etc.
2.8 Mapper Mapper
Aqui está uma declaração que diz a Mybatis onde procurar o mapeamento SQL. Você pode usar a referência de recurso no caminho de classe ou usar caracteres para inserir a referência exata do URL.
Por exemplo:
<Mapper Resource = "com/gerente/data/maps/userMApper.xml"/> <Mapper Resource = "com/gerente/data/maps/studentmapper.xml"/> <mapper Resource = "com/gerente/data/maps/classmapper.xml"/> </ppers>