• Spring整合Mybatis


    整合流程

    导入相关的包

    mybatis;mybatis-spring;spring-webmvc;spring-jdbc;aspectjweaver(AOP面向切面);mysql;lombok;junit

    可以参考mybitis-spring的文档进行学习:http://mybatis.org/spring/zh/index.html

    <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.3</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.3</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.2.4.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.4</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.4.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.18</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.10</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>

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

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

    字符编码的问题解决:

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>

    配置数据源

    <!--DateSource:使用Spring的数据源替换Mybatis的配置  C3P0 -->
        <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/company_system?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT" />
            <property name="username" value="root" />
            <property name="password" value="fengge666" />
        </bean>

    创建sqlSessionFactory和对应的sqlSession对象,绑定mybatis配置文件

    在 MyBatis-Spring 中,可使用SqlSessionFactoryBean来创建 SqlSessionFactory。要配置这个工厂 bean,只需要把下面代码放在 Spring 的 XML 配置文件中:

    在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。

    一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是 < settings> 或 < typeAliases>元素。

    SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。

    可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。

    <!--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/xlf/mapper/*.xml" />
        </bean>
    
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
        </bean>

    mapperLocations指定mapper目录下的所有xml文件

    configLocation对应mybatis的配置文件路径

    mybatis-config.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">
    <!-- mybaties的主配置文件-->
    <configuration>
        <!-- 配置类的别名-->
        <typeAliases>
            <package name="com.xlf.pojo"/>
        </typeAliases>
    
    </configuration>

    代码编写

    创建用户类:此处用了lombok的Data注解,便不需要构建get和set方法

    package com.xlf.pojo;
    
    import lombok.Data;
    
    @Data
    public class User {
    
        private String corpname;
        private String type;
        private String username;
    
    
    }

    创建接口,对应的xml,以及相应的实现类

    UserMapper.java

    package com.xlf.mapper;
    
    import com.xlf.pojo.User;
    
    import java.util.List;
    
    public interface UserMapper {
    
        public List<User> selectUser();
    
    }

    UserMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- mybaties的主配置文件-->
    <mapper namespace="com.xlf.mapper.UserMapper">
        
        <select id="selectUser" resultType="user">
            select * from qiye
        </select>
        
        
    </mapper>

    UserMapperImpl.java:私有化sqlSessionTemplate

    package com.xlf.mapper;
    
    import com.xlf.pojo.User;
    import org.apache.ibatis.session.SqlSession;
    import org.mybatis.spring.SqlSessionTemplate;
    
    import java.util.List;
    
    public class UserMapperImpl implements UserMapper {
    
        private SqlSessionTemplate sqlSession;
    
        public void setSqlSession(SqlSessionTemplate sqlSession) {
            this.sqlSession = sqlSession;
        }
    
        @Override
        public List<User> selectUser() {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            return mapper.selectUser();
        }
    }

    创建applicationContext.xml来进行xml的整合,以便于之后实现类的注册,将实现类UserMapperImpl注册,之后所有的实现类的注册只需写到applicationContext.xml即可

    spring-dao.xml只需负责数据源,sqlSessionFactory与sqlSession的创建即可

    mybatis-config.xml只需指定类的别名即可,其实也可以直接在sqlSessionFactory内进行绑定,不过为了突出使用了mybatis,还是使用了他的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"
           xmlns:asp="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 https://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <import resource="spring-dao.xml" />
    
        <bean id="userMapper" class="com.xlf.mapper.UserMapperImpl">
            <property name="sqlSession" ref="sqlSession" />
        </bean>
    
    
    </beans>

    对于,spring-dao.xml就是一个模板,可能更换项目只需要修改这三个

     进行测试:

    测试中,只需要取出对应的bean对象,也就是userMapper,然后调用其方法即可

    @Test
        public void f() throws IOException {
    
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
            for (User user : userMapper.selectUser()) {
                System.out.println(user);
            }
    
        }

    输出:

     

    至此,spring整合mybatis就完毕了。

    总结:相较于之前mybatis的编写,spring整合多出了一个实现类,通过将实现类在spring的xml中注册,然后通过context获取bean来调用其方法

    也不必在写一个sqlSession对象获取的类,可以直接使用session对象。

  • 相关阅读:
    【LuoguP4770】[NOI2018] 你的名字
    【LuoguP5171】Earthquake
    【LuoguP3747】[六省联考2017] 相逢是问候
    【LuoguP4916】魔力环
    YOLO2:实时目标检测视频教程,视频演示, Android Demo ,开源教学项目,论文。
    谷歌发布 TensorFlow Lite [官方网站,文档]
    Chinese-Text-Classification,用卷积神经网络基于 Tensorflow 实现的中文文本分类。
    Chinese-Text-Classification:Tensorflow CNN 模型实现的中文文本分类器[不分词版]
    Hinton's paper Dynamic Routing Between Capsules 的 Tensorflow , Keras ,Pytorch实现
    谷歌开发者:看可口可乐公司是怎么玩转TensorFlow的?
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/14190435.html
Copyright © 2020-2023  润新知