【学习笔记】Spring整合Mybatis
回顾Mybatis
-
首先需要导入mybatis和mysql的依赖
-
需要一个配置文件,mybatis-config.xml
在这个配置文件中,需要配置连接数据库的环境
-
通过SqlSessionFactory创建SqlSession,之前我们是把这些代码提取为一个工具类
public class SqlSessionUtils { private static SqlSessionFactory sqlSessionFactory; static{ try { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
通过调用getSqlSession方法,获得SqlSession
-
开始进行业务的编写
-
需要实体类
-
持久层的接口和配置文件
在配置文件中用namespace绑定持久层接口,然后就可以在里面用标签写sql语句
-
在mybatis配置文件中,需要注册接口所对应的xml配置文件
-
-
测试
-
调用SqlSessionFactory工具类中的方法,获得sqlSession
-
sqlSession.getMapper() ,方法里面就是你写的持久层接口,返回值是mapper
-
用返回的mapper去调用接口里面的方法即可
-
不要忘记关闭sqlSession,节省资源
-
详见:
整合Mybatis方式一
在整合之前,需要导入如下依赖
除了mybatis导入的 mysql和 mabatis 和spring导入的spring-mvc、aop 还有以下依赖spring-jdbc、mybatis-spring
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
-
在spring配置文件中准备DataSource数据源,也就是连接数据库的,之前都是在mybatis的配置文件中进行环境的设置,现在我们用Spring提供的JDBC 来替换掉mybatis的配置
和注册bean一样,只是class用的是spring提供的 org.springframework.jdbc.datasource.DriverManagerDataSource
在这个bean中,可以对连接数据库的属性进行配置,就是Driver、url、username、password
<!-- datasource:数据源--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf-8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean>
这一步配置完毕后,在mybatis-config配置文件中
这些可以被替换掉了
-
之前在工具类中需要用SqlSessionFactory来创建SqlSession,现在也是通过注册bean的方式来注册一个SqlSessionFactory,class是spring提供的SqlSessionFactoryBean,它的属性需要上面创建的数据源
<!-- SqlSessionFactory--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> </bean>
在这个bean中,还可以绑定mybatis的配置文件,也可以直接在这里面完成mybatis配置文件中可以进行的配置。比如设置环境、别名、设置等
<property name="configLocation" value="classpath:mybatis-config.xml"/>
绑定mybatis配置后,这两个配置文件就连接起来了,在哪个配置文件中配置都可以
-
有了SqlSessionFactory,之前我们是用SqlSessionFactory去获取SqlSession,但现在我们使用SqlSessionTemplate,它就是相当于sqlSession。创建方法还是通过注册bean的方式,class是spring提供的SqlSessionTemplate。这个bean需要注入一个属性SqlSessionFactory,就是上面我们创建的,但只能通过构造器注入,因为它没有set方法
<!-- SqlSessionTemplate--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
-
之前是只有一个接口和接口的xml 就可以了,现在我们需要一个实现类,这个实现类需要实现上面的接口。在这个类中使用SqlSessionTemplate,是用组合的方式,还要有一个set方法,用来注入SqlSessionTemplate。
然后在重写的方法中,进行getMapper,获得mapper以后,就可以执行接口中的方法了。
package com.wang.mapper; import com.wang.pojo.User; import org.mybatis.spring.SqlSessionTemplate; import java.util.List; public class UserMapperImpl implements UserMapper{ //获得sqlSession,也就是SqlSessionTemplate private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public List<User> selectUser() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.selectUser(); } }
不要忘了把这个类注册到spring配置文件中。通过注册bean的方式,他需要的参数是sqlSessionTemplate,正是我们上面注册的那个。
-
测试,直接去调用UserMapper实现类中的方法即可。
@Test public void test01(){ ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml"); UserMapper userMapper = context.getBean("userMapper", UserMapper.class); List<User> users = userMapper.selectUser(); for (User user : users) { System.out.println(user); } }
整合Mybatis方式二
在方式一中,创建流程大概是:数据源dataSource--->SqlSessionFactory---> SqlSessionTemplate-->
通过set方法注入SqlSessionTemplate
方式二可以省略注册SqlSessionFactory的bean的步骤,直接向实现类bean注入SqlSessionFactory,前提是实现类需要继承SqlSessionDaoSupport类,然后调用getSqlSession方法就可以获得sqlSession了
新建一个实现类UserMapperImpl2
package com.wang.mapper;
import com.wang.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import java.util.List;
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
@Override
public List<User> selectUser() {
return getSqlSession().getMapper(UserMapper.class).selectUser();
}
}
在xml配置文件中,注册这个bean,里面的属性是SqlSessionFactory
<bean id="userMapper2" class="com.wang.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>