Каталог статей
Spring Foundation (6) Интеграция Mybatis
Необходимо загрузить банку с mybatis-spring.
Потому что в mybatis также много новых объектов, таких как SqlSession и т. Д., Которые можно разместить весной для хостинга.
<!-- spring操作数据库还需要一个spring-jdbc的包 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<!-- 与webmvc版本相同 -->
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
</dependencies>
Примечание! Пакет jar mybatis требуется во время настройки, В противном случае отчет: Bean должен быть из'org.apache.ibatis.session.SqlSessionFactory '
Mybatis-Spring
mybatis-spring поможет вам интегрировать код mybatis в Spring!
Шаги по использованию:
- Импортируйте банку mybatis-spring.
- Необходимо встроить SqlSessionFactory в контейнер Spring (Эта фабрика нуждается в создании источника данных)
- Необходимо встроить DataSource в контейнер Spring (Поскольку он изначально находится в файле конфигурации conf, используйте источник данных spring для замены источника данных в файле конфигурации.) Org.springframework.jdbc.datasource.DriverManagerDataSource
- Сгенерируйте sqlSession через SqlSessionTemplate (Шаблон необходимо ввести в sqlSessionFactory)
- Добавьте класс реализации в интерфейс картографа (Поскольку интерфейс не может быть новым объектом, объект сопоставления не может быть добавлен в контейнер Spring, поэтому требуется класс реализации.)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 创建一个spring的数据源对象 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="111111"/>
</bean>
<!-- 根据数据源创建一个sqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 以下属性不是必须的,绑定mybatis的配置文件,这样这个sqlSessionFactory就可以根据mybatis的配置文件的一些信息生成 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- 使用模板生成sqlSession,模板是根据SQLSessionFactory生成sqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
</beans>
В исходном sqlSessionFactory был сгенерирован на основе конфигурационного файла conf mybatis, теперь он создается после настройки в bean-компоненте, == поэтому этот bean-компонент SQLSessionFactory может настраивать все в файле mybatis-conf (включая подключение к конфигурационному файлу mybaits-conf ) == Но источник данных просто необходим!
Таким образом, файл конфигурации mybatis можно полностью заменить.
Как правило, в файле mybatis-conf осталось два элемента:Управление псевдонимами; управление настройками. Затем используйте configLocation для подключения.
public class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public interface UserMapper {
List<User> getUsers();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiu.mapper.UserMapper">
<select id="getUsers" resultType="User">
select * from `user`
</select>
</mapper>
Оказывается, объект сопоставления используется на уровне сервиса. После использования spring вам необходимо поместить объект сопоставления в контейнер Spring , но нет соответствующего класса для его создания, поэтому вы можете реализовать только следующий UserMapper в качестве класса реализации для создания объекта сопоставления и помещения его в контейнер spring. для менеджмента!
Согласно оригинальным mybaits, картограф создается посредством отражения. Но интерфейс не может создавать объекты, поэтому его нельзя поместить в контейнер Spring. Нет другого выхода, кроме как добавить еще один уровень Impl для реализации интерфейса, чтобы он мог создавать объекты.
public class UserMapperImpl implements UserMapper {
SqlSessionTemplate sqlSession;
@Override
public List<User> getUsers() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
return users;
}
public SqlSessionTemplate getSqlSession() {
return sqlSession;
}
public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<import resource="spring-dao.xml"/>
<bean id="userMapper" class="com.qiu.mapper.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
</beans>
SqlSessionDaoSupport
Это абстрактный класс, предоставляемый mybatis-spring. С этим классом нет необходимости писать sqlSession (то есть нет необходимости настраивать sqlSession в контейнере spring, но также требуются Factory и DataSource)
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
public getUsers(){
SqlSession session = getSqlSession();
retuen session.selectLise("com.qiu.mapper.UserMapper.getUsers");
}
}
<bean id="userMapper" class="com.qiu.mapper.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
На самом деле это не сильно упрощает, просто не нужно регистрировать sqlSession весной. Предыдущая операция должна зарегистрировать SqlSessionTemplate в контейнере spring и ввести его в UserMapperImpl для использования при создании sqlSession.
На одну операцию впрыска меньше. А инъекция bean-компонента userMapper - это фабрика инъекций (требуется родительскому классу SqlSessionDaoSupport)
Декларативная сделка
Основная причина использования mybatis-spring заключается в том, что он позволяет mybatis участвовать в управлении транзакциями Spring. Вместо создания нового выделенного диспетчера транзакций для mybatis, mybatis-spring использует класс Spring DataSourceTransactionManager для реализации управления транзакциями,
Чтобы включить функцию обработки транзакций Spring, создайте объект DataSourceTransactionManager в bean-компонентах файла конфигурации spring:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSoueceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
Весной есть два метода управления транзакциями:
- Декларативная транзакция: реализация АОП
- Программные транзакции: необходимо изменить исходный код
Этапы реализации:
-
Создайте объект управления транзакцией и передайте его в контейнер Spring для управления (указывая, что источник управляется транзакцией. Поскольку источник владеет какой базой данных и какая база данных используется)Создайте класс аспекта. Этот аспект предоставлен вам mybatis-spring! Вам нужно только создать объекты и настроить классы аспектов!
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSoueceTransactionManager"> <constructor-arg ref="dataSource"/> </bean>
-
Настройте уведомление о транзакции (уведомление - это метод, который нужно вставить. Это означает, что должны быть вставлены все методы добавления и удаления)Настроить этот класс аспекта
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/aop/spring-tx.xsd"> <!-- 注意这里的头信息需要配置 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSoueceTransactionManager"> <constructor-arg ref="dataSource"/> </bean> <!-- 配置事务的通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 给哪些方法配置事务 --> <tx:attributes> <!-- 给所有的add、delete方法添加事务 --> <tx:method name="add"/> <tx:method name="delete"/> <!-- 给所有的方法添加事务(增删改查) --> <tx:method name="*"/> </tx:attributes> </tx:advice> </beans>
Вы можете думать о transactionManager как о классе аспектов, а advice - это уведомление для настройки класса аспектов!
-
Запись транзакции конфигурации.Нарежьте лапшу в точке входа
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSoueceTransactionManager"> <constructor-arg ref="dataSource"/> </bean> <!-- 配置事务的通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 给哪些方法配置事务 --> <tx:attributes> <!-- 给所有的add、delete方法添加事务 --> <tx:method name="add"/> <tx:method name="delete"/> <!-- 给所有的方法添加事务(增删改查) --> <tx:method name="*"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="txPointCut" expression="execution(* com.qiu.mapper.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/> </aop:config>
Обратите внимание, что точкой входа здесь являются все методы всех классов mapper в пакете mapper.Поскольку метод в классе сопоставления является наиболее атомарным методом, после того, как эти атомарные методы операций jdbc поддерживают транзакции, метод сопоставления, используемый в службе, естественным образом поддерживает транзакции.