Spring框架应用之Mybatis简易联动其一

Mybatis 编写了一大堆的类还有各种XML映射,终于完成了对JDBC的“进化”,但正因如此,它也无意间迈入了Spring的领域。

——技术因联动而更加强大。

观察Mybatis项目

翻开之前编写的Mybatis项目:https://blog.csdn.net/qq_44598153/article/details/105385021,首先映入眼帘的就是全局配置文件 mybatis.xml,其中的红圈部分是本次联动必不可少的部分: 

回想学习Mybatis时,也是参照JDBC编写了这一动态映射。

再往下去看具体实现类中又引入了很多封装好的类,什么SqlSessionFactory、SqlSession一类的,如果查看源码研究它的构造器,可以尝试编写Spring的 bean,但那课程里用到了一个Jar,就省了吧何必费那劲, (以后研究各框架源码时再慢慢尝试

 

Jar包处理 

一个普通的Spring项目,先导核心容器外加一个日志Jar,这次还要导入一个Spring处理JDBC的 spring-jdbc-4.1.6.RELEASE.jar(手伸的确实长),将Mybatis项目中的核心包拿出,随后要导入mybatis-spring的Jar包,外加上需要的依赖的Spring里的 spring-tx-4.1.6.RELEASE.jar 包。完事之后大致是这样:

这里需要注意一个版本问题,中间儿我就被坑了一下。

开始编写XML映射

  • 数据源封装类,该类位于spring-jdbc.jar包下,可以按照这个全类名顺藤摸瓜找到源码,按构造器成员编写完成映射,这一块就完成了对Mybatis全局配置文件的映射
  • 
    <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/testJDBC"></property>
         <property name="username" value="root"></property>
         <property name="password" value="123456"></property>
    </bean>
  • 参照Mybatis项目编写的实体类,需要编写一个工厂bean用于构建SqlSessionFactory,原类位于mybatis-spring.jar 包下。
  • <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource"></property>
    </bean>
  • mybatis里映射文件的处理,这里的basePackage类似于mybatis里mapper的package,Spring会扫描这个包,给接口创建对象。第二个property引用了bean则是为了跟factory产生联动
  • <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<property name="basePackage" value="com.yang.mapper"></property>
        <property name="sqlSessionFactory" ref="factory"></property>
    </bean>
  • 最后简单编写一个Service的Bean
  •         <bean id="userService" class="com.yang.service.impl.userServiceImpl">
            	<property name="userMapper" ref="userMapper"></property>
            </bean>

开始实现

依照数据库的设计先创建一个userbean类,包含成员id、name、age、regtime

在mapper包下创建一个接口,当此包接受扫描时会为接口创建类对象,这一点就解释了为什么ApplicationContext下的getBeanDefinitionNames() 方法在查看所有对象是为什么会冒出来一个userMapper对象了

package com.yang.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.yang.pojo.userbean;

public interface UserMapper {
	@Select("select * from user")
	List<userbean> selectAll();
}

随后编写Service的接口及实现类,仔细查看userServiceImpl 类下的成员里有一个UserMapper 类,这个类并不是程序员手工创建,进一步对应了上面的包扫描

package com.yang.service;

import java.util.List;
import com.yang.pojo.userbean;

public interface userService {
	List<userbean> show();
}

//——————吴迪的分界线——————//

//——————下面是实现类——————//

package com.yang.service.impl;

import java.util.List;

import com.yang.mapper.UserMapper;
import com.yang.pojo.userbean;
import com.yang.service.userService;

public class userServiceImpl implements userService{
	private UserMapper userMapper;
	public UserMapper getUserMapper() {
		return userMapper;
	}
	public void setUserMapper(UserMapper userMapper) {
		this.userMapper = userMapper;
	}
	@Override
	public List<userbean> show() {
		// TODO Auto-generated method stub
		return userMapper.selectAll();
	}
}

最后是该项目的主类

package com.yang.Test;

import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yang.pojo.userbean;
import com.yang.service.impl.userServiceImpl;

public class demo01 {
	public static void main(String[] args) {
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//		String[] names=ac.getBeanDefinitionNames();
//		for(String name:names) {
//			System.out.println(name);
//		}
		userServiceImpl bean=ac.getBean("userService", userServiceImpl.class);
		List<userbean> list=bean.show();
		System.out.println(list);
	}
}

控制台运行结果,获取成功,o der k

 

无了无了

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值