Spring整合mybatis--mapper配置

一、这种整合mybatis的方式,直接得到mapper

是通过如下三步完成的:

   4.1 数据源装配

   4.2 sqlsessionFactory 装配  

   4.3 mapper bean装配

 

spring整合mybatis的入门程序:

参考文档:

http://mybatis.org/spring/zh/getting-started.html

 

1.导入依赖 pom.xml

<?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">
    <parent>
        <artifactId>Spring</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-06-mybatis</artifactId>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>


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

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

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

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

    </dependencies>


    <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>
</project>

2.实体类,接口(mapper)编写

 

3.mapper.xml

mybatis:

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


<mapper namespace="com.wang.mapper.UserMapper">
    <select id="queryUsers" resultType="user">
        select * from user
    </select>

</mapper>

4.spring bean的配置

结合mybatis原生使用:获得根据数据源得到sqlsessionfactory 然后获得sqlsession  然后得到mapper

mapper就可以操作数据库了。

  4.1 数据源装配

  4.2 sqlsessionFactory 装配  

  4.3 mapper bean装配

 

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

    <context:property-placeholder  location="classpath*:db.properties"  />


       <!--数据源配置,可以选择c3p0,spring template ,等  直接赋值方式-->
<!--    <bean id = "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>-->
<!--        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>-->
<!--        <property name="username" value="root"></property>-->
<!--        <property name="password" value="1111"></property>-->
<!--    </bean>-->

<!--    &lt;!&ndash;    数据源配置,可以选择c3p0,spring template 通过配置文件&ndash;&gt;-->
    <bean id = "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

<!--    sqlsessionFactory:用于加载dataSource ,设置别名,mapper文件位置等,类似于mybaits-config.xml配置信息
        sqlsessionFactory可以建立数据库连接
-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="typeAliasesPackage" value="com.wang.pojo"></property>
        <property name="mapperLocations" value="com/wang/mapper/UserMapper.xml"></property>
    </bean>

<!--    mapper bean.需要传入对应接口,以及sqlsessionFactory
        可以提供mapper,mapper中有各种操作数据的方法。
        -->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.wang.mapper.UserMapper"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>

</beans>

5 测试 

 

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

 

 

二、SqlsessionTemplate实现

 

1.dataSource

2.sqlsessionfactory

这两步和上面是一样的,下面不通过mapper而是sqlsession操作数据库:

3.注册sqlsession,这个sqlsession在insert和update ,delete语句会自动提交。

<!--  3  SqlSessionTemplate是SqlSession的实现类,注入 sqlSessionFactory -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    </bean>

4.建立Mapper的实现类

package com.wang.mapper;

import com.wang.pojo.User;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserMapperImpl implements UserMapper {
    private SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public void saveUser(User user) {
        sqlSession.insert("com.wang.mapper.UserMapper.saveUser",user);
    }

    @Override
    public void deleteUserBy(int id) {
        sqlSession.delete("com.wang.mapper.UserMapper.deleteUserBy",id);
    }

    @Override
    public List<User> queryUsers() {
        return sqlSession.selectList("com.wang.mapper.UserMapper.queryUsers");
    }
}

5.注册实现类对象,注入sqlsession

<!--     5 注册该实现类,注入sqlsession-->
    <bean id="userMapperImpl" class="com.wang.mapper.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"></property>
    </bean>

6.测试

    @Test
    public void test2(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mybatis01.xml");
        UserMapperImpl umi = applicationContext.getBean("userMapperImpl",UserMapperImpl.class);
//        展示删除之前的结果
        for (User user : umi.queryUsers()
        ) {
            System.out.println(user);
        }
//        根据id删除
        umi.deleteUserBy(5);
//        查找删除之后的结果,sqlsession注册时,并没有开启commit.但是通过结果发现,数据已经提交
        for (User user : umi.queryUsers()
        ) {
            System.out.println(user);
        }
    }

 

方法一,二的最终配置文件:

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

    <context:property-placeholder  location="classpath*:db.properties"  />


       <!--数据源配置,可以选择c3p0,spring template ,等  直接赋值方式-->
<!--    <bean id = "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!--        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>-->
<!--        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>-->
<!--        <property name="username" value="root"></property>-->
<!--        <property name="password" value="1111"></property>-->
<!--    </bean>-->

<!--    &lt;!&ndash;    数据源配置,可以选择c3p0,spring template 通过配置文件&ndash;&gt;-->
    <bean id = "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

<!--    sqlsessionFactory:用于加载dataSource ,设置别名,mapper文件位置等,类似于mybaits-config.xml配置信息
        sqlsessionFactory可以建立数据库连接
-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="typeAliasesPackage" value="com.wang.pojo"></property>
        <property name="mapperLocations" value="com/wang/mapper/*.xml"></property>
    </bean>


</beans>

 

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

<!--    datasource和sqlsessionfactory配置一次基本不会改动,所以配置到另外一个配置文件,用到的时候引入-->
    <import resource="applicationContext.xml"></import>

    <!--    mapper bean.需要传入对应接口,以及sqlsessionFactory
            可以提供mapper,mapper中有各种操作数据的方法。
            -->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.wang.mapper.UserMapper"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>

    </bean>

<!--  3  SqlSessionTemplate是SqlSession的实现类,注入 sqlSessionFactory -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    </bean>
<!--     4 此处需要增加UserMapper的实现类,在各个方法中使用sqlsession.-->
<!--     5 注册该实现类,注入sqlsession-->
    <bean id="userMapperImpl" class="com.wang.mapper.UserMapperImpl">
        <property name="sqlSession" ref="sqlSession"></property>
    </bean>

</beans>

 

法三  SessionTemplateDaoSupport 使用

不在spring的xml中显示注册sqlsession

3 在实现类中继承SessionTemplateDaoSupport获取,并使用。

package com.wang.mapper;

import com.wang.pojo.Blog;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;
//通过继承已有sqlsessionDaoSupport类,可以直接获得sqlsession
public class BlogMapperImpl extends SqlSessionDaoSupport implements BlogMapper{
    @Override
    public List<Blog> queryBlogs() {

        return this.getSqlSession().getMapper(BlogMapper.class).queryBlogs();
    }
}

4 注册实现类时需要注入sqlSessionFactory或SqlSessionTemplate

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

    <!--    datasource和sqlsessionfactory配置一次基本不会改动,所以配置到另外一个配置文件,用到的时候引入-->
    <import resource="applicationContext.xml"></import>


    <!--     3 此处需要增加Mapper的实现类,该类通过继承SessionTemplateDaoSupport类得到sqlsession-->
    <!--     4 注册该实现类,注入sqlSessionFactory或SqlSessionTemplate-->
    <bean id="blogMapperImpl" class="com.wang.mapper.BlogMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>

</beans>

 

测试:

    @Test
    public  void test3(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mybatis02.xml");
        BlogMapperImpl bmi = applicationContext.getBean("blogMapperImpl",BlogMapperImpl.class);
        for (Blog blog: bmi.queryBlogs()
             ) {
            System.out.println(blog);
        }

    }

查出来的结果:

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 整合 MyBatis-Plus 的步骤如下: 1.添加 MyBatis-Plus 和 MyBatis-Spring-Boot-Starter 依赖。在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.2</version> </dependency> ``` 2.添加数据库配置。在 application.yml 文件中添加以下配置: ``` spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false username: root password: root ``` 3.创建 Mapper 接口。在 mapper 接口上添加 @Mapper 注解,并且继承 BaseMapper 接口,例如: ``` @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 4.创建 Mapper XML 文件。在 resources 目录下创建 mapper 目录,并在该目录下创建与 Mapper 接口同名的 XML 文件,例如:UserMapper.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.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> <result column="email" property="email" /> </resultMap> <select id="selectById" resultMap="BaseResultMap"> select * from user where id=#{id} </select> </mapper> ``` 5.在 Service 中调用 Mapper 接口。例如: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } } ``` 这样,Spring Boot 就成功整合了 MyBatis-Plus 和 Mapper XML 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值