Mybatis的spring整合

目录

学习背景

Mybatis复习

首先是导入mybaits

配置mapper

调用sql

下面是测试类

学习整合spring-mybatis

Spring配置文件:

替换mybatis配置文件:

sqlsessionfactory配置:

!!!更正一下获取mybatis配置文件应该为configLocation

sqlSession的构造器注入:

使用sqlSession

封装mybatis的spring配置


学习背景

学习了spring和Mybatis之后我们来试着把他们整合到一块


Mybatis复习

首先是导入mybaits

新建一个maven文件,在pom.xml里导入

<dependencies>
        <dependency>
            <!--mybatis-->
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--Mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
</dependencies>

总体pom代码:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gao</groupId>
    <artifactId>Spring-Mybatis</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>BaseMybatis</module>
    </modules>

    <dependencies>
        <dependency>
            <!--mybatis-->
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--Mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--spring集成mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>
        <!--spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.15</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <build>
        <!--注意,如果将静态资源放在src/main/java中,那么编译时将被maven忽略,在target目录下将没有这些资源,此处,我们将
        mybatis的mapper.xml放在了dal包中,方便编程查看,所以需要将该目录添加为资源目录.
        -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
        


    </build>

</project>

接下来我们去配置mybatis的配置文件mybatis-config.xml

 我喜欢这样配置maven项目,分享一下

一个大父类,多个子类可以继承

mybatis-config.xml就放置在resources下就好

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">
<configuration>


    <!--基本jdbc连接数据库配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/jd_user?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="000511"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <mapper resource="com\gao\mapper\UserMapper.xml"/>


    </mappers>

</configuration>

 现在新手,每次都得从网上找模块来写入(求助简单快捷有效的方法)


配置mapper

配置完mybatis-config.xml我们来配置mapper

首先在mapper层创建俩名字一样的文件 

(尽量一样,这样在mybatis注册mapper不会出这么多问题)

之前在写登入注册的时候写了个user和usermapper方法,我直接copy了

User代码:

package com.gao.pojo;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

还有mapper代码

Java

为了省事我们就直接写一个简单的查询

package com.gao.mapper;

import com.gao.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
    @Select("select * from jd_user.user_login")
    List<User> select();
}

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.gao.mapper.UserMapper">



</mapper>

User代码

package com.gao.pojo;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

调用sql

配置完上面再配置一个sqlsessionfactory的工厂工具类

代码如下

package com.gao.utils;



import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

    public class SqlSessionFactoryUtil {
        private static org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory;
        static {
            try {
                String resource = "Mybatis-Config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }


至此,我们的配置以及工厂类都写完了

下面是测试类

在test里创个测试类

代码:

package com.gzc;

import com.gao.mapper.UserMapper;
import com.gao.pojo.User;
import com.gao.utils.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class test {

    @Test
    public void test(){
        SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = userMapper.select();
        for (User user : list) {
            System.out.println("user = " + user);
        }
    }
}

简单的测试是否连接数据库成功

 ok完事

我们的mybatis复习就到这

具体的包长这样

 

学习整合spring-mybatis

好复习完spring-mybatis我们来学习spring-mybatis的整合

首先我们先在Spring-Mybatis文件夹下继续创一个子类

把上面的一些东西copy过来

具体的mapper层和Pojo层等:

再在pom里加入

    <!--spring-jdbc spring连接数据库需要的东西 -->   
     <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.15</version>
        </dependency>
     <!--spring-->
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.15</version>
        </dependency>

 然后在资源包中引入一个Spring.xml的配置文件

Spring配置文件:

替换mybatis配置文件:

 我们在spring的bean里导入一个spring的数据源datasource

<!--使用spring的数据源替换mybatis-->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    
</bean>
</beans>

在bean的里面输入<property就会有如下提示:

name里面包含的是不是很熟悉

没错就是我们mybatis-config的property内容

 我们现在全都在spring里写,让spring帮我们配置

<!--使用spring的数据源替换mybatis-->
<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/jd_user?useSSL=false&amp;useServerPrepStmts=true"/>
    <property name="username" value="root"/>
    <property name="password" value="000511"/>
</bean>

我们直接copy过来

sqlsessionfactory配置:

然后配置spring里面sqlsessionfactory的bean文件

如图

 

 这样我们的factory工具类也不需要了

!!!更正一下获取mybatis配置文件应该为configLocation

 <property name="configLocation" value="classpath:../resources/Mybatis-Config.xml"/>

sqlSession的构造器注入:

 如图使用

org.mybatis.spring.SqlSessionTemplate这个类来获取

会报错提示我们的为存在构造函数

我们点进去查看他的类函数

 发现有一个需要factory的有参构造,那我们就可以直接利用上面我们写的factory方法给予相应值

 这样我们就获取了sqlsession,有了session我们就算正式连接数据库了

那么我们现在可以尝试一下

使用sqlSession

既然sqlSession已经变成对象,那么我们需要一个类方法实现他

package com.gao.mapper;

import com.gao.pojo.User;

import java.util.List;

public class UserMapperImpl implements UserMapper{

    @Override
    public List<User> select() {
        return null;
    }
}

创建个继承Mapper的类来实现

 通过setter来实现spring的set注入

我们就能获取原来session里面的所有方法:

 接下来我们就可以和之前一样用getmapper调用mapper了

再将这个类调入spring中

 这样就可以实现数据库的连接和使用了

封装mybatis的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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--使用spring的数据源替换mybatis-->
    <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/jd_user?useSSL=false&amp;useServerPrepStmts=true"/>
        <property name="username" value="root"/>
        <property name="password" value="000511"/>
    </bean>
    <!--再导入sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--从上面的dataSource获取数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--绑定mybatis配置文件(甚至不需要,直接把mybatis-config删了都行)-->
        <property name="configLocation" value="classpath:../resources/Mybatis-Config.xml"/>
        <!--配置mapper的路径-->
        <property name="mapperLocations" value="classpath:com/gao/mapper/UserMapper.xml"/>
    </bean>
    <!--sqlSession的获取-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--因为没有setFaction方法-->
        <!--这里我们使用构造器构造的方法把factory参数传入session的构造函数中-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    
</beans>

以上就是所有的mybatis配置文件

我们直接通过代码模板保存到idea里面

 下次就可以使用了

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值