Основной обзор использования:
Заявления SQL хранятся в файлах XML или аннотациях Java. Пример картирования Mabatis (который использует интерфейс Java и аннотацию Mybatis):
пакет org.mybatis.example; public interface blogmapper {@select ("select * из блога, где id = #{id}") блог selectblog (int id);}Пример исполнения:
Blogmapper mapper = session.getmapper (blogmapper.class); блог блог = mapper.selectblog (101);
Операторы SQL и отображения также могут быть экспрессии в файл XML:
<? 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"> mapper nightspace =" org.mapper.mapper.mapper.mapper.mapper.mapper.mapper.dtd. <select id = "selectblog" parametertype = "int" resultype = "blog"> select * из блога, где id = #{id} </select> </mapper>Вы также можете использовать API Mybatis для выполнения операторов:
Блог блога = session.selectone ("org.mybatis.example.blogmapper.selectblog", 101);Для получения подробной информации, пожалуйста, обратитесь к руководству пользователя, предоставленному на веб -сайте Mybatis.
Интегрируйте с пружиной
Mybatis интегрируется с Spring Framework. Spring Framework позволяет Mybatis участвовать в весенних транзакциях, создает Mybatis Mappers и Sessions и вводит их в другие бобы.
Вот базовый пример конфигурации XML: Mapper создается и вводится в фасоль "BlogService".
<bean id = "sqlSessionFactory"> <name = "dataSource" ref = "dataSource" /> < /bean> <bean id = "blogmapper"> <name = "sqlSessionFactory" ref = "sqlSessionFactory" /> <свойство = "mapperInterface" value = "org.mybatis.Epplog" /> <свойство = "mapperinterface" value = "org.mybatis. id = "blogservice"> <name = "blogmapper" ref = "blogmapper" /> < /bean>
Теперь звонить Mybatis требует только одного из бобов:
Общедоступный класс BlogServiceImpl реализует BlogService {Private BlogMapper BlogMapper; public void setBlogmapper (BlogMapper Blogmapper) {this.blogmapper = blogmapper; } public void doSomethingwithablog (int blogid) {blog Blog = blogmapper.selectblog (blogiD); ...}} SQLSessionFactory
Каждое приложение Mybatis принимает экземпляр объекта SQLSessionFactory в качестве ядра. Сам SQLSessionFactory создается SQLSessionFactoryBuilder. Вообще говоря, в приложении база данных будет соответствовать только SQLSessionFactory, поэтому мы обычно определяем SQLSessionFactory как синглтонский шаблон или вводим его через пружину и т. Д.
Методы создания sqlSessionFactoryBuilder для создания sqlSessionFactory являются:
Основными параметрами, разработанными этими методами, являются InputStream, Environment и Properties, где inputStream является входным потоком, полученным из файла конфигурации; Окружающая среда представляет, какую среду вы в настоящее время используете среди многих сред, настроенных в файле конфигурации, включая источники данных и транзакции, а среда по умолчанию используется по умолчанию; Используя свойства, mybatis загрузит соответствующие свойства или файлы, которые можно использовать в файле конфигурации.
Здание SQLSessionFactory от XML
Частный статический sqlSessionFactory sqlSessionFactory = null; static {try {inputStream is = resources.getResourceasStream ("config/mybatis_config.xml"); sqlSessionFactory = new sqlSessionFactoryBuilder (). Build (IS); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} public static sqlSessionFactory getSqlSessionFactory () {return sqlSessionFactory; }
Ниже приведена основная структура файлов конфигурации:
Файл конфигурации Mybatis обычно включает в себя следующие части:
<среда default = "development"> <среда id = "development"> <transactionManager type = "jdbc" /> <dataSource type = "booled"> <property name = "Driver" value = "$ {jdbc.driver}" /> <name = "url" value = "$ {jdbc.Url}" /> <name = "username" value = "$ {jdbc.username}"/> <name = "password" value = "$ {jdbc.password}"/> </dataSource> </meneral> </ervines> Поскольку Mybatis может настроить несколько сред, вы можете указать конкретную среду при создании SQLSessionFactory для создания SQLSessionFactory. Если вы не указаете это, среда по умолчанию будет использоваться.
TransactionManager
В Mybatis есть два типа менеджеров по транзакциям (то есть type = ”[jdbc | Managed]»):
JDBC Эта конфигурация напрямую и просто использует настройки Commit и Oflback JDBC. Он опирается на соединения, полученные из источников данных для управления объемом транзакций.
Управляемая конфигурация мало что делает. Он никогда не совершает или откатывается назад. И он позволяет контейнеру управлять всем жизненным циклом транзакции (например, контекст Spring или JEE Application Server), он по умолчанию закрывает соединение. Однако некоторые контейнеры не хотят этого, поэтому, если вам нужно остановить его от соединения, установите свойство CloseConnection на False.
DataSource
Элемент данных DataSource использует базовый интерфейс источника данных JDBC для настройки ресурсов для объектов соединения JDBC.
Многие приложения Mybatis будут настроить источник данных, как показано в примерах. Однако это не обязательно. Вы должны знать, что для облегчения использования ленивой нагрузки необходимы источники данных.
Есть три встроенных типа источников данных (то есть тип = "???"):
Невозможное реализация этого источника данных состоит в том, чтобы просто открыть и закрывать соединение каждый раз, когда он запрашивается. Это немного медленно, что является отличным выбором для простых приложений, так как не требуют своевременных доступных соединений. Различные базы данных также работают по -разному, поэтому для некоторых баз данных не важно настраивать источник данных, и эта конфигурация также простаивает. Источник данных без охлаждения используется только для настройки следующих 5 свойств:
В качестве опции вы можете передать свойства драйвера базы данных. Для этого префикс атрибута начинается с «драйвера». Например:
Driver.encoding = utf8
Это пройдет значение «UTF8» для передачи свойства «кодирования», которое передается в драйвер базы данных через метод DriverManager.getConnection (URL, DriverProperties).
Объединенное это реализация пула соединений источника данных для объектов соединения JDBC, которая используется, чтобы избежать необходимого начального времени подключения и времени аутентификации при создании новых экземпляров соединения. Это популярный метод, который в настоящее время используется веб -приложениями для быстрого ответа на запросы.
В дополнение к вышеуказанным (неопровержимым) атрибутам, существует много атрибутов, которые можно использовать для настройки объединенного источника данных:
Среди них конфигурация источника данных JNDI требует только двух свойств:
(1) Свойство initial_context используется для поиска среды из исходного контекста (то есть initialcontext.lookup (initial-context). Это необязательное свойство. Если проигнорируется, свойство data_source снова будет поиск непосредственно с начальным контекстом текста в качестве фона.
(2) DATA_SOURCE Это путь, который ссылается на контекст местоположения экземпляра источника данных. Он будет искать среду, возвращаемую за счет запроса initial_context в качестве фона. Если initial_context не возвращает результат, он будет искать начальный контекст как среду напрямую.
Тогда есть Mapper. Mapper используется для картирования операторов SQL. Во -первых, мне нужно сказать Mybatis, где найти эти операторы SQL, то есть указать местоположение ресурса.
<mappers> <mapper resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers>
Вот простой файл конфигурации, который я сделал в процессе тестирования:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> resource = "config/jdbc.properties"> </properties> <typealiases> <typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> </typealiases> <среда default = "development"> <среда идентификатор = "развитие"> <transactionmaner = "jdbc"/> <developmy emance ud = "transactionmaner =" name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers> </configuration>
Внешний файл свойств импортируется в приведенный выше файл конфигурации. Введение свойства в файл конфигурации mybatis может быть непосредственно включено в элемент свойств или его можно ввести снаружи, используя элемент свойств, или его можно передавать в качестве свойств параметра при создании SQLSessionFactory. Поскольку свойства в файлах конфигурации mybatis могут быть введены из многих мест, это включает в себя приоритетную проблему, а Mybatis будет искать их в следующем порядке:
Во -первых, в файле конфигурации свойства в корпусе элементов свойств считываются, а затем чтение Свойства в файле свойств, представленных снаружи, которые будут перезаписать те же свойства, прочитанные ранее. Наконец, свойства в свойствах, проходящих при создании SQLSessionFactory, читаются, что также будет перезаписать те же свойства раньше.
После того, как вы получите SQLSessionFactory, вы получите конкретную SQLSession. В процессе использования mybatis каждая операция неотделима от SQLSession, поэтому очень важно получить SQLSession. Кроме того, SQLSession не может быть обмен и не является отсутствием потока, поэтому вы должны открывать один каждый раз, когда вам нужен SQLSession, а затем закрывать его после использования.
SQLSession Session = SQLSessionFactory.Opensession ();
Методы SQLSessionFactory Zhonghu District SqlSession:
Их основные различия:
Метод открытия по умолчанию не имеет параметров, он создаст SQLSession со следующими характеристиками:
Executortype имеет три значения:
Основные операции Mybatis - добавление, удаление, изменение и проверку, а именно вставить, удалять, обновить и выбирать. При выполнении этих основных операций вы можете напрямую использовать SQLSession для доступа к отображению в файле конфигурации Mapper, или вы можете использовать интерфейс Mapper, соответствующий файлу конфигурации Mapper для выполнения операций, предполагая, что параметры и возвращаемые значения методов, определенных в интерфейсе Mapper, должны быть такими же, как параметры и возвращаемые значения, определяемые в файле конфигурации Mapper. Кроме того, при использовании интерфейса Mapper соответствующие операторы SQL могут быть записаны в файле конфигурации Mapper, или они могут быть непосредственно помечены на соответствующие методы в интерфейсе Mapper, используя соответствующие аннотации. Это будет видно в следующем примере кода.
Вот серия примеров кодов:
Первый разместите класс инструментов, чтобы получить SQLSessionFactory:
импортировать java.io.ioexception; импортировать java.io.inputstream; Импорт org.apache.ibatis.io.resources; Импорт org.apache.ibatis.session.sqlsessionFactory; Импорт org.apache.ibatis.session.sqlsessionFactoryBuilder; открытый класс util {private static sqlSessionFactory sqlSessionFactory = null; static {try {inputStream is = resources.getResourceasStream ("config/mybatis_config.xml"); sqlSessionFactory = new sqlSessionFactoryBuilder (). Build (IS); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} public static sqlSessionFactory getSqlSessionFactory () {return sqlSessionFactory; }}
Файл конфигурации mybatis:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Конфигурация doctype public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> resource = "config/jdbc.properties"> </properties> <typealiases> <typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> </typealiases> <среда default = "development"> <среда идентификатор = "развитие"> <transactionmaner = "jdbc"/> <developmy emance ud = "transactionmaner =" name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource = "com/tiantian/mybatis/model/blogmapper.xml"/> </mappers> </configuration>
Blogmapper.xml
<? 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"> <mapper.org/dtd/mybatis-3-mapper.dtd " namespace = "com.tiantian.mybatis.model.blogmapper"> <!-Добавить запись-> <INSERT ID = "INSERTBLOG" PARAMETERTYPE = "Блог"> Вставьте в T_BLOG (заголовок, контент, владелец) значения (#{Title},#{Content},#{владелец}) </insert> <! ParameterType = "int" recoudType = "blog"> select * from t_blog, где id = #{id} </select> <!-Модифицировать запись-> <Обновление id = "updateblog" parametertype = "blog"> Обновление t_blog set title = #{title}, content = #{content}, владелец = #{владелец}, где # # # # #{ # #{ #{ # upport { # upport { #{ # upport { # upport { #{ #{ #zerme upecter) и запросить несколько записей, чтобы вернуть результат, является коллекцией. ResultType-это не тип сбора, а тип, содержащийся в коллекции-> <SELECT ID = "SELECTALL" RESTORATYPE = "BLOG"> SELECT * FROM T_BLOG </select> <!-Fuzzy Query-> <SELECT ID = "fuzzyquery" resultyTepe = "blog" ParameterType = "java.lang.String"> select * stect 'wise "#######) </select> <!-delete record-> <delete id = "deleteblog" parametertype = "int"> удалить из t_blog, где id = #{id} </delete> </mapper>Некоторые проблемы, которые должны быть отмечены в заявлениях о картировании SQL:
Blog.java
пакет com.tiantian.mybatis.model; Блог публичного класса {Private Int ID; Приватная строка название; частный строковый контент; частная строка владелец; public int getId () {return id; } public void setId (int id) {this.id = id; } public String getTitle () {return title; } public void settitle (строка заголовка) {this.title = title; } public String getContent () {return Content; } public void setContent (String Content) {this.content = content; } public String GetOwner () {return владелец; } public void setOwner (String владелец) {this.Owner = владелец; } @Override public String toString () {return "id:" + id + ", title:" + title + ", content:" + content + ", whing:" + владелец; }}
Blogmapper.java
пакет com.tiantian.mybatis.model; импортировать java.util.list; Импорт org.apache.ibatis.annotation.delete; Импорт org.apache.ibatis.annotation.insert; Импорт org.apache.ibatis.annotation.select; Импорт org.apache.ibatis.annotations.update; / *** В следующих операциях 1 записывает SQL в файле конфигурации, в то время как операции 2 напрямую указывают оператор SQL, который будет выполняться с помощью аннотаций*, поскольку полное имя Mapper такое же, как и имена пространства имен в файле blogmapper.xml, оно не может быть включено здесь. Public Blog SelectBlog (INT ID); @Select ("select * from t_blog, где id = #{id}") публичный блог selectblog2 (int id); public void insertblog (блог в блоге); @Insert ("Вставьте в t_blog (заголовок, контент, владелец) values (#{title},#{content},#{владелец})") public void insertblog2 (блог блога); public void updateblog (блог в блоге); @Update ("Обновление t_blog set tetlic =#{title}, content =#{content}, antual =#{владелец} где id =#{id}") public void updateblog2 (блог блога); public void deleteblog (int id); @Delete ("Удалить из t_blog, где id = #{id}") public void deleteblog2 (int id); Общедоступный список <wolar> selectall (); @Select ("select * from t_blog") public list <glog> selectall2 (); Общественный список <glog> fuzzyquery (название строки); @Select ("select * из t_blog, где заголовок как/"%/"#{title}/"%/"") public list <glog> fuzzyquery2 (string title); }
Тест1.java
пакет com.tiantian.mybatis.test; импортировать java.util.list; импорт org.apache.ibatis.session.sqlsession; Импорт org.junit.test; Импорт com.tiantian.mybatis.model.blog; Импорт com.tiantian.mybatis.util.util; / *** Эта серия операций заключается в написании SQL в файле конфигурации, а затем с использованием SQLSession для операции* @author andy**/ public class test1 {/ *** Добавить запись*/ @test public void testinsertblog () {sqlsession session = util.getsqlSessionFactory (). OpenSession ();); Блог блог = новый блог (); blog.settitle ("китайский"); blog.setContent («Сколько мечты было скрыто на ветру и дождь в течение пяти тысяч лет»); blog.setowner ("Daily"); session.insert ("com.tiantian.mybatis.model.blogmapper.insertblog", блог); session.commit (); session.close (); } / *** Запросить одну запись* / @test public void testSelectone () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Блог блог = (блог) session.selectone ("com.tiantian.mybatis.model.blogmapper.selectblog", 8); System.out.println (блог); session.close (); } / *** Модифицировать запись* / @test public void testupDateblog () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Блог блог = новый блог (); blog.setid (7); // идентификатор блога, который необходимо изменить blog.settitle («Китайский 2»); // Модифицировать название blog.setContent («Желтое лицо, черные глаза, неизменная улыбка»); // Модифицировать контент. блог); session.commit (); session.close (); } / *** Запрос всех записей* / @test public void testselectall () {sqlSession session = util.getSqlSessionFactory (). Opensession (); List <logs> blogs = session.selectlist ("com.tiantian.mybatis.model.blogmapper.selectall"); для (блог блогов: блоги) System.out.println (блог); session.close (); } / *** Fuzzy Query* / @test public void testfuzzyquery () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); String title = "Китай"; List <logs> blogs = session.selectlist ("com.tiantian.mybatis.model.blogmapper.fuzzyquery", title); для (блог блогов: блоги) System.out.println (блог); session.close (); } / *** Удалить запись* / @test public void testdeleteblog () {sqlSession session = util.getSqlSessionFactory (). Opensession (); session.delete ("com.tiantian.mybatis.model.blogmapper.deleteblog", 8); session.commit (); session.close (); }}
Тест2.java
пакет com.tiantian.mybatis.test; импортировать java.util.list; импорт org.apache.ibatis.session.sqlsession; Импорт org.junit.test; Импорт com.tiantian.mybatis.model.blog; Import com.tiantian.mybatis.model.blogmapper; Импорт com.tiantian.mybatis.util.util; / *** Эта серия операций состоит в том, чтобы записать операторы SQL в файле конфигурации,*, а затем работать через соответствующий интерфейс Mapper* @author andy***/ public class test2 {/ *** Добавить запись*/ @test public void testinsertblog () {sqlSession session = util.getSqlescessionFactory (). Блог блог = новый блог (); blog.settitle ("китайский"); blog.setContent («Сколько мечты было скрыто на ветру и дождь в течение пяти тысяч лет»); blog.setowner ("Daily"); Blogmapper blogmapper = session.getmapper (blogmapper.class); blogmapper.insertblog (блог); session.commit (); session.close (); } / *** Запросить одну запись* / @test public void testSelectone () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); Блог блог = blogmapper.selectblog (7); System.out.println (блог); session.close (); } / *** Модифицировать запись* / @test public void testupDateblog () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Блог блог = новый блог (); blog.setid (9); // идентификатор блога, который необходимо изменить blog.settitle («китайский 2»); // Модифицировать название blog.setContent («Желтое лицо, черные глаза, неизменная улыбка»); // Модифицировать контент Blog.Setowner («День 2»); // модифицированный владелец Blogmapper Blogmapper = Session.getmapper (blogmapper.cl. blogmapper.updateblog (блог); session.commit (); session.close (); } / *** Запрос всех записей* / @test public void testselectall () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); List <logs> blogs = blogmapper.selectall (); для (блог блогов: блоги) System.out.println (блог); session.close (); } / *** Fuzzy Query* / @test public void testfuzzyquery () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); String title = "Китай"; List <logs> blogs = blogmapper.fuzzyquery (название); для (блог блогов: блоги) System.out.println (блог); session.close (); } / *** Удалить запись* / @test public void testdeleteblog () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); blogmapper.deleteblog (10); session.commit (); session.close (); }}
Test3.java
пакет com.tiantian.mybatis.test; импортировать java.util.list; импорт org.apache.ibatis.session.sqlsession; Импорт org.junit.test; Импорт com.tiantian.mybatis.model.blog; Import com.tiantian.mybatis.model.blogmapper; Импорт com.tiantian.mybatis.util.util; / ** * Эта серия операций выполняется с использованием интерфейса Mapper *, но его соответствующий оператор SQL определяется на соответствующем методе в Mapper через соответствующую * аннотацию * @author andy * */ public Class Test3 {/ ** * Новая запись */ @test public void testinsert () {sqlSession session = util.getsqlessepsestionScessionSessepSessestionScessionSessestionSecory (););););). Blogmapper blogmapper = session.getmapper (blogmapper.class); Блог блог = новый блог (); blog.settitle ("title2"); blog.setContent ("content2"); blog.setowner ("владелец2"); blogmapper.insertblog2 (блог); session.commit (); session.close (); } / *** Найти одну запись* / @test public void testSelectone () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); Блог блога = blogmapper.selectblog2 (1); System.out.println (блог); session.close (); } / *** Найти несколько записей, вернуть результат в качестве коллекции* / @test public void testselectall () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); List <logs> blogs = blogmapper.selectall2 (); для (блог блогов: блоги) System.out.println (блог); session.close (); } / *** Модифицировать запись* / @test public void testupDate () {sqlSession session = util.getSqlSessionFactory (). Opensession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); Блог блог = новый блог (); blog.setid (3); blog.settitle ("title3"); blog.setContent ("Content3"); blog.setowner ("владелец3"); blogmapper.updateblog2 (блог); session.commit (); session.close (); } / *** Удалить запись* / @test public void testDelete () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); blogmapper.deleteblog2 (5); session.commit (); session.close (); } @Test public void testfuzzyquery () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); Blogmapper blogmapper = session.getmapper (blogmapper.class); List <warge> blogs = blogmapper.fuzzyquery2 ("China"); для (блог блогов: блоги) System.out.println (блог); session.close (); }}Соответствующее заявление о создании таблицы:
Создать таблицу `t_blog` (` id` int (11) не null auto_increment, `title` varchar (255) по умолчанию Null,` content` varchar (255) null по умолчанию, `varchr` varchar (50) по умолчанию Null, первичный ключ (` id`)))))