您的位置:首页 > 移动开发

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

2016-09-18 22:48 796 查看
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的整合项目!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息