在网上查了MyBatis+Spring的结合,真的是太多太多了,可是没有几个代码是完整的..这两项整合花了我两天时间,终于被我整合完成…其实也很简单,原因:
JAR包的问题
…
由于Ibatis被改名为MyBatis,所以,网上很多都是有关Ibatis而MyBatis却很少很少…
本文以
MyBatis3.0.6 + Spring3.0.6
为例结合(一定要这个版本才行):
定义一个实体类:
Emp.java
package
com.lixing.scm.entity;
public
class
Emp {
private
String id;
private
String name;
private
String sex;
private
int
age;
private
String phone;
public
String getId() {
return
id;
}
public
void
setId(String id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String getSex() {
return
sex;
}
public
void
setSex(String sex) {
this
.sex = sex;
}
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age = age;
}
public
String getPhone() {
return
phone;
}
public
void
setPhone(String phone) {
this
.phone = phone;
}
}
定义实体内操作接口:EmpMapper.java
package
com.lixing.scm.test.mapper;
import
java.util.List;
import
java.util.Map;
import
com.lixing.scm.entity.Emp;
public
interface
EmpMapper {
void
insertEmp(Emp emp);
List<Emp> getAllEmp();
Emp getById(String id);
void
deleteEmp(String id);
void
updateEmp(Map<String,Object> map);
}
定义实体类操作接口的映射文件:EmpMapper.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.lixing.scm.test.mapper.EmpMapper”
>
<
parameterMap
type
=”com.lixing.scm.entity.Emp”
id
=”parameterMapEmp”
>
<
parameter
property
=”id”
/>
<
parameter
property
=”name”
/>
<
parameter
property
=”sex”
/>
<
parameter
property
=”age”
/>
<
parameter
property
=”phone”
/>
</
parameterMap
>
<
resultMap
type
=”com.lixing.scm.entity.Emp”
id
=”resultMapEmp”
>
<
result
property
=”id”
column
=”id”
/>
<
result
property
=”name”
column
=”name”
/>
<
result
property
=”sex”
column
=”sex”
/>
<
result
property
=”age”
column
=”age”
/>
<
result
property
=”phone”
column
=”phone”
/>
</
resultMap
>
<
insert
id
=”insertEmp”
parameterMap
=”parameterMapEmp”
>
INSERT INTO emp(id,name,sex,age,phone)
VALUES(?,?,?,?,?)
</
insert
>
<
select
id
=”getAllEmp”
resultMap
=”resultMapEmp”
>
SELECT * FROM emp
</
select
>
<
select
id
=”getById”
parameterType
=”String”
resultMap
=”resultMapEmp”
>
SELECT * FROM emp
WHERE id=#{value}
</
select
>
<
delete
id
=”deleteEmp”
parameterType
=”String”
>
DELETE FROM emp
WHERE id=#{value}
</
delete
>
<
update
id
=”updateEmp”
parameterType
=”java.util.Map”
>
UPDATE emp
SET name=#{name},sex=#{sex},age=#{age},phone=#{phone}
WHERE id=#{id}
</
update
>
</
mapper
>
Spring3.0.6定义:
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:aop
=”http://www.springframework.org/schema/aop”
xmlns:tx
=”http://www.springframework.org/schema/tx”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd”
>
<!–
–>
<
context:annotation-config
/>
<
context:component-scan
base-package
=”com.lixing.scm.test.*”
/>
<!–
jdbc.propertis Directory
–>
<
bean
class
=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”
>
<
property
name
=”locations”
value
=”classpath:jdbc.properties”
/>
</
bean
>
<
bean
id
=”MyDataSource”
destroy-method
=”close”
class
=”org.apache.commons.dbcp.BasicDataSource”
>
<
property
name
=”driverClassName”
value
=”${jdbc.driverClassName}”
/>
<
property
name
=”url”
value
=”${jdbc.url}”
/>
<
property
name
=”username”
value
=”${jdbc.username}”
/>
<
property
name
=”password”
value
=”${jdbc.password}”
/>
</
bean
>
<!–
SqlSessionFactory
–>
<
bean
id
=”sqlSessionFactory”
class
=”org.mybatis.spring.SqlSessionFactoryBean”
>
<
property
name
=”dataSource”
ref
=”MyDataSource”
/>
</
bean
>
<!–
ScanMapperFiles
–>
<
bean
class
=”org.mybatis.spring.mapper.MapperScannerConfigurer”
>
<
property
name
=”basePackage”
value
=”com.lixing.scm.test.mapper”
/>
</
bean
>
<!–
================================事务相关控制=================================================
–>
<
bean
name
=”transactionManager”
class
=”org.springframework.jdbc.datasource.DataSourceTransactionManager”
>
<
property
name
=”dataSource”
ref
=”MyDataSource”
>
</
property
>
</
bean
>
<
tx:advice
id
=”userTxAdvice”
transaction-manager
=”transactionManager”
>
<
tx:attributes
>
<
tx:method
name
=”delete*”
propagation
=”REQUIRED”
read-only
=”false”
rollback-for
=”java.lang.Exception”
no-rollback-for
=”java.lang.RuntimeException”
/>
<
tx:method
name
=”insert*”
propagation
=”REQUIRED”
read-only
=”false”
rollback-for
=”java.lang.RuntimeException”
/>
<
tx:method
name
=”update*”
propagation
=”REQUIRED”
read-only
=”false”
rollback-for
=”java.lang.Exception”
/>
<
tx:method
name
=”find*”
propagation
=”SUPPORTS”
/>
<
tx:method
name
=”get*”
propagation
=”SUPPORTS”
/>
<
tx:method
name
=”select*”
propagation
=”SUPPORTS”
/>
</
tx:attributes
>
</
tx:advice
>
<
aop:config
>
<
aop:pointcut
id
=”pc”
expression
=”execution(public * com.lixing.scm.test.service.*.*(..))”
/> <!–把事务控制在Service层–>
<
aop:advisor
pointcut-ref
=”pc”
advice-ref
=”userTxAdvice”
/>
</
aop:config
>
<!–
以下为自定义Bean
–>
<
bean
id
=”empDao”
class
=”com.lixing.scm.test.dao.impl.EmpDaoImpl”
autowire
=”byName”
/>
<
bean
id
=”empService”
class
=”com.lixing.scm.test.service.impl.EmpServiceImpl”
autowire
=”byName”
/>
</
beans
>
DAO接口:EmpDAO.java
package
com.lixing.scm.test.dao;
import
java.util.List;
import
java.util.Map;
import
com.lixing.scm.entity.Emp;
public
interface
EmpDao {
void
insertEmp(Emp emp);
List<Emp> getAllEmp();
Emp getById(String id);
void
deleteEmp(String id);
void
updateEmp(Map<String, Object> map);
}
DAO接口实现类:EmpDaoImpl.java
package
com.lixing.scm.test.dao.impl;
import
java.util.List;
import
java.util.Map;
import
com.lixing.scm.entity.Emp;
import
com.lixing.scm.test.dao.EmpDao;
import
com.lixing.scm.test.mapper.EmpMapper;
public
class
EmpDaoImpl
implements
EmpDao {
private
EmpMapper empMapper;
//在此处注入一个empMapper
//这个empMapper由 Spring自动生成
//不需要我们自己手工去定义
@Override
public
void
insertEmp(Emp emp) {
this
.empMapper.insertEmp(emp);
throw
new
RuntimeException(
“Error”
);
//测试抛出RuntimeException
//异常查看数据库是否存在记录
}
@Override
public
void
deleteEmp(String id) {
this
.empMapper.deleteEmp(id);
}
@Override
public
List<Emp> getAllEmp() {
return
this
.empMapper.getAllEmp();
}
@Override
public
Emp getById(String id) {
return
this
.empMapper.getById(id);
}
@Override
public
void
updateEmp(Map<String, Object> map) {
this
.empMapper.updateEmp(map);
}
public
EmpMapper getEmpMapper() {
return
empMapper;
}
public
void
setEmpMapper(EmpMapper empMapper) {
this
.empMapper = empMapper;
}
}
Service层接口:EmpService.java
package
com.lixing.scm.test.service;
import
com.lixing.scm.entity.Emp;
public
interface
EmpService {
void
insertEmp(Emp emp);
}
Service层接口实现类:EmpServiceImpl.java
package
com.lixing.scm.test.service.impl;
import
com.lixing.scm.entity.Emp;
import
com.lixing.scm.test.dao.EmpDao;
import
com.lixing.scm.test.service.EmpService;
public
class
EmpServiceImpl
implements
EmpService {
private
EmpDao empDao;
@Override
public
void
insertEmp(Emp emp) {
empDao.insertEmp(emp);
}
public
EmpDao getEmpDao() {
return
empDao;
}
public
void
setEmpDao(EmpDao empDao) {
this
.empDao = empDao;
}
}
测试类:TestEmpService.java
import
org.junit.Test;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
com.lixing.scm.entity.Emp;
import
com.lixing.scm.test.service.EmpService;
public
class
TestEmpService {
@Test
public
void
testTrasaction(){
Emp emp=
new
Emp();
emp.setId(
“00000003”
);
emp.setName(
“某某某”
);
emp.setAge(50);
emp.setSex(
“男”
);
emp.setPhone(
“566666”
);
ApplicationContext ctx=
new
ClassPathXmlApplicationContext(
“classpath:applicationContext.xml”
);
EmpService service=ctx.getBean(EmpService.
class
);
service.insertEmp(emp);
}
}
本文出自 “
李新博客
” 博客,请务必保留此出处
http://kinglixing.blog.51cto.com/3421535/723870