MyBatis与Spring的整合


MyBatis 与 Spring 的整合。

在创建项目之前,首先在 MySQL 数据库中创建 mybatis 数据库和 user 表,sql 语句如下所示:

CREATE DATABASE mybatis;
USE mybatis;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` tinyint(2) NOT NULL,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

下面通过一个实例讲解如何使用 Eclipse 开发 MyBatis 入门程序。

下面通过一个实例实现 MyBatis 与 Spring 的整合,具体实现过程如下:

1.创建 Web 应用,导入相关JAR包

实现 MyBatis 与 Spring 的整合需要导入相关 JAR 包,包括 MyBatis、Spring 以及其他 JAR 包。

1)MyBatis 框架所需的 JAR 包
MyBatis 框架所需的 JAR 包包括它的核心包和依赖包,包的详情可参考《MyBatis简单搭建》。

2)Spring 框架所需的 JAR 包
Spring 框架所需的 JAR 包包括它的核心模块 JAR、AOP 开发使用的 JAR、JDBC 和事务的 JAR 包(其中依赖包不需要再导入,因为 MyBatis 已提供)
在这里插入图片描述
3)MyBatis 与 Spring 整合的中间 JAR 包
该jar包版本需要优先与Spring和Mabatis,该中间 JAR 包的版本为 mybatis-spring-2.0.2.jar,此版本可以从网址“https://mvnrepository.com/artifact/org.mybatis/mybatis-spring”下载。

4)数据库驱动 JAR 包
教程所使用的 MySQL 数据库驱动包为mysql-connector-java-8.0.15.jar。可以从网址“https://mvnrepository.com/artifact/mysql/mysql-connector-java”下载。

5)数据源所需的 JAR 包
在整合时使用的是 DBCP 数据源,需要准备 DBCP 和连接池的 JAR 包。

本教程所用版本的 DBCP 的 JAR 包为 commons-dbcp2-2.7.0.jar,可以从网址“http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi”下载。

最新版本的连接池的 JAR 包为 commons-pool2-2.8.0.jar,可以从网址“http://commons.apache.org/proper/commons-pool/download_pool.cgi”下载。

将以上所有JAR 导入 /WEB-INF/lib 目录下。
在这里插入图片描述

2.创建持久化类

在 src 目录下创建一个名为 com.po 的包,建立一个User类。

package com.po;

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

    public Integer getId() {
        return id;
    }
    public void setId(Integer 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 + "]";
	}
    
}

3.创建 SQL 映射文件

在 src 目录下创建一个名为 com.mybatis 的包,在该包中创建 MyBatis 核心配置文件 mybatis-config.xml 和 SQL 映射文件 UserMapper.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.dao.UserDao">
    <!-- 根据id查询一个用户信息 -->
    <select id="selectUserById" parameterType="Integer"
        resultType="com.po.User">
        select * from user where id = #{id}
    </select>
    <!-- 查询所有用户信息 -->
    <select id="selectAllUser" resultType="com.po.User">
        select * from user
    </select>
    <!-- 添加一个用户,#{username}为 com.mybatis.po.User 的属性值 -->
    <insert id="addUser" parameterType="com.po.User">
        insert into user (username,password)
        values(#{username},#{password})
    </insert>
    <!--修改一个用户 -->
    <update id="updateUser" parameterType="com.po.User">
        update user set username =
        #{username},password = #{password} where id = #{id}
    </update>
    <!-- 删除一个用户 -->
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id
        = #{id}
    </delete>
</mapper>

4.创建数据访问接口

在 src 目录下创建一个名为 com.dao 的包,在该包中创建 UserDao 接口,并将接口使用 @Mapper 注解为 Mapper,接口中的方法与 SQL 映射文件一致。

UserDao 接口的代码如下:

package com.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.po.User;

@Repository("userDao")
@Mapper
/*
* 使用Spring自动扫描MyBatis的接口并装配 (Spring将指定包中所有被@Mapper注解标注的接口自动装配为MyBatis的映射接口
*/
public interface UserDao {
    /**
     * 接口方法对应的SQL映射文件UserMapper.xml中的id
     */
    public User selectUserById(Integer id);
    public List<User> selectAllUser();
    public int addUser(User user);
    public int updateUser(User user);
    public int deleteUser(Integer id);
}

5.创建控制层

在 src 目录下创建一个名为 com.controller 的包,在包中创建 UserController 类,在该类中调用数据访问接口中的方法。

UserController 类的代码如下:

package com.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.dao.UserDao;
import com.po.User;

@Controller("userController")
public class UserController {
	
	@Autowired
    private UserDao userDao;
	
    public void test() {
        // 查询一个用户
        User auser = userDao.selectUserById(2);
        System.out.println(auser);
        System.out.println("============================");
        // 添加一个用户
        User addmu = new User();
        addmu.setUsername("陈恒");
        addmu.setPassword("chengheng");
        int add = userDao.addUser(addmu);
        System.out.println("添加了" + add + "条记录");
        System.out.println("============================");
        // 修改一个用户
        User updatemu = new User();
        updatemu.setId(1);
        updatemu.setUsername("张三");
        updatemu.setPassword("zhangsan");
        int up = userDao.updateUser(updatemu);
        System.out.println("修改了" + up + "条记录");
        System.out.println("============================");
        // 删除一个用户
        int dl = userDao.deleteUser(9);
        System.out.println("删除了" + dl + "条记录");
        System.out.println("============================");
        // 查询所有用户
        List<User> list = userDao.selectAllUser();
        for (User User : list) {
            System.out.println(User);
        }
    }
}

6.创建日志文件

在 src 目录下创建日志文件 log4j.properties,文件内容如下:

# Global logging configuration
log4j.rootLogger=ERROR,stdout
# MyBatis logging configuration...
log4j.logger.com.mybatis=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

7.创建 MyBatis 核心配置文件

在 src 目录下创建一个名为 com.mybatis 的包,在该包中创建 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">
<configuration>
	 <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>
    <!-- 告诉MyBatis到哪里去找映射文件 -->
    <mappers>
        <mapper resource="com/mybatis/UserMapper.xml" />
    </mappers>
</configuration>

8.创建 Spring 的配置文件

在 src 目录下创建配置文件 applicationContext.xml,在配置文件中配置数据源、MyBatis 工厂以及 Mapper 代理开发等信息。

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"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    <!-- 指定需要扫描的包(包括子包),使注解生效 -->
    <context:component-scan base-package="com.dao" />
    <context:component-scan base-package="com.controller" />
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url"
            value="jdbc:mysql:///mybatis?serverTimezone=Asia/Shanghai&amp;useSSL=true" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <!-- 最大连接数 -->
        <property name="maxTotal" value="30" />
        <!-- 最大空闲连接数 -->
        <property name="maxIdle" value="10" />
        <!-- 初始化连接数 -->
        <property name="initialSize" value="5" />
    </bean>
    <!-- 添加事务支持 -->
    <bean id="txManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 注册事务管理驱动 -->
    <tx:annotation-driven transaction-manager="txManager" />
    <!-- 配置SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 引用数据源组件 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 引用MyBatis配置文件中的配置 -->
        <property name="configLocation" value="classpath:com/mybatis/mybatis-config.xml" />
    </bean>
    <!-- Mapper代理开发,使用Spring自动扫描MyBatis的接口并装配 (Sprinh将指定包中的所有被@Mapper注解标注的接口自动装配为MyBatis的映射接口) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- mybatis-spring组件的扫描器,com.dao只需要接口(接口方法与SQL映射文件中的相同) -->
        <property name="basePackage" value="com.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
</beans>

9.创建测试类

在 com.controller 包中创建测试类 TestController,代码如下:

package com.controller;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestController {
    public static void main(String[] args) {
        String xmlPath = "applicationContext.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                xmlPath);
        UserController uc = (UserController) applicationContext
                .getBean("userController");
        uc.test();
    }
}

上述测试类的运行结果如图 所示。
在这里插入图片描述
从第 5 步中的 UserController 类可以看出,开发者只需要进行业务处理,不需要再写 SqlSession 对象的创建、数据库事务的处理等烦琐代码。因此,MyBatis 整合 Spring 后方便了数据库访问操作,提高了开发效率。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值