欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > spring--整合Mybatis详解

spring--整合Mybatis详解

2025/4/13 5:34:37 来源:https://blog.csdn.net/m0_73856804/article/details/147128726  浏览:    关键词:spring--整合Mybatis详解

整合Mybatis

步骤:

1.导入相关Maven依赖

  • junit

  • mybatis

  • mysql数据库连接

  • spring相关的

  • aop织入

  • mybatis-spring

2.编写配置文件

3.测试

回忆mybatis

还需连接数据库

导入依赖:

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>
</dependencies>

1.编写实体类

 package com.lyc.pojo;​import lombok.Data;​@Datapublic class User {private int id;private String name;private String pwd;}
 

2.编写核心配置文件

 
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">​<configuration><properties/>//日志<settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><typeAliases><package name="com.lyc.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="211314"/></dataSource></environment></environments><mappers><mapper class="com.lyc.Mapper.UserMapper"/></mappers>​</configuration>

3.编写接口

 package com.lyc.Mapper;​import com.lyc.pojo.User;​import java.util.List;public interface UserMapper {List<User> selectUser();}
4.编写Mapper.xml
 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.lyc.Mapper.UserMapper"><select id="selectUser" resultType="user">select * from mybatis.user</select>​</mapper>
 ​5.测试
 public class MyTest {@Testpublic void test1() throws IOException {String resource = "mybatis-config.xml";InputStream stream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);SqlSession session = sqlSessionFactory.openSession(true);UserMapper mapper = session.getMapper(UserMapper.class);mapper.selectUser().forEach(System.out::println);}}

6.测试结果:

Mybatis-BindingException原因总结:

1.静态资源过滤问题

 <build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
 ​

2.MyBatis 配置文件中未正确配置 Mapper

 <mappers><mapper resource="com/lyc/Mapper/UserMapper.xml"/><!-- 或者 --><mapper class="com.lyc.Mapper.UserMapper"/></mappers>

Mybatis-Spring

入门文档:mybatis-spring

依赖导入:

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>7.0.0-M2</version></dependency>
<!-- spring操作数据库的话,还需要一个spring-jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>
</dependencies>

1.编写数据源配置

 //数据源<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&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="211314"/>​</bean>

2.sqlSessionFactory

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="datasource" /><!--        绑定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/lyc/Mapper/UserMapper.xml"/></bean>

3.sqlSessionTemplate

  <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--        只能使用构造器注入sqlSessionFactory,因为没有set方法,无法依赖注入--><constructor-arg index="0" ref="sqlSessionFactory"/></bean>

4.需要给接口加上实现类

 
package com.lyc.Mapper;​import com.lyc.pojo.User;import org.mybatis.spring.SqlSessionTemplate;​import java.util.List;​public class UserMapperIpml implements UserMapper{//我们的所有操作,都是使用sqlSession来执行,在原来,现在都是用SqlSessionTemplate(模板)private SqlSessionTemplate sqlSessionTemplate;​public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate;}​@Overridepublic List<User> selectUser() {UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);return mapper.selectUser();}}

5.将自己写的实现类,注入到spring中,

<bean id="userMapper" class="com.lyc.Mapper.UserMapperIpml"><property name="sqlSessionTemplate" ref="sqlSession"/></bean>

6.测试使用

 public void test()  {ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);userMapper.selectUser().forEach(System.out::println);​}

总结:就是将mybatis的代码直接封装成工具类,注入spring!!!!

精简:SqlSessionDaoSupport

1.在Mapper方法中继续实现一个实现类

 public class UserMapperIpml extends SqlSessionDaoSupport implements UserMapper{@Overridepublic List<User> selectUser() {return getSqlSession().getMapper(UserMapper.class).selectUser();}//我们的所有操作,都是使用sqlSession来执行,在原来,现在都是用SqlSessionTemplate(模板)​}

2.在spring中注册

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    DataSource:使用spring的数据源替换mybatis的配置 c3p0 dbcp druid
我们这里直接使用spring提供的jdbc--><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&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="211314"/></bean>
<!--sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="datasource" />
<!--        绑定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/lyc/Mapper/UserMapper.xml"/></bean>
<!--    SqlSessionTemplate:就是我们使用的sqlSession--><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"/></bean><bean id="userMapper" class="com.lyc.Mapper.UserMapperIpml"><property name="sqlSession" ref="sqlSessionTemplate"/></bean>
</beans>

3.测试

 @Testpublic void test()  throws IOException{ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);userMapper.selectUser().forEach(System.out::println);​}

测试结果:

错误总结:1.在spring-dao.xml中如果添加了mapperLocation,需要将mybatis-config.xml中的映射文件删除,不然会报错,且mapperLocation中的配置不要使用通配符

希望对大家有所帮助

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词