1. Введение и конфигурация mybatis+spring+mysql
1.1 Введение в mybatis
Mybatis - это структура настойчивости, которая может настроить SQL, хранимые процедуры и расширенные отображения. Mybatis устраняет большую часть кода JDBC, настройки параметров ручного параметра и поиска набора результатов. Mybatis использует только простые XML и аннотации для настройки и карты основных типов данных, интерфейсов карты и POJOS для записей базы данных. По сравнению с решениями ORM, такими как «Однопоп», такие как Hibernate и Apache OJB, Mybatis-это «полуавтоматическая» реализация ORM.
Пакет JAR, который необходимо использовать: mybatis-3.0.2.jar (основной пакет Mybatis). mybatis-spring-1.0.0.jar (в сочетании с весной).
Адрес загрузки:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2mybatis+Spring+MySQL Простая конфигурация
1.2.1.
(1) создать веб -проект Maven;
(2) Добавить Framework и файлы конфигурации Spring;
(3) Добавьте необходимые пакеты JAR (Spring Framework, Mybatis, Mybatis-Spring, Junit и т. Д.) В Pom.xml;
(4) изменить файлы конфигурации Web.xml и Spring;
(5) добавить страницу JSP и соответствующий контроллер;
(6) Тест.
Для справки: http://limingnihao.iteye.com/blog/830409. Построить проект SpringMVC с Maven от Eclipse
1.2.2 Создание базы данных MySQL
Установить базу данных управления выбором студентов.
Таблица: Студенческая таблица, таблица класса, таблица учителей, таблица курсов, таблица студентов.
Логические отношения: у каждого студента есть класс; Каждый класс соответствует классовому учителю; Каждый учитель может быть только классовым учителем одного класса;
Используйте следующий SQL для создания базы данных, сначала создайте таблицу студентов и вставьте данные (более 2 элементов).
Для получения дополнительной информации, пожалуйста, загрузите исходный файл проекта в Resource/SQL.
/* Создать базу данных*/ create Database Student_Manager; Использовать Student_manager; / ***** Создание Студенческой Таблицы *****/ Создание таблицы Студента_TBL (student_id varchar (255) Первичный ключ, student_name varchar (10) не null, student_sex varchar (10), date student_birthday, class_id varchar (255)); /*Вставьте данные студента*/ вставьте в student_tbl (student_id, student_name, student_sex, student_birthday, class_id) значения (123456, 'xxx', 'nefic', '1980-08-01', 121546)
Создайте файл конфигурации mysql.properties, используемые для подключения к MySQL.
jdbc.driverclassname = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // localhost: 3306/stude_manager? user = root & password = limingnihao & useunicode = true & hareverencoding = utf-8
1.2.3 Создание среды Mybatis
Порядок случайный, а текущий заказ заключается в том, что вы можете изменить письменные файлы как можно меньше.
1.2.3.1. Создайте класс Entity: Studententity
Общественный класс Студент реализует Serializable {Private Static Long Long SerialVersionUID = 3096154202413606831L; частное классовое занятие; Частная свидания Студент День; частная строка StudentId; частная строка StudentName; частная строка StudentSex; публичная классность getClassentity () {return classentity; } public Date 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 (дата студента -днем) {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. Создайте интерфейс доступа к данным
Соответствующий интерфейс DAO ученика класса: StudentMapper.
Public Interface StudentMapper {public StudentEntity GetStudent (String StudentId); Public StudentEntity GetStudentAndClass (String StudentID); Общественный список <dpenceentity> getStudentall (); Public void InsertStudent (Entity Student Entity); public void deletestudent (Entity Student Entity); Public void UpdateStudent (OutcureTity Entity); }1.2.3.3. Создание файла операторов сопоставления SQL
Учебный класс SQL File StudentMapper.xml
Тег ResultMap: отображение полей таблицы и атрибутов.
Выберите тег: запрос SQL.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapperspace = "com.manager.mapper.stemar.staver.mapper. <resultMap type = "studialentity" id = "StudentResultMap"> <id property = "student" colun = "student_id"/> <result property = "studentName" colun = "student_name"/> <result property = "studentSex" column = "student_sex"/> <result property = "student-day" coold_birthday "/> <! -> <SELECT ID = "GETSTUDENT" PARAMETERTYPE = "string" RESTORYPE = "Студент" ResultMap = "StudentResultMap"> <! [CDATA [SELECT * FROD_TBL ST, где St.Student_ID = #{studentId}]]> </select> <!-Запись списка студентов-> <select ID = "getStudentall"]> </select> <! resultType = "com.manager.data.model.studententity" resultmap = "StudentResultMap"> <! [CDATA [SELECT * FROM STUNTION_TBL]]> </select> </mapper> 1.2.3.4 Создать файл конфигурации Mybatis Mapper
Создайте файл конфигурации mybatis в SRC/Main/Resource: mybatis-config.xml.
Typealiases Tag: дайте псевдоним классу псевдоним. Класс com.manager.data.model.studententity может использоваться вместо студента.
Тег Mappers: Загрузите файл оператора сопоставления SQL в классе объектов в Mybatis.
<?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> <typeAliases> <typeAlias alias="StudentEntity" type = "com.manager.data.model.studententity"/> </typealiases> <mappers> <mapper resource = "com/manager/data/maps/studentmapper.xml"/> </mappers> </configuration>
1.2.3.5 Изменить файл конфигурации пружины
В основном он добавляет бобы класса производственного завода SQLSession: SQLSessionFactoryBean (в пакете mybatis.spring). Требуется указание местоположения файла конфигурации и источника данных.
Реализация фасоля, соответствующая интерфейсу доступа к данным. Создан через MapperFactoryBean. Необходимо выполнить полное имя класса интерфейса и ссылку на фабрику SQLSession Factory Bean.
<!-Файл конфигурации свойства импорта-> <context: property-placeholder location = "classpath: mysql.properties" /> <bean id = "dataSource"> <name = "driverClassname" value = "$ {jdbc.driverclassname}" /> <propats id = "TransactionManager"> <name = "dataSource" ref = "dataSource" /> < /bean> <bean id = "sqlSessionFactory"> <name = "configlocation" value = "classPath: mybatis-config.xml" /> <property = "DataSource" Ref = "DataSource" /> < /> < /> < /> <proport = "dataSource" Ref = " id = "StudentMapper"> <name = "mapperinterface" value = "com.manager.data.studentmapper" /> <name = "sqlSessionFactory" ref = "sqlSessionFactory" /> < /bean> Вы также не можете определить фасоль Mapper, использовать аннотации:
Добавить StudentMapper к аннотации
@Repository @Transactional Public Interface StudentMapper {}Соответствующие потребности должны добавить сканирование в диспетчер-servlet.xml:
<Bean> <name = name = "annotationclass" value = "org.springframework.stereotype.repository"/> <name = "basepackage" value = "com.liming.manager"/> <property name = "sqlSessionFactory" ref = "sqlSessionFactory"/> </> bean>
1.2.4 Тест Студент -Маппер
Используйте тесты SpringMVC для создания TestController, настройки Tomcat и получить доступ к странице index.do для тестирования:
@Controller public class testcontroller {@autowired private StudentMapper StudentMapper; @Requestmapping (value = "index.do") public void indexPage () {studentEntity entity = studentMapper.getStudent ("10000013"); System.out.println ("name:" + entity.getStudentName ()); }}Тест с JUNIT:
@Runwith (value = springjunit4classrunner.class) @contextconfiguration (value = "test-servlet.xml") public class StudentMappertest {@autowired Private Classmapper classmapper; @Autowired Private StudentMapper StudentMapper; @Transactional public void getStudentTest () {StudentEntity Entity = StudentMapper.getStudent ("10000013"); System.out.println ("" + entity.getStudentid () + entity.getStudentName ()); Список <TradeTity> StudentList = StudentMapper.getStudentall (); для (studentEntyTityTemp: StudentList) {System.out.println (entityTemp.getStudentName ()); }}} 2. Основной файл конфигурации Mybatis
При определении SQLSessionFactory вам необходимо указать основной файл конфигурации MyBatis:
<bean id = "sqlSessionFactory"> <name = "configlocation" value = "classPath: mybatis-config.xml" /> <name = "dataSource" ref = "dataSource" /> < /bean>
Суб-теги в конфигурации в конфигурации Mybatis включают:
Конфигурация |-Свойства |-Настройки | --- TypeAliases | --- TypeHandlers | --- ObjectFactory | --- Плагины | --- среды | --- среда | --- | ---- | --- Транзакция Manager | ---- | ---- | __ DataSource | __ Mappers
2.1 Свойства свойства
Файлы конфигурации свойств связаны с Java.Properties. Настройте ресурс свойств, чтобы указать путь .properties, а затем настроить имя и значение свойства в соответствии с тегом свойств. Вы можете заменить соответствующее значение свойства в файле .properties.
<!-Замена свойства-> <Properties resource = "mysql.properties"> <name = "jdbc.driverclassname" value = "com.mysql.jdbc.driver"/> <property name = "jdbc.url" value = "jdbc: mysql: // localhost: 3306/udult as userame"/> <protemane "/"/> <protect "/"/> <protect "/"/> <protect "/"/> <protect "/"/> <protect "/"/> <protect "/"/> ". value = "root"/> <name = "password" value = "limingnihao"/> </properties>
2.2 Настройки
Это важный шаг для Mybatis, чтобы изменить детали процесса работы. В следующей таблице описываются эти настройки, значения и значения по умолчанию.
Настройки | описывать | Разрешенные значения | значение по умолчанию |
Cacheenabled | Все кэши в этом файле конфигурации являются настройками в глобальном уровне/выключении. | Верно | ЛОЖЬ | истинный |
LazyLoadEnabled | Глобальные настройки ленивая загрузка. Если установить на «false», все связанные инициализируются и загружены. | Верно | ЛОЖЬ | истинный |
Aggrevessivelazyloading | При установке на «true» ленивые объекты загрузки могут быть загружены всеми ленивыми свойствами. В противном случае каждое свойство загружается по мере необходимости. | Верно | ЛОЖЬ | истинный |
MultiplerSultsSetabled | Разрешить и не разрешать одному оператору возвращать несколько наборов данных (в зависимости от требований драйвера) | Верно | ЛОЖЬ | истинный |
USECOLUMNLABEL | Используйте метки столбцов вместо названий столбцов. Разные диски имеют разные подходы. Обратитесь к документации или протестируйте ее с помощью этих двух разных вариантов. | Верно | ЛОЖЬ | истинный |
Использование генерированных клейков | Позволяет JDBC генерировать первичные ключи. Требуется поддержка привода. Если установить True, этот настройка заставит сгенерированный первичный ключ, некоторые диски несовместимы, но все еще могут быть выполнены. | Верно | ЛОЖЬ | ЛОЖЬ |
Автоматическое поведение | Указывает, автоматически ли Mybatis отображает поля таблицы данных со свойствами объектов. Частичный будет только автоматически отображать простые, без вложенных результатов. Полный будет автоматически отображать все сложные результаты. | НИКТО, Частичный, ПОЛНЫЙ | Частично |
Defaultexecutortype | Настройте и установите исполнителя, и простой исполнитель выполняет другие операторы. Исполнитель повторного использования может повторно использовать заявления о подготовленных операторах операторов, а исполнитель партии может повторить операторы и обновления партий. | ПРОСТОЙ Повторное использование ПАРТИЯ | ПРОСТОЙ |
DefaultStatementTimeout | Установите ограничение по времени, чтобы определить, сколько времени будет ждать, пока база данных ответит на тайм -аут | Положительное целое число | Не установлен (нулевой) |
<settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="false" /> <setting name="enhancementEnabled" value="false" /> </settings>
2.3 Тип типа псевдоним типа
Тип псевдоним - это аббревиатура типов Java.
Он просто связан с конфигурацией XML, сокращенным как длительное имя класса Java. Например:
<Typealias> <typealias alias = "userentity" type = "com.manager.data.model.userentity" /> <typealias alias = "studialty" type = "com.manager.data.model.studententity" /> <typealias alias = "classentity" typealse.mager.data.model.
С помощью этой конфигурации «Студента» можно использовать в любом месте, а не «com.manager.data.model.studententity».
Для нормальных типов Java есть много встроенных псевдоним. Они оба нечувствительны к случаям, и из-за перегруженных имен вы должны обратить внимание на специальную обработку местных типов.
Псевдоним | Тип карты |
_байт | байт |
_длинный | длинный |
_короткий | Короткий |
_int | инт |
_integer | инт |
_двойной | двойной |
_плавать | плавать |
_boolean | логический |
нить | Нить |
байт | Байт |
длинный | Длинный |
Короткий | Короткий |
инт | Целое число |
целое число | Целое число |
двойной | Двойной |
плавать | Плавать |
логический | Логический |
дата | Дата |
Десятичный | BigDecimal |
BigDecimal | BigDecimal |
объект | Объект |
карта | Карта |
Hashmap | Hashmap |
список | Список |
ArrayList | ArrayList |
Коллекция | Коллекция |
Итератор | Итератор |
2.4 TypeHandlers Handle
Независимо от того, устанавливает ли Mybatis параметр в операторе предварительной обработки или берет значение из набора результатов, тип процессор используется для преобразования полученного значения в тип Java соответствующим образом. В следующей таблице описывается процессор типа по умолчанию.
Тип процессор | Java -типы | Тип JDBC |
Booleantypehandler | Логический, логический | Любое совместимое логическое значение |
Bytetypehandler | Байт, байт | Любое совместимое число или тип байта |
Шорттипхандлер | Короткий, короткий | Любая совместимая цифровая или короткая форма |
Integertypehandler | Целое число, инт | Любой совместимый цифровой и целый ряд |
Лонгтипхандлер | Долго, долго | Любая совместимая цифровая или длинная модель |
Floattypehandler | Плавать, плавать | Любой совместимый цифровой или однооперационный тип плавающей запятой |
Doubletypehandler | Двойной, двойной | Любой совместимый цифровой или двойной точ |
BigDecimaltyPehandler | BigDecimal | Любой совместимый числовой или десятичный десятичный фактор |
Stringtypehandler | Нить | Типы char и varchar |
Clobtypehandler | Нить | Клоб и Лонгварчар Типы |
Nstringtypehandler | Нить | Типы NVARCHAR и NCHAR |
Nclobtypehandler | Нить | Тип NCLOB |
Bytearraytypehandler | байт[] | Любой тип совместимого байтового потока |
Blobtypehandler | байт[] | Типы Blob и Longvarbinary |
DateTypeHandler | Дата (java.util) | Тип TimeStamp |
Dateonlytypehandler | Дата (java.util) | Тип даты |
Timeonlytypehandler | Дата (java.util) | Тип времени |
Sqltimestamptypehandler | Временная метка (java.sql) | Тип TimeStamp |
SQLDATETYPEHANDLER | Дата (java.sql) | Тип даты |
Sqltimetypehandler | Время (java.sql) | Тип времени |
ObjectTypeHandler | Любой | Другой или неопределенный тип |
Enumtypehandler | Тип перечисления | VARCHAR - любой совместимый тип строки, хранящийся как код (не индексирован). |
Общедоступный класс LimingStringTypeHandler реализует TypeHandler {@Override public void setParameter (подготовка PS, Int I, Parameter, JDBCTYPE JDBCTYPE) THROHS SQLEXCEPTION {System.out.println («SetParameter - Parameter:» + ((String) + », JDBCTE:« + ». jdbctype.type_code); Ps.setString (i, ((строка) параметр)); } @Override public Object getResult (ResultSet RS, String ColumnName) Throws SQLexception {System.out.println ("getResult - columnName:" + columnName); вернуть rs.getString (columnName); } @Override public Object getResult (callableStatement CS, int columnIndex) Throws SQLexception {System.out.println ("getResult - columnIndex:" + columnIndex); return cs.getstring (columnindex); }}Добавьте тег TypeHandler в TypeHandlers в файле конфигурации.
<TypeHandlers> <typeHandler javatype = "string" jdbctype = "varchar" handler = "liming.student.manager.type.limingstringtypehandler"/> </typehandlers>
2.5 Factory Object Factory Object
Каждый раз, когда Mybatis создает новый экземпляр объекта результата, используется EactionFactory. ObjectFactory по умолчанию ничем не отличается от создания экземпляра, используя конструктор целевого класса. Если уже есть карту параметров, также возможно использовать конструктор с параметрами.
Если вы переписываете операцию по умолчанию ObjectFactory, вы можете создать свой собственный, унаследовав org.apache.ibatis.reflection.factory.defaultobjectfactory.
Интерфейс ObjectFactory прост. Он содержит два метода для создания, один из них состоит в том, чтобы справиться с конструктором по умолчанию, а другой - справиться с конструктором параметров. В конечном счете, метод SetProperties может использоваться для настройки ObjectFactory. После инициализации вашего экземпляра ObjectFactory, свойства, определенные в корпусе элемента объекта, будут переданы методу SetProperties.
открытый класс LimingObjectFactory Extends defaultObjectFactory {Private Static Long Long SerialVersionUID = -399284318168302833L; @Override public Object create (class type) {return super.create (type); } @Override public Object create (class type, list <class> constructorargtypes, list <object> constructorargs) {system.out.println ("create - type:" + type.tostring ()); return super.create (type, constructorargtypes, constructorargs); } @Override public void setProperties (свойства свойств) {System.out.println ("setProperties - свойства:" + Properties.ToString () + ", SomeProperty:" + Properties.getProperty ("SomeProperty")); Super.SetProperties (свойства); }}Добавить объект объекта в файл конфигурации
<objectFactory type = "liming.student.manager.configuration.limingObjectFactory"> <name = "someProperty" value = "100"/> </objectFactory>
2.6 Плагин плагин
Mybatis позволяет вам перехватывать вызовы, выполняемые с помощью отображенных операторов в определенную точку. По умолчанию Mybatis позволяет плагинам перехватывать вызовы метода:
Детали методов в этих классах можно найти, просмотрев подпись каждого метода, и их исходный код доступен в пакете дистрибуции Mybatis. Вы должны понимать поведение своих методов первичного, предполагая, что вы делаете больше, чем мониторинг вызовов. Если вы попытаетесь изменить или переопределить заданный метод, вы можете нарушить ядро Mybatis. Это низкий класс и метод, и вы должны использовать плагины с осторожностью.
Использование плагинов - это очень простая мощность, которую они предоставляют. Простая реализация интерфейса Interceptor и определите указанную подпись, которую вы хотите перехватить.
2.7 среда
Mybatis можно настроить с несколькими средами. Это может помочь вам на карту SQL, чтобы соответствовать нескольким базам данных и т. Д.
2.8 Mapper Mapper
Вот заявление, которое сообщает Mybatis, где искать картирование SQL. Вы можете использовать ссылку на ресурс в группе класса или использовать символы для ввода точной ссылки на URL.
Например:
<mapper resource = "com/manager/data/maps/usermapper.xml"/> <mapper resource = "com/manager/data/maps/studymapper.xml"/> <mapper resource = "com/manager/data/maps/classmapper.xml"/> </> </mappers>