spring--整合Mybatis详解

整合Mybatis

步骤:

1.导入相关Maven依赖

  • junit

  • mybatis

  • mysql数据库连接

  • spring相关的

  • aop织入

  • mybatis-spring

2.编写配置文件

3.测试

回忆mybatis

还需连接数据库

导入依赖:

XML 复制代码
<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.编写实体类

java 复制代码
 package com.lyc.pojo;
 ​
 import lombok.Data;
 ​
 @Data
 public class User {
     private int id;
    private String name;
    private String pwd;
 }
复制代码

2.编写核心配置文件

复制代码
 
XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE configuration
         PUBLIC "-//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.编写接口

java 复制代码
 package com.lyc.Mapper;
 ​
 import com.lyc.pojo.User;
 ​
 import java.util.List;
 public interface UserMapper {
      List<User> selectUser();
 }
复制代码
4.编写Mapper.xml
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 namespace="com.lyc.Mapper.UserMapper">
 <select id="selectUser" resultType="user">
        select * from mybatis.user
 </select>
 ​
 </mapper>
复制代码
 ​5.测试
java 复制代码
 public class MyTest {
     @Test
      public 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.静态资源过滤问题

XML 复制代码
 <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

XML 复制代码
 <mappers>
     <mapper resource="com/lyc/Mapper/UserMapper.xml"/>
     <!-- 或者 -->
     <mapper class="com.lyc.Mapper.UserMapper"/>
 </mappers>

Mybatis-Spring

入门文档:mybatis-spring

依赖导入:

XML 复制代码
<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.编写数据源配置

XML 复制代码
 //数据源
 <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

XML 复制代码
 <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

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

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

复制代码
 
java 复制代码
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;
     }
 ​
     @Override
     public List<User> selectUser() {
         UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
         return mapper.selectUser();
     }
 }

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

java 复制代码
<bean id="userMapper" class="com.lyc.Mapper.UserMapperIpml">
        <property name="sqlSessionTemplate" ref="sqlSession"/>
     </bean>

6.测试使用

java 复制代码
 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方法中继续实现一个实现类

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

2.在spring中注册

XML 复制代码
<?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/beans
       http://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.测试

java 复制代码
 @Test
 public 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中的配置不要使用通配符

希望对大家有所帮助

相关推荐
花花鱼25 分钟前
itext7 html2pdf 将html文本转为pdf
java·pdf
小丁爱养花1 小时前
驾驭 Linux 云: JavaWeb 项目安全部署
java·linux·运维·服务器·spring boot·后端·spring
经年小栈1 小时前
性能优化-Spring参数配置、数据库连接参数配置、JVM调优
数据库·spring·性能优化
我爱拉臭臭1 小时前
kotlin音乐app之自定义点击缩放组件Shrink Layout
android·java·kotlin
一个小白11 小时前
C++ 用红黑树封装map/set
java·数据库·c++
嘵奇2 小时前
Java单例模式:实现全局唯一对象的艺术
java·开发语言·单例模式
eternal__day2 小时前
第二期:[特殊字符] 深入理解MyBatis[特殊字符]MyBatis基础CRUD操作详解[特殊字符]
java·spring·java-ee·maven·mybatis
Tiger_shl2 小时前
【Python语言基础】19、垃圾回收
java·python
无问8172 小时前
Lombok库
java·lombok
吃饭了呀呀呀2 小时前
🐳 深度解析:Android 下拉选择控件优化方案——NiceSpinner 实践指南
android·java