首页 > 其他分享 >整合Mybatis

整合Mybatis

时间:2023-04-10 20:49:35浏览次数:43  
标签:xml SqlSessionFactory SqlSessionTemplate spring MyBatis 整合 Spring Mybatis

步骤:
在pom.xml中导入相关jar包,注意版本号
junit

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

mybatis

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

mysql-connector-java

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

spring相关

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.10.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.10.RELEASE</version>
</dependency>

aspectJ AOP 织入器

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>

mybatis-spring整合包 【重点】

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>

配置Maven静态资源过滤问题!

<build>
    <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>

MyBatis-Spring学习

MyBatis-Spring 会将 MyBatis 代码无缝地整合到 Spring 中, 需要以下版本:
图片无法正常加载,请联系本文作者
要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:一个 SqlSessionFactory 和至少一个数据映射器类。
在 MyBatis-Spring 中,可使用 SqlSessionFactoryBean来创建 SqlSessionFactory。 要配置这个工厂bean,只需要在Spring的 XML配置文件中:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
</bean>

注意:

  • SqlSessionFactory 需要一个 DataSource(数据源)。 这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。
  • 在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建SqlSessionFactory的。而在 MyBatis-Spring中,则使用SqlSessionFactoryBean来创建。
  • 在MyBatis中,可以使用SqlSessionFactory来创建 SqlSession。一旦获得一个session之后,可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,可以关闭 session。
  • SqlSessionFactory 有一个唯一的必要属性:用于JDBC的 DataSource。这可以是任意的 DataSource 对象,它的配置方法和其它 Spring 数据库连接是一样的。
  • 一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是<settings><typeAliases> 元素。
  • 需要注意的是,这个配置文件并不需要是一个完整的MyBatis配置。确切地说,任何环境配置(<environments>),数据源(<DataSource>)和 MyBatis 的事务管理器(<transactionManager>)都会被忽略。SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置,并按要求设置自定义环境的值。
  • SqlSessionTemplate是MyBatis-Spring 的核心。
  • 模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,应该用 SqlSessionTemplate 来替换 MyBatis 默认的DefaultSqlSession实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。
  • 可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

现在,这个 bean 就可以直接注入到 DAO bean 中了。bean中添加一个SqlSession属性

public class UserMapperImpl implements UserMapper {
    private SqlSessionTemplate sqlSession;

    //所有操作之前都使用SQL session执行,现在使用SQL session template
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public List<User> getUserList() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.getUserList();
    }
}

注入 SqlSessionTemplate:

 <bean id="userMapper" class="com.gy.dao.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>

最终的spring.xml文件几乎不变

<?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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.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=utf8"/>
        <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" />
        <!--绑定Mabatis配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath*:com/kuang/dao/*.xml"/>
    </bean>
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--只能使用构造器注入sqlSessionFactory,因为没用set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <bean id="userMapper" class="com.kuang.dao.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
</beans>

测试

 @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
        UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
        for (User user : userMapper.getUserList()) {
            System.out.println(user);
        }
    }

此时Mybatis.xml文件很简洁,因为都被Spring整合了

<?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>
    <typeAliases>
        <package name="com.gy.pojo"/>
    </typeAliases>
</configuration>

标签:xml,SqlSessionFactory,SqlSessionTemplate,spring,MyBatis,整合,Spring,Mybatis
From: https://www.cnblogs.com/gyViolet/p/17304220.html

相关文章

  • mybatispuls的代码生成
    pom文件配置 <!--https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5......
  • mybatis代码
    /*//根据id查询详情publicvoidselectById()throwsIOException{//接受参数intid=1;//现在是固定数据,以后会变成动态数据//1.获取SqlSessionFactoryStringresource="mybatis-config.xml";InputStreaminputStream=Resourc......
  • MyBatisPlus——代码生成器
    代码生成器快速生成各项代码步骤创建Generator类,并创建main方法创建代码生成器AutoGeneratorautoGenerator=newAutoGenerator();连接要生成实体类的数据库DataSourceConfigdataSource=newDataSourceConfig();dataSource.setDriverName(......
  • MyBatisPlus——DML编程控制——乐观锁
    乐观锁业务并发现象带来的问题:秒杀最后一单用于中小型项目(2000请求以下)添加一个数据库字段,使每次请求修改数据时,这个字段就加一,当有多人同时请求时,这些人同时获取到的都是相同的该字段,但当有一人完成了秒杀后字段加一,其他同时获取到的该字段就不匹配了配置步骤数据库表中......
  • spring注解整合mybatis
    引入依赖<!--mybatis-spring与mybatis使用低版本适配--><!--https://mvnrepository.com/artifact/org.mybatis/mybatis-spring--><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version&......
  • MybatisPlus——DML编程控制——增删改
    DML编程控制id生成策略控制不同的表应用不同的id生成策略日志:自增(1,2,3,4,......)购物订单:特殊规则(FQ23948AK3843)外卖单:关联地区日期等信息(1004202003143491)关系表:可省略id......注解控制@TableId类型:属性注解位置:模型类中用于表示主键的属性定义上方作用:设置......
  • Mybatis-Plus详解(一篇带入了解底层原理)
    一.MP简介我们知道,Mybatis属于一个半自动的ORM框架。之所以说Mybatis是一个半自动的ORM框架,原因是它还需要我们自己在注解或是映射文件中编写SQL语句,并没有实现完全的自动化。SQL语句的编写,虽然增加了项目和业务需求实现的灵活性,但对一些基本表的操作而言,无疑增加了数据库操作的......
  • XP Android7.0+ 整合包
    下载链接代码如下:点击查看代码adbremountadbpush命令adbpush路径/systemadbshellsucd/systemmount-oremount-w/systemshscript.sh//出现Done表示成功了......
  • MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
    MQTT(EMQX)-LinuxCentOSDocker安装MQTT概述MQTT(MessageQueueTelemetryTransport)是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息协议,在物联网......
  • SpringBoot整合RocketMQ,老鸟们都是这么玩的!
    今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们,第三部分介绍如何封装RocketMQ以便更好地使用。1.SpringBoot整合RocketMQ在SpringBoot中集成RocketMQ......