Создайте платформу Mybatis+PostgreSQL с нуля
Недавно база данных проекта использует PostgreSQL для использования данных с использованием оригинального MyBatis. В оригинальном Mybatis нет ничего плохого. Тем не менее, в Китае есть инструмент Tk.mybatis, который помогает нам делать много практических вещей. В большинстве случаев нам нужно обрабатывать оригинальные mybatis. Это было в основном хорошо реализовано. В этой статье будут рассмотрены подробные шаги для установки PostgreSQL, настройки TK.MYBATIS, и некоторые незначительные проблемы, которые могут столкнуться в этом процессе.
Установите PostgreSQL, выполните следующую команду для установки: Скопируйте код следующим образом: apt-get update && apt-get install postgresql
После установки сервера нам также нужна клиентская PDADMIN с графическим интерфейсом. Я установил версию PostgreSQL Windows, и вы можете найти соответствующую версию по этому адресу. После успешной установки пользователь системы и пользователь базы данных будут созданы по умолчанию. Имя и пароль - все постгры. Мы можем создать нового пользователя или напрямую использовать эту учетную запись. В любом случае, я просто тест. После завершения установки вы можете столкнуться с проблемами удаленного доступа:
Проблема удаленного соединения, только локальные подключения разрешены по умолчанию. Чтобы позволить другим клиентам подключаться, мы можем изменить его файл конфигурации. Каталог этого файла расположен в /etc/postgresql/9.5/main. В этом каталоге есть два файла:
1: postgresql.conf, это связан с сервером, и есть адрес ляпляции_аддресса, который только локально по умолчанию и мы можем изменить его.
2: PG_HBA.COF, это связано с разрешениями пользователей, существует конфигурация, связанная с подключением, которая может быть настроена в режиме шлюза
После успешного соединения, вероятно, мы можем создать базы данных, таблицы и другие объекты.
Генератор кодов Mybatis, отображение базы данных и модели, такая механическая работа должна быть оставлена на машине для завершения. Пожалуйста, обратитесь к деталям здесь.
Генеральная карта, одна таблица CRUD -операция может абстрагировать общественный интерфейс, и общий Mapper, предоставленный TK.MYBATIS, может помочь нам решить этот тип проблемы.
---- mapper.xml, достаточно маленький (включая только полевые карты)
<mapper namespace = "com.jim.logstashmvc.dao.generated.mapper.productmapper"> <resultmap id = "baseresultmap" type = "com.jim.logstashmvc.dao.generated.entity.product"> <!-Warning-@mbgencedered-> <dipe. свойство = "id" /> <result column = "name" jdbctype = "varchar" property = "name" /> < /resultmap> < /mapper>
---- Mapper, достаточно просто (просто наследуйте от интерфейса Mapper)
Копия кода следующая: productmapper productmapper productmapper Extends <Продукт> {}
Плагины, вот плагины Paging, плагины анализа производительности SQL и т. Д., Это очень легко интегрировать с Mybatis.
Как интегрировать с весной?
Интеграция генераторов, вы можете использовать метод Maven для запуска генератора кода.
Зависят от пакетов
<!-mybatis-> <dehyederence> <groupid> org.mybatis </groupid> <artifactid> mybatis </artifactid> <serse> $ {mybatis.version} </version> </repertive> <!-Integration-> <DeyBateS> <groupId> org.myBatis </GroupID> <! <serse> $ {mybatis.spring.version} </version> </deperency> <!-MBG-> <Depection> <groupid> org.mybatis.generator </GroupId> <artifactid> mybatis-Generator-core </artifactid> <sersion> $ {MBG.Version} </версия> </versecope> </verse> </версия> </версия> </версия> </версия> </версия> </arfactid> <serse> {mbg.version} </версия> </artifactid> <serse> {mbg.version} </artifactid> <serse> $ <plociated> true </oppution> </dependency> <!-Pagination-> <Depected> <groupId> com.github.pageHelper </GroupId> <artifactId> pageHelper </artifactid> <seriation> $ {pageHelper.version} </ression> </repect> <!-General Mapper> <Group> </ression> </regement> <! <artifactId>mapper</artifactId> <version>${mapper.version}</version> </dependency> <!-- TkMybatis will use JPA annotations--> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId> org.postgresql </GroupId> <ArtifactId> postgresql </artifactid> <sersion> 9.3-1102-jdbc41 </version> </vehing>Подключатель генератора конфигурации, укажите путь к файлу конфигурации, зависимости конфигурации: один-драйвер базы данных, а другой-общий Mapper
<!-mbg-> <blicin> <groupid> org.mybatis.generator </GroupId> <straCactId> mybatis-Generator-maven-plugin </artifactid> <sersion> $ {mbg.version} </version> <Конфигурация> <conitivurationFile> $ {basedir} /src/main/resources/generator/generatorConfig.xml </configurationFile> <Overwrite> true </overwrite> <verbose> true </verbose> </configuration> <dehyedice> <seyedy> <groupd> org.postgresql> </configururation> <dehyedudies> <gespee> <groupid> org.postgresql> <artifactId>postgresql</artifactId> <version>9.3-1102-jdbc41</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${mapper.version}</version> </dependency> </dependencies> </plugin>Файл конфигурации генератора
** Настроить подключения базы данных
** Настройте пути хранения сгенерированной модели, mapper и mapper.xml
** Настройте сгенерированную информацию о таблице
Обратите внимание на TargetRuntime, вот Mybatis3simple, а его опция по умолчанию - mybatis3. Если мы используем общего Mapper, мы можем написать это при сканировании интерфейса весной.
Скопируйте код следующим образом: <Bean> <name = "sqlSessionFactoryBeanName" value = "jimsqlSessionFactory"/> <name = "basepackage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>
Если это mybatis3, сгенерированный формат mapper.xml будет намного сложнее. Я сталкивался с этой проблемой раньше: использование mapper.xml, сгенерированного mybatis3, затем неправильно настроил MappersCannerConfigurer к следующему режиму General Mapper, который подсказывает мне следующее. Причина может быть определена как задача конфигурации (а не дубликат идентификатор в mapper.xml). Позже я буду изучать конфигурацию негенерического Mapper.
Скопируйте код следующим образом: вызвано: java.lang.illegalargumentException: Коллекция сопоставленных операторов уже содержит значение для com.jim.logstashmvc.dao.generated.mapper.productmapper.selectbyexampleat org.apache.ibatis.session.configuration $ strictmap.upput (javava. org.apache.ibatis.session.configuration $ strictmap.put (configuration.java:809)
Конфигурация генератора заключается в следующем:
Скопировать код следующим образом: <generatorConfiguration> <Properties resource = "config.properties"/> <контекст targetruntime = "mybatis3simple" defaultmodeltype = "flat"> <property name = "strageDelimiter" type = "$ {mapper.plugin}"> <name = "mappers" value = "$ {mapper.mapper}"/> </plagin> <jdbcconnection driverclass = "$ {jdbc.driverclass}" connecturl = "$ {jdbc.Url}" userId = "$ {jdbc.USMAREN" {jdbc.Url} " Password = "$ {jdbc.password}"> </jdbcconnection> <javamodelgenerator targetpackage = "$ {targetmodelpackage}" targetProject = "$ {targetJavaproject}"/> <sqlMapGenerator TargetPackage = "mapperProject =" $ {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes {argetRes eartyres '>> " <javaclientgenerator targetpackage = "$ {targetmapperpackage}" targetproject = "$ {targetJavaproject}" type = "xmlmapper"> </javaclientgenerator> <table tableName = "Продукт" DomainObject = "Product> </table> </context> </generatorCegrate Infemeters in table> </context> </generatorcuretcure meTeratorers in in table> </context> </generatorCure. Рисунок ниже.
Интеграция Mybatis в основном настраивает информацию о пуле подключений, плагины, сканирование Mapper и другую информацию.
<bean id = "jimdatasource"> <property name = "DriverClassname" value = "$ {jdbc.driverclass}"/> <name = "url" value = "$ {jdbc.Url}"/> <name = "value" value = "$ {jdbc.usernam value="${jdbc.password}"/> <property name="initialSize" value="5"/> <property name="minIdle" value="10"/> <property name="maxWait" value="60000"/> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <property name="minEvictableIdleTimeMillis" value = "3600000"/> <name = "valyationQuery" value = "select 1"/> <name = "testwhileIdle" value = "true"/> <name = "testonBorrow" value = "false"/> <name = "testonbourr" value = "false"/> name = "testonretur <property name="dataSource" ref="jimDataSource"/> <property name="mapperLocations" value="classpath:mapper/*.xml"/> <property name="typeAliasesPackage" value="com.jim.logstashmvc.dao.generated.entity"/> <property name="plugins"> <array> <bean> <property name = "Свойства"> <dulch> dialect = postgresql oumportable = true supportmethodsarguments = true returnpageinfo = check params = count = countsql </value> </property> </bean> </array> </properation> </bean> <bean> <property name = "sqlSessionFactoryBainName" name = "basepackage" value = "com.jim.logstashmvc.dao.generated.mapper"/> </bean>Использование генерала Mapper:
• Mapper, все сгенерированные картины унаследованы от Mapper <t>, и по умолчанию удерживают все интерфейсы общего Mapper, включая обычные операции CRUD.
• Iservice, определение общего интерфейса Mapper, мы можем изменить этот интерфейс в соответствии с нашим собственным бизнесом
@Servicepublic interface iservice <t> {t selectbykey (объектный ключ); int save (t Entity); int delete (ключ объекта); int updateAll (t Entity); int updateNotnull (t Entity); Список <T> selectByExample (пример объекта); // todo другие ...}BaseService, класс внедрения общего Mapper
Общедоступный абстрактный класс BaseService <T> реализует iService <t> {@autowired Защищенный карт <t> mapper; public Mapper <T> getMapper () {return Mapper; } @Override public t selectBykey (объект ключа) {return mapper.selectbyprimarykey (key); } public int save (t entity) {return mapper.insert (entity); } public int delete (object key) {return mapper.deletebyprimarykey (key); } public int updateAll (t entity) {return mapper.updatebyprimarykey (entity); } public int updateNotnull (t entity) {return mapper.updatebyprimarykeyseelective (entity); } public List <T> selectByExample (object example) {return mapper.selectbyexample (пример); } // todo другие ...}Конкретные категории обслуживания
@ServicePublic Class ProductserviceImpl Extends BaseService <Продукт> реализует Productservice {@Override Public List <drop> selectByProduct (продукт продукта, int page, int rows) {Пример пример = новый пример (product.class); Пример. Критерии критерии = пример.createCriteria (); if (! stringutils.isblank (product.getName ())) {criteria.andequalto ("name", product.getName ()); } if (product.getid ()! = null) {criteria.andequalto ("id", product.getid ()); } PageHelper.StartPage (Page, Rows); вернуть SelectByExample (пример); }}Установите PostgreSQL и успешно подключитесь к удаленному, интегрируйте MBG для генерации Mapper и Model, затем интегрируйте MyBatis с пружиной и, наконец, подключите его через общую карту для достижения нашей цели: выполнить большую часть работы через небольшое количество кода и передайте его инструменту для повторной работы. Но General Mapper имеет свои преимущества и недостатки, и он должен быть сбалансирован в соответствии с проектной средой. Я лично чувствую, что преимущества перевешивают недостатки.
Цитируется этой статьей:
1. http://www.mybatis.tk/
2. https://github.com/abel533/mybatis-spring
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.