spring整合Mybatis需要导入多个jar,我就不一一说了,直接赋值pom.xml依赖就行了
<dependencies>
<!--导这个最大的包-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<!--导入这个包的依赖-->
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.8</version>
</dependency>
</dependencies>
版本关联
准备工作完成之后,我们就可以开始整合了。
第一步:新建applicationContext.xml的(Spring配置文件)
<!--使用Spring的数据源,代替Mybatis的核心配置文件 -->
<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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="88888888"/>
</bean>
tips:填写你们自己对应的用户名和密码,如果查询的结果是乱码,在jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8。注意xml配置文件中
&被转义了,& (分号也不能省略)才是普通的&,&表示和的意思。
第二步:新建Mybatis核心配置文件,在Spring中获取SqlSessionFactory对象,并且绑定mybatis核心配置文件,并将dataSource赋值给SqlSessionFactoryBean对象的dataSource属性。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--绑定mybatis核心配置文件-->
<property name="dataSource" ref="dataSource"/>
<!--mybatis全局配置文件的地址-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
第三步:给SqlSessionTemplate属性赋值,他就是SqlSession
<!--获取SqlSession-->
<!--sqlSessionTemplate就是sqlSession-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
这里为什么要用下标0 ?
因为SqlSessionTemplate类的第一个属性就是SqlSessionFactory对象,所有可以使用index=0
第四步:测试
或者,还有另外一种思想,当你拿到SqlSesesionTemplate类之后,新建一个UserMapperImple的类去实现UserMapper,并且注册到Spring中,这个类中内置一个SqlSessionTemplate属性,提供一个set方法,在Spring中通过set注入,将SqlSessionTemplate类注入给这个UserMapperImple类,然后通过此类去实现UserMapper中的所有方法,并且返回结果,我们只需要在测试类中调用即可,将此实现类看成是Service层的实现类。
使用实现类充当Service层的思想去做
第四步:新建UserMapperImple类,实现UserMapper接口
package com.guanzhu.mapper;
import com.guanzhu.POJO.User;
import org.junit.Test;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.ArrayList;
import java.util.List;
public class UserMapperImple implements UserMapper {
/*在mybatis中,我们的增删改查都是用的sqlSession,现在整合了,我们使用SqlSessionTemplate对象
* SqlSessionTemplate就是SqlSession,只是换了一个名字而已,仅此而已*/
private SqlSessionTemplate sqlSessionTemplate;
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
this.sqlSessionTemplate=sqlSessionTemplate;
}
public List<User> getUsers() {
UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
for (User user : mapper.getUsers()) {
System.out.println(user);
}
return new ArrayList<User>();
}
public int addUser(User user) {
UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
int i = mapper.addUser(user);
if(i>0){
//大于0则提交事务
sqlSessionTemplate.commit();
return i;
}else{
//不满足条件则回滚事务
sqlSessionTemplate.rollback();
return i;
}
}
}
第五步:在Spring中注册
<!--获取SqlSession-->
<!--sqlSessionTemplate就是sqlSession-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="userMapperImple" class="com.guanzhu.mapper.UserMapperImple">
<!--他相当于就是sqlSession的实现类,以后一切业务都在这里进行-->
<property name="sqlSessionTemplate" ref="sqlSessionTemplate"></property>
</bean>
第六步:测试
@Test
public void test04(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapperImple umi = ac.getBean("userMapperImple", UserMapperImple.class);
System.out.println("另外一种思想!");
List<User> users = umi.getUsers();
for (User user : users) {
System.out.println(user);
}
}
直接通过getBean ,通过id获取实现类就行了。通过调用实现类中已经写好的方法,来完成我们的需求,这样写,分工更加明确,当然,你要是不想多写一个实现类,第一种方式也是可以的。
最后,如果你遇到了
org.apache.ibatis.binding.BindingException: Type interface com.guanzhu.mapper.UserMapper is not known to the MapperRegistry.
问题原因,Spring核心配置文件中没有配置绑定Mybatis的核心配置文件,
如果少了下面这行代码,mapper.xml文件就不会被注册,加上即可解决。
<property name="configLocation" value="classpath:mybatis.xml"/>
今天你进步了吗?
人生没有白走的路,每走一步都算数。
2022.3.13 星期天 中午 晴