Spring整合mybatis配置
Mybatis是ibatis的升级版,是一个基于java的持久层框架。Mybatis是支持普通SQL查询,存储过程和高级映射的优秀的持久层框架,Mybatis 消除了几乎所有JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。源码下载:基于maven的spring mvc+Mybatis纯净版框架
步骤:
1、创建maven项目,详细可参考IDEA 创建基于Maven的spring mvc框架
2、修改pom.xml,添加mybatis对应包的依赖
<!--Mybatis核心包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!--Mybatis与spring整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
添加mysql对应包依赖
<span style="white-space:pre"> </span><dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<span style="white-space:pre"> </span><dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
3、自动生成所需的Dao,bean,和mapping文件,详细请参考
mybatis-generator 代码自动生成工具 自己手写也可以
并放到对应的目录,我的目录图如下:
代码如下:
KbCity.java
package com.spring.bean;
public class KbCity {
private Integer id;
private String name;
private Integer provinceId;
private Integer type;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name == null ? null : name.trim();}
public Integer getProvinceId() {return provinceId;}
public void setProvinceId(Integer provinceId) {this.provinceId = provinceId;}
public Integer getType() {return type;}
public void setType(Integer type) {this.type = type;}
}
KbCityMapper.java
package com.spring.dao;
import com.spring.bean.KbCity;
public interface KbCityMapper {
KbCity selectByPrimaryKey(Integer id);
}
KbCityMapper.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="com.spring.dao.KbCityMapper" >
<resultMap id="BaseResultMap1" type="com.spring.bean.KbCity" >
<id column="_ID_" property="id" jdbcType="INTEGER" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="PROVINCE_ID" property="provinceId" jdbcType="INTEGER" />
<result column="TYPE" property="type" jdbcType="INTEGER" />
</resultMap>
<select id="selectByPrimaryKey" resultMap="BaseResultMap1" parameterType="java.lang.Integer" >
select
*
from kb_city
where _ID_ = #{id,jdbcType=INTEGER}
</select>
</mapper>
当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句
比如上方代码中:
Dao层接口定义了KbCity selectByPrimaryKey(Integer id);
在mapper文件中,namespace为com.spring.dao.KbCityMapper,则可以直接使用KbCityMapper.selectByPrimaryKey(),而不需要写实现类
请注意,接口文件方法名和mapper文件id一一对应
4、创建mybatis配置文件,mybatis-config.xml,路径参考上图
<?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>
<!-- 类型别名是为 Java类型命名一个短的名字。 它只和 XML配置有关,只用来减少类完全 限定名的多余部分 -->
<typeAliases>
<typeAlias alias="kbCity" type="com.spring.bean.KbCity" />
</typeAliases>
<mappers>
<mapper resource="mybatis/mapper/KbCityMapper.xml"></mapper>
</mappers>
</configuration>
5、创建数据库配置属性文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/my_db?user=root&password=123456&useUnicode=true&characterEncoding=UTF-8
6、创建spring-mybatis配置文件
</pre><pre>
<?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: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:jdbc.properties" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
</bean>
<!-- 将数据源映射到sqlSessionFactory中 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
<!--<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />-->
</bean>
<!-- SqlSession模板类实例 -->
<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<!--======= 事务配置 Begin ================= -->
<!-- 事务管理器(由Spring管理MyBatis的事务) -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 关联数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--======= 事务配置 End =================== -->
<!--mapper配置-->
<bean id="kbCityMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.spring.dao.KbCityMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
也可不定义mapper,这时需要在mapper层添加注解
package com.spring.dao;
import com.spring.bean.KbCity;
import org.springframework.stereotype.Repository;
@Repository
public interface KbCityMapper {
KbCity selectByPrimaryKey(Integer id);
}
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。
SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
<!--扫描包注解-->
<mvc:annotation-driven />
<context:component-scan base-package="com.spring.*"/>
<!--导入spring配置信息-->
<import resource="classpath:spring/spring-mybatis.xml" />
至此,Mybatis的配置工作已经做完了,启动,测试看是否正常就OK了