最近在自学spring,看到第五章时发现文章里介绍的只有基于jdbc,hibernate等于spring的整合,而本白项目中mybatis用的比较多,所以就自己动手整合了一下,中间也遇到了一些小麻烦,但最终还是完成了。特此记录。
项目目录结构:
首先,新建一个maven项目(不会新建maven的请点此链接:点我进链接)。然后是配置pom.xml,引入项目所需的jar包,具体配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MavenDemo</groupId>
<artifactId>springAndMybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springAndMybatis</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- spring相关jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<!-- mybatis相关jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.1</version>
</dependency>
<!-- 数据源druid jar包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<!-- log4j日志jar包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mysql驱动jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.2</version>
</dependency>
</dependencies>
</project>
所需jar包都准备齐全之后,开始构建项目。spring配置文件applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 加载数据库连接信息属性文件 -->
<context:property-placeholder location="classpath:config/db.properties" />
<!-- 启用注解机制,并自动扫描 -->
<context:component-scan base-package="MavenDemo.springAndMybatis" />
<!-- 数据源配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.username}"></property>
<property name="password" value="${db.password}"></property>
</bean>
<!-- SQLSessionFactory配置,此配置将自动扫描指定路径下的sqlmap xml文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="classpath:config/sqlmap/*.xml"></property>
</bean>
<!-- mybatis-spring 自动实现dao实现类的编写 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="MavenDemo.springAndMybatis" />
<property name="annotationClass" value="org.springframework.stereotype.Repository" />
<!-- <property name="sqlSessionFactoryBeanName" ref="sqlSessionFactory" /> -->
</bean>
</beans>
此处sqlmap的xml文件都是自动扫描的,所以并不需要创建mybatis的mapper配置文件,如需了解非扫描型的配置请参见:点我进链接。
db.properties:
<span style="font-size:10px;">db.url=jdbc:mysql://127.0.0.1:3306/pay
db.driverName=com.mysql.jdbc.Driver
db.username=root
db.password=auto102360</span>
log4j.properties(此文件放在src目录下即可):
<span style="font-size:10px;">### Global logging configuration
log4j.rootLogger=DEBUG, stdout
### Uncomment for MyBatis logging
log4j.logger.org.apache.ibatis=INFO
### 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</span>
MenuItem.xml:
<?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="MavenDemo.springAndMybatis.MenuItemDao">
<select id="getAll" resultType="MavenDemo.springAndMybatis.Menuitem">
SELECT * FROM menuitem
</select>
<select id="getMenuById" parameterType="java.lang.String"
resultType="MavenDemo.springAndMybatis.Menuitem">
SELECT * FROM menuitem where menuitemnbr = #{id}
</select>
</mapper>
MenuItemDao.java:
package MavenDemo.springAndMybatis;
import java.util.List;
import org.springframework.stereotype.Repository;
@Repository
public interface MenuItemDao {
public List<Menuitem> getAll();
public Menuitem getMenuById(String id);
}
Menuitem.java:
<span style="font-size:10px;">package MavenDemo.springAndMybatis;
import java.util.Date;
public class Menuitem {
private Long menuitemnbr;
private String menuitemdesc;
private String menuitemurl;
private String imagename;
private Long parentmenuitemnbr;
private Date datelastmaint;
private Integer menuitemlevnbr;
private String authitemcd;
private String template;
public Long getMenuitemnbr() {
return menuitemnbr;
}
public void setMenuitemnbr(Long menuitemnbr) {
this.menuitemnbr = menuitemnbr;
}
public String getMenuitemdesc() {
return menuitemdesc;
}
public void setMenuitemdesc(String menuitemdesc) {
this.menuitemdesc = menuitemdesc;
}
public String getMenuitemurl() {
return menuitemurl;
}
public void setMenuitemurl(String menuitemurl) {
this.menuitemurl = menuitemurl;
}
public String getImagename() {
return imagename;
}
public void setImagename(String imagename) {
this.imagename = imagename;
}
public Long getParentmenuitemnbr() {
return parentmenuitemnbr;
}
public void setParentmenuitemnbr(Long parentmenuitemnbr) {
this.parentmenuitemnbr = parentmenuitemnbr;
}
public Date getDatelastmaint() {
return datelastmaint;
}
public void setDatelastmaint(Date datelastmaint) {
this.datelastmaint = datelastmaint;
}
public Integer getMenuitemlevnbr() {
return menuitemlevnbr;
}
public void setMenuitemlevnbr(Integer menuitemlevnbr) {
this.menuitemlevnbr = menuitemlevnbr;
}
public String getAuthitemcd() {
return authitemcd;
}
public void setAuthitemcd(String authitemcd) {
this.authitemcd = authitemcd;
}
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
this.template = template;
}
}</span>
至此,项目已经搭建完毕,下面用测试验证一下:
App.java:
package MavenDemo.springAndMybatis;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
long t1 = System.currentTimeMillis();
ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml");
MenuItemDao dao = ac.getBean(MenuItemDao.class);
/*List<Menuitem> allMenu = dao.getAllMenu();
for (Menuitem menu : allMenu) {
System.out.println(menu.getMenuitemdesc());
}*/
Menuitem menu = dao.getMenuById("100100000");
long t2 = System.currentTimeMillis();
System.out.println(menu.getMenuitemdesc());
System.out.println(t2 - t1);
}
}
控制台将打印:
再看数据库中数据:
结果一致,测试成功!
本人也是小白一枚,如有不足之处,欢迎评论指正。