spring整合Mybatis(Mybatis-Spring)

什么是 MyBatis-Spring?

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

将spring与mybatis整合

  1. 导入maven依赖
<!--        mysql连接依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
<!--        mybatis与spring整合依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>
<!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <build>
        <!--   静态资源导出问题
        目的是把src/main/java和src/main/resource目录中的xml文件和properties配置文件包含到输出结果中,
        输出到classes目录中-->
        <resources>
            <resource>
                <directory>src/main/java</directory><!--所在目录-->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory><!--所在目录-->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
  1. 创建实体类
public class Book implements Serializable {
    
    

    private int id;
    private String name;
    private Double price;

    public Book(int id, String name, Double price) {
    
    
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public Book() {
    
    
    }

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public Double getPrice() {
    
    
        return price;
    }

    public void setPrice(Double price) {
    
    
        this.price = price;
    }

    @Override
    public String toString() {
    
    
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }


}
  1. 创建mapper接口类
public interface BookMapper {
    
    


    List<Book> queryList();
}
  1. 使用mapper.xml编写sql语句
<?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接口-->
<mapper namespace="com.chenhui.mapper.BookMapper">

    <select id="queryList" resultType="book">
        select * from book
    </select>
</mapper>
  1. 配置spring核心配置文件并整合mybatis
<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--    配置spring内置数据源Spring-JDBC-->
    <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_zr?serverTimezone=PRC"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--    配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--        引用数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--        绑定mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis.xml"/>
<!--        配置别名-->
        <property name="typeAliases" value="com.chenhui.pojo.Book"/>
<!--配置SQL语句mapper.xml文件-->
        <property name="mapperLocations" value="classpath:com/chenhui/mapper/*.xml"/>
    </bean>


<!--    配置SQLSession交给spring来管理-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--        只能使用构造器注入sqlSessionFactory,因为它没有set方法注入-->
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>


<!--    注册接口的实现类,交给spring来管理,需要一个SqlSessionTemplate对象进行执行操作-->
    <bean id="bookMapper" class="com.chenhui.mapper.BookMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
</beans>
  1. 编写接口实现类
public class BookMapperImpl implements BookMapper {
    
    

    private SqlSessionTemplate sqlSession;

    //通过set方法注入SqlSessionTemplate交给spring管理
    public void setSqlSession(SqlSessionTemplate sqlSession) {
    
    
        this.sqlSession = sqlSession;
    }

    //执行查询数据的方法
    public List<Book> queryList() {
    
    
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        return mapper.queryList();
    }
}
  1. 测试:
public static void main(String[] args) {
    
    
        //加载spring配置文件获取bean容器
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-dao.xml");
        //获取bean对象
        BookMapper bookMapper = context.getBean("bookMapper", BookMapper.class);
        //执行方法
        List<Book> books = bookMapper.queryList();
        System.out.println(books);
    }

结果:
在这里插入图片描述

方式二:使用SqlSessionDaoSupport替代SqlSessionTemplate

修改方式:

接口实现类

public class BookMapperImpl extends SqlSessionDaoSupport implements BookMapper {
    
    


    //执行查询数据的方法
    public List<Book> queryList() {
    
    
        //直接通过父类SqlSessionDaoSupport的getSqlSession获取sqlSessionTemplate对象
        BookMapper mapper = super.getSqlSession().getMapper(BookMapper.class);
        return mapper.queryList();
    }
}

spring核心配置文件整合mybatis

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--    配置spring内置数据源Spring-JDBC-->
    <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_zr?serverTimezone=PRC"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--    配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--        引用数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--        绑定mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis.xml"/>
<!--        配置别名-->
        <property name="typeAliases" value="com.chenhui.pojo.Book"/>
<!--配置SQL语句mapper.xml文件-->
        <property name="mapperLocations" value="classpath:com/chenhui/mapper/*.xml"/>
    </bean>



<!--    注册接口的实现类,交给spring来管理-->
    <bean id="bookMapper" class="com.chenhui.mapper.BookMapperImpl">
<!--由于SqlSessionDaoSupport创建sqlSessionTemplate需要一个sqlSessionFactory对象,因此通过set方法注入-->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

测试:

public static void main(String[] args) {
    
    
        //加载spring配置文件获取bean容器
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-dao.xml");
        //获取bean对象
        BookMapper bookMapper = context.getBean("bookMapper", BookMapper.class);
        //执行方法
        List<Book> books = bookMapper.queryList();
        System.out.println(books);
    }

结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/114113655