首页 > 编程语言 > 详细

Spring整合Mybatis

时间:2021-02-23 11:06:50      阅读:26      评论:0      收藏:0      [点我收藏+]

Spring整合Mybatis

第一种方式:SqlSessionTemplate

第一步:准备工作

  • 导入依赖
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>
<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>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.18</version>
</dependency>
  • 数据库
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT ‘主键ID‘,
  `name` varchar(30) DEFAULT NULL COMMENT ‘姓名‘,
  `age` int(11) DEFAULT NULL COMMENT ‘年龄‘,
  `email` varchar(50) DEFAULT NULL COMMENT ‘邮箱‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`name`,`age`,`email`) values 
(1,‘Jone‘,18,‘test1@baomidou.com‘),
(2,‘Jack‘,20,‘test2@baomidou.com‘),
(3,‘Tom‘,28,‘test3@baomidou.com‘),
(4,‘Sandy‘,21,‘test4@baomidou.com‘),
(5,‘Billie‘,24,‘test5@baomidou.com‘),
  • 实体类
@Data
public class User {
    private Long id;
    private String name;
    private int age;
    private String email;
}

第二步:编写接口以及xml

public interface UserMapper {
    public List<User> selectAllUser();
}
<?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.mlyr.dao.UserMapper">
    <select id="selectAllUser" resultType="user">
        select * from  user
    </select>
</mapper>

第三步:编写及接口实现类

public class UserMapperImpl implements UserMapper{
    //等价于MyBatis中的SqlSession,它在底层实现了它
    private SqlSessionTemplate sqlSession;
    //利用spring容器set方法注入SqlSessionTemplate
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    @Override
    public List<User> selectAllUser() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.selectAllUser();
    }
}

第四步:编写Spring配置文件(applicationContext.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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
    <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/test?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"/>
        <!--关联Mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--这会从类路径下加载所有在com/mlyr/dao/包和它的子包中的 MyBatis 映射器 XML 配置文件-->
        <property name="mapperLocations" value="classpath:com/mlyr/dao/*.xml"/>
    </bean>
    <!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--利用构造器注入-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
	<!--生成Bean,注入sqlSession-->
    <bean id="userMapper" class="com.mlyr.dao.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
</beans>

当然还能有mybatis的全局配置文件,他其中的所有配置,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.mlyr.pojo"/>
    </typeAliases>
</configuration>

第五步:测试

@Test
public void test1(){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper userMapper = (UserMapper) context.getBean("userMapper");
    List<User> list = userMapper.selectAllUser();
    for (User user : list) {
        System.out.println(user);
    }
}

第一种方式是Spring容器通过SqlSessionFactoryBean获取到sqlSessionFactory工厂,再通过工厂获取到SqlSessionTemplate(其实与MyBatis中的SqlSession大致相同),在将SqlSessionTemplate注入进Mapper接口的实现类中,就可以了。这种方式的缺点就是还要手动编写实现类

第二种方式:SqlSessionDaoSupport

  • 在第一种方式上进行修改

  • 第一种方式中的第三步,修改接口实现类

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
    //SqlSessionDaoSupport里面就有sqlSessionTemplate
    @Override
    public List<User> selectAllUser() {
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.selectAllUser();
    }
}
  • 修改spring配置文件
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
    <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/test?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"/>
        <!--关联Mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!--这会从类路径下加载所有在com/mlyr/dao/包和它的子包中的 MyBatis 映射器 XML 配置文件-->
        <property name="mapperLocations" value="classpath:com/mlyr/dao/*.xml"/>
    </bean>
    <!--spring管理接口实现类即可-->
    <bean id="userMapper" class="com.mlyr.dao.UserMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

第三种方式:MapperFactoryBean

第三种方式就牛逼了,和上面的相同,只需要改变两个地方即可!

  • 删除接口实现类,不需要,spring容器直接帮我们创建
  • 修改spring配置文件
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
    <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/test?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"/>
        <!--关联Mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
    <!--直接生成Mapper对象-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--指定要映射的mapper接口的全限定名-->
        <property name="mapperInterface" value="com.mlyr.dao.UserMapper"/>
        <!--注入sqlSession工厂-->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

第四种方式:MapperScannerConfigurer

第四种更牛逼,第二种的话,只能生成一个mapper对象,这个能批量生成!

  • 只需要在第二种方式的基础下,删除上方bean的id为userMapper的bean,替换下方代码
<!--批量生成mapper对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--注入sqlSession工厂-->
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    <!--扫描mapper接口所在的包-->
    <property name="basePackage" value="com.mlyr.dao"/>
</bean>

使用mybatis进行数据处理的四种方式

①SqlSessionTemplate②SqlSessionDaoSupport③MapperFactoryBean④MapperScannerConfigurer

①SqlSessionTemplate:这个需要写配置文件,在实现类中注入sqlsession,再使用sqlsession,是细颗粒控制(非接口开发)

②SqlSessionDaoSupport(存在与比较老的jar包中):这个只需要在实现类中继承特殊类(例如HibernateDaoSupport)

  就可以使用sqlsession(非接口方式开发)

③MapperFactoryBean:这个要写配置文件,把对应的所有接口在配置文件中引用即可,无需写实现类,需要手动注入(动态代理开发)

④MapperScannerConfigurer:这个要写配置文件,只要给出接口所在的包即可,会自动把包中的接口引入,

  无需写实现类,使用注解扫描的方式@Autowired(动态代理)

在SpringMVC中,你可以不必为每一个DAO都去写相应的实现,而交给SpringMVC替你创建。

为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。这个类可以让你直接注入数据映射器接口到你的 service 层 bean 中。当使用映射器时,你仅仅如调 用你的 DAO 一样调用它们就可以了,但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。

Spring整合Mybatis

原文:https://www.cnblogs.com/MLYR/p/14433765.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!