1、查看不同MyBatis版本整合Spring时使用的适配包; http://www.mybatis.org/spring/
2、下载整合适配包
https://github.com/mybatis/spring/releases
• 3、官方整合示例,jpetstore
https://github.com/mybatis/jpetstore-6
MyBatis-Spring | MyBatis | Spring |
---|---|---|
1.0.0 或 1.0.1 | 3.0.1 到 3.0.5 | 3.0.0 或以上 |
1.0.2 | 3.0.6 | 3.0.0 或以上 |
1.1.0 | 3.1.0 或以上 | 3.0.0 或以上 |
Mybatis整合Spring包
mybatis-spring-1.3.2.jar
1.整合Mybatis和Spring配置
结构
1.1 类
com.tangge.bean.employee.java
package com.tangge.bean;
import java.io.Serializable;
public class employee implements Serializable{
private int id;
private String lastName;
private String email;
private String gender;
private deptment dept;
public employee() {
}
public employee(int id, String lastName, String email, String gender) {
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public employee(String lastName, String email, String gender) {
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public deptment getDept() {
return dept;
}
public void setDept(deptment dept) {
this.dept = dept;
}
@Override
public String toString() {
return "employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", gender=" + gender +
", dept=" + dept +
'}';
}
public int getId() {
return id;
}
public String getLastName() {
return lastName;
}
public String getEmail() {
return email;
}
public String getGender() {
return gender;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setEmail(String email) {
this.email = email;
}
public void setGender(String gender) {
this.gender = gender;
}
}
1.2 接口
com.tangge.dao.employeeMapper.java
public interface employeeMapper {
public List<employee> getEmployees();
}
1.3 服务层
com.tangge.service.employeeService.java
package com.tangge.service;
import com.tangge.dao.employeeMapper;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.tangge.bean.employee;
@Service
public class employeeService {
@Autowired
private employeeMapper employeeMapper;
public List<employee> getemps(){
return employeeMapper.getEmployees();
}
}
1.4 mapper 配置XML
employeeMapper.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">
<!--
namespace:命名空间,指定为接口的全类名
-->
<mapper namespace="com.tangge.dao.employeeMapper">
<!--<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>-->
<select id="getEmployees" resultType="com.tangge.bean.employee">
select `id`, `last_name` lastName, `gender`, `email` from tbl_employee
</select>
</mapper>
1.5 mybatis 简单配置 XML
mybatis-config.xml 只留下setting等一些简单配置
<?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>
<settings>
<setting name="logImpl" value="LOG4J"/>
<setting name="jdbcTypeForNull" value="NULL"/>
<!--显示指定每个我们需要更改的值,即使他是默认的。防止版本更迭带来的问题-->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
<!--<setting name="mapUnderscoreToCamelCase" value="true"></setting>-->
</settings>
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="MySQL" value="mysql"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
</configuration>
1.6 * 最重要的spring配置
applicationContext.xml
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd">
<!--指定Spring希望控制所有业务逻辑组件:扫描包-->
<context:component-scan base-package="com.tangge"></context:component-scan>
<!--Spring控制业务逻辑。数据源。事务控制。AOP-->
<!--(1)数据源: 引用外部文件db.properties -->
<context:property-placeholder location="classpath:tangge/db.properties"/>
<!--配置jdbc-->
<bean id="datasource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${drivername}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${user}"></property>
<property name="password" value="${pass}"></property>
</bean>
<!--事务管理-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<!--启用事务注解 http://www.springframework.org/schema/tx-->
<!--http://www.springframework.org/schema/tx/spring-tx.xsd-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--
(2)整合mybatis
目的:1.spring管理所有组件,mapper的实现类
2.spring管理事务,spring声明式事务
-->
<!--(2.1)创建 SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<!--全局配置文件位置-->
<property name="configLocation" value="classpath:tangge/mybatis-config.xml"></property>
<!--指定 mapper 文件位置-->
<property name="mapperLocations" value="classpath:tangge/mapper/*.xml"></property>
</bean>
<!--(2.2)扫描所有mapper,自动注入
base-package:指定包下所有的mapper接口实现自动扫描并加入到ioc容器中
-->
<!--<mybatis-spring:scan base-package="com.tangge.dao" />-->
<!--第2个写法-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tangge.dao" />
</bean>
</beans>
---->【测试】:
public class SpringTest {
public static void main(String[] args) {
SpringTest test = new SpringTest();
test.getFirstLevelCache();
}
public void getFirstLevelCache() {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("classpath:tangge/applicationContext.xml");
employeeService service = applicationContext.getBean(employeeService.class);
List<employee> list = service.getemps();
System.out.println(list);
}
}
2.对应关系图
3.问题
java.lang.NoClassDefFoundError: org.springframework.beans.FatalBeanException
一:jar包未加载完整。
二:Eclipse/idea 运行JVM内存过小,调整JVM内存。
解决:
Eclipse:
在Window->Preferences中,选择Java->Installed JREs,修改已配置的JDK。
配置Default VM arguments即可。
-Xmx512M -Xms512M -XX:MaxPermSize=256M-Xss512K
https://blog.csdn.net/u013355724/article/details/52222463
IDEA:
idea.exe.vmoptions
idea64.exe.vmoptions
修改1024,两个