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的配置文件了。下面是内容:
下面是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配置文件:
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);
}
最后是测试:
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的整合项目!!个人QQ:1948831260