Spring 对 Mybatis 的整合思路

版权声明:未经作者允许,禁止私自转载! https://blog.csdn.net/qq_42726314/article/details/82977813

作为Bean容器,Spring框架提供了IoC机制,可以接管所有的组件的创建工作并进行依赖管理,整合的主要工作就是把Mybatis框架使用中所涉及的核心组件配置到Spring容器中,交给Spring和创建和管理。

具体来说,业务逻辑对象依赖基于Mybatis技术实现Dao对象,核心是获取SqlSession实例,则需要依赖SqlSessionFactory而SqlSessionFactory是SqlSessionFactoryBuider依据Mybatis配置文件中的数据源、SQL映射文件等信息来构建的。

整合优势:

Spring对Mybatis 进行整合,在对组件实现解耦的同时还能使Mybatis框架的使用变得更加方便和简单。此外,通过Spring提供的声明式事务等服务,能进一步简化开发工作量,提高开发效率。


整合示例

1、数据库建表添加测试数据

use mybatis;
CREATE TABLE `user`  (
  `uId` int(4) NOT NULL AUTO_INCREMENT,
  `uName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `uPwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `account` decimal(10, 2) NOT NULL,
  PRIMARY KEY (`uId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


INSERT INTO `user` VALUES (2, '张三', '123456', 123.00);
INSERT INTO `user` VALUES (9, '李四', '123123', 123.93);
INSERT INTO `user` VALUES (10, '王五', '123123', 200.93);

2、配置项目(重点)

连接数据库的配置文件:db.properties

//mysql驱动类
jdbc.driver=com.mysql.jdbc.Driver

//mysql连接的url地址
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8

//连接mysql数据库的用户名
jdbc.username=root

//连接mysql数据库的密码
jdbc.password=xiaotong

spring核心配置文件:spring.cfg.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:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   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-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


	<!-- 扫描包中注解标注类 -->
	<context:component-scan base-package="dao,service,entity,aop"/>

	<!-- 引入数据库配置文件 db.properties -->
	<context:property-placeholder location="classpath:db.properties" />

	<!-- 配置数据源,使用dbcp数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<!-- SqlSessionFactory配置 -->
	<!-- 让Spring管理SqlSessionFactory使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载mybatis的全局配置文件 -->
		<property name="configLocation" value="classpath:mybatis.cfg.xml" />
		<!--配置SQL映射文件-->
		<property name="mapperLocations">
			<list>
				<!--扫描mapper包下所有的xml格式的文件-->
				<value>classpath:mapper/userMapper.xml</value>
			</list>
		</property>
	</bean>

	<!--  使用MapperScannerConfigurer扫描指定包的接口,并自动生成MapperFactoryBean -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="dao"/>
	</bean>
</beans>

mybatis 核心配置文件:mybatis.cfg.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"/>
		<!--设置为FULL,自动匹配所有,则在resultMap中不进行匹配的字段也可以映射-->
		<setting name="autoMappingBehavior" value="FULL"/>
	</settings>

	<!--指向包含实体类的包-->
	<typeAliases>
		<package name="entity"/>
	</typeAliases>
</configuration>

2、实体类:User.java

package entity;

public class User {

    private int uId;

    private String uName;

    private String uPwd;

    private double account;

    public User() {
    }

    public User(int uId, String uName, String uPwd, double account) {
        this.uId = uId;
        this.uName = uName;
        this.uPwd = uPwd;
        this.account = account;
    }

    @Override
    public String toString() {
        return "User{" +
                "uId=" + uId +
                ", uName='" + uName + '\'' +
                ", uPwd='" + uPwd + '\'' +
                ", account=" + account +
                '}';
    }

    public int getuId() {
        return uId;
    }

    public void setuId(int uId) {
        this.uId = uId;
    }

    public String getuName() {
        return uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getuPwd() {
        return uPwd;
    }

    public void setuPwd(String uPwd) {
        this.uPwd = uPwd;
    }

    public double getAccount() {
        return account;
    }

    public void setAccount(double account) {
        this.account = account;
    }
}

3、数据访问层

dao层接口:userDao.java

package dao;

import entity.User;

import java.util.List;

public interface UserDao {
    List<User> getAllUser();
}

mapper映射文件:userMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDao">
    <select id="getAllUser" resultType="entity.User">
		select * from user
	</select>
</mapper>

4、服务层

服务层接口:userService.java

package service;

public interface UserService {
	void demo();
}

服务层实现类:userServiceImpl.java

package service;

import dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

@Service("userService")
public class UserServiceImpl implements UserService {
	@Autowired
	@Qualifier("userDao")
	private UserDao userDao;
	@Override
	public void demo() {
		// TODO Auto-generated method stub
		System.out.println(userDao.getAllUser());
	}
}

5、测试

junit测试:test.java


import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService;

public class test {
	@Test
	public void testDemo(){
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.cfg.xml");
		UserService service = (UserService)context.getBean("userService");
		service.demo();
	}

}

测试结果:

猜你喜欢

转载自blog.csdn.net/qq_42726314/article/details/82977813