mybatis3整合spring4-采用mapper动态代理的方式开发Dao

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013871100/article/details/52578686

mybatis3整合spring4-采用mapper动态代理的方式开发Dao

    最近想巩固学习mybatis的相关基础知识,下载了一套传智播客2015年的mybatis的学习,用了差不多4个晚上,终于学完了,感觉学了之后,对比与在公司参与开发的项目,觉得基础的东西又学到了许多,故而感到相当欣慰!!当然啦,刚开始看的时候,我还觉得不太乐意,因为自以为自己google搜索能力还行,有不懂的再去搜索不就行啦,后来学着学着发现原来有些东西其实自己还是不懂,一些懂的,也只是靠着自己的搜索,看看别人怎么干就怎么干,然后得到了效果,就没再理会了!!!感觉就像只“井底之蛙”啊,自信过头了,所以我觉得有时候还是放低心态,虚心求教,stay hungry,stay foolish没什么不好!至少我现在是这么认为的!!!

    好了,这篇博文我主要讲讲我学到的mybatis3整合spring4开发Dao的方法:mapper动态代理的方式。其实,我们以前开发ssh的时候,持久层框架是有hibernate来充当的,说白了,dao接口的实现类就是靠hibernate来实现的!而在mybatis,没有了“dao接口的实现类这一说法了,而换来了 mapper的动态代理,其实说白了,就是一个“xxxMapper.xml”文件。这个文件,不能小看,他其实还充当这“mybatis的二级缓存”这一角色,当然,这是后话了,各位博友可以自己去看看其他的博文。

    Mybatis整合spring,其实就是需要spring的IOC容器来管理mybatis的SqlSessionFactory,而不需要mybatis自己去管理了!接下来,咱们来瞧瞧咱们这个整合项目Mapper代理的开发(其实就是“dao接口的实现类”)。

    首先是项目的整体架构:


    其中,lib文件夹存放的是整合需要的全部jar包,可以来这里下载:我上传的资源-点击获取

    首先是spring的配置文件,其实整合过程,这个配置文件是比较重要的,后面整合springmvc后,还有一个比较重要的配置文件就是springmvc的配置文件了。下面是内容:

<?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:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd ">    
        
    
    <!-- 加载数据库配置信息 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    
    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    	<!-- 数据库基本配置 -->
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		
		<!-- 配置c3p0的其他信息 -->
		<property name="initialPoolSize" value="${initialPoolSize}"></property>
		<property name="maxPoolSize" value="${maxPoolSize}"></property>
		<property name="minPoolSize" value="${minPoolSize}"></property>
		<property name="acquireIncrement" value="${acquireIncrement}"></property>
		<property name="maxIdleTime" value="${maxIdleTime}"></property>
    </bean>
    
    <!-- 配置SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<!-- mybatis的配置文件 -->
    	<property name="configLocation" value="mybatis-config.xml"></property>
    	
    	<!-- 配置数据源 -->
    	<property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- mybatis的Mapper的扫描器 MapperScannerConfigure  会自动扫描
    	 mapper包下的所有接口自动生成代理对象: 对象名字为Mapper接口类名(首字母小写)
     -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<property name="basePackage" value="com.steadyjack.mapper"></property>
    	
    	<!-- 注意这里是SqlSessionFactoryBeanName -->
    	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
	    
</beans>

    下面是jdbc.properties:(注意设置为 UTF-8)

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_mybatis?useUnicode=true&characterEncoding=UTF-8 
jdbc.user=root
jdbc.password=123456

initialPoolSize=5

#连接池中拥有的最大连接数,如果获得新连接时会使连接总数超过这个值则不会再获取新连接,
#而是等待其他连接释放,所以这个值有可能会设计地很大,default : 15
maxPoolSize=30

minPoolSize=5

#连接池在无空闲连接可用时一次性创建的新数据库连接数,default:3
acquireIncrement=2

#连接的最大空闲时间,如果超过这个时间,某个数据库连接还没有被使用,则会断开掉这个连接,单位 s
maxIdleTime=20
    mybatis配置文件:

<?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>
	
	<!-- 定义别名 定义为pojo所在的包名-->
	<typeAliases>
		<package name="com.steadyjack.model"/>
	</typeAliases>

	
</configuration>

    log4j.properties:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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

    然后在mybatis数据库创建tb_user表:

DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userName` varchar(255) DEFAULT NULL COMMENT '用户名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `birthday` date DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES ('1', '王五', '12', '2016-09-06', '北京');
INSERT INTO `tb_user` VALUES ('2', '王五', '13', '2016-09-15', '南京');
    User模型:

package com.steadyjack.model;

import java.text.SimpleDateFormat;
import java.util.Date;

public class User {
	private Integer id;
	
	private String userName;
	
	private int age;
	
	private Date birthday;
	
	private String address;

	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 int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", age=" + age
				+ ", birthday=" +new SimpleDateFormat("yyyy-MM-dd").format(birthday) + ", address=" + address + "]";
	}

}

    开发UserMapper.java和UserMapper.xml:

package com.steadyjack.mapper;

import com.steadyjack.model.User;

public interface UserMapper {
	
	public User findUserById(Integer id);
	
}

<?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.steadyjack.mapper.UserMapper">
	
	<select id="findUserById" parameterType="java.lang.Integer" resultType="User">
		select * from tb_user where id=#{id}
	</select>
	
</mapper>

     最后是测试:

package com.steadyjack.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.steadyjack.mapper.UserMapper;
import com.steadyjack.model.User;

public class UserDaoImplTest {
	
	public ApplicationContext applicationContext;
	
	@Before  
    public void before() {  
		applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }  
	
	@Test
	public void testFindUserById() {
		UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper");
		User user=userMapper.findUserById(1);
		System.out.println(user);
	}

}

     会发现,启动开始会打印出一系列相关的日志信息。。。最后输出结果!

     好了,就介绍到这里吧!后期我会介绍spring4 springmvc4 mybatis3的整合项目!!



没有更多推荐了,返回首页