实体类:Emp.java
01 |
package com.lixing.scm.entity;
|
02 |
03 |
public class Emp {
|
04 |
private String id;
|
05 |
private String name;
|
06 |
private String sex;
|
07 |
private int age;
|
08 |
private String phone;
|
09 |
public String getId() {
|
10 |
return id;
|
11 |
}
|
12 |
public void setId(String id) {
|
13 |
this .id = id;
|
14 |
}
|
15 |
public String getName() {
|
16 |
return name;
|
17 |
}
|
18 |
public void setName(String name) {
|
19 |
this .name = name;
|
20 |
}
|
21 |
public String getSex() {
|
22 |
return sex;
|
23 |
}
|
24 |
public void setSex(String sex) {
|
25 |
this .sex = sex;
|
26 |
}
|
27 |
public int getAge() {
|
28 |
return age;
|
29 |
}
|
30 |
public void setAge( int age) {
|
31 |
this .age = age;
|
32 |
}
|
33 |
public String getPhone() {
|
34 |
return phone;
|
35 |
}
|
36 |
public void setPhone(String phone) {
|
37 |
this .phone = phone;
|
38 |
}
|
39 |
} |
定义实体内操作接口:EmpMapper.java
01 |
package com.lixing.scm.test.mapper;
|
02 |
03 |
import java.util.List;
|
04 |
import java.util.Map;
|
05 |
06 |
import com.lixing.scm.entity.Emp;
|
07 |
08 |
public interface EmpMapper {
|
09 |
void insertEmp(Emp emp);
|
10 |
List<Emp> getAllEmp();
|
11 |
Emp getById(String id);
|
12 |
void deleteEmp(String id);
|
13 |
void updateEmp(Map<String,Object> map);
|
14 |
} |
[代码] 定义实体类操作接口的映射文件:EmpMapper.xml
01 |
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02 |
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
03 |
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
04 |
< mapper namespace = "com.lixing.scm.test.mapper.EmpMapper" >
|
05 |
< parameterMap type = "com.lixing.scm.entity.Emp" id = "parameterMapEmp" >
|
06 |
< parameter property = "id" />
|
07 |
08 |
< parameter property = "name" />
|
09 |
< parameter property = "sex" />
|
10 |
< parameter property = "age" />
|
11 |
< parameter property = "phone" />
|
12 |
</ parameterMap >
|
13 |
|
14 |
< resultMap type = "com.lixing.scm.entity.Emp" id = "resultMapEmp" >
|
15 |
16 |
< result property = "id" column = "id" />
|
17 |
< result property = "name" column = "name" />
|
18 |
< result property = "sex" column = "sex" />
|
19 |
< result property = "age" column = "age" />
|
20 |
< result property = "phone" column = "phone" />
|
21 |
</ resultMap >
|
22 |
23 |
|
24 |
< insert id = "insertEmp" parameterMap = "parameterMapEmp" >
|
25 |
INSERT INTO emp(id,name,sex,age,phone)
|
26 |
VALUES(?,?,?,?,?)
|
27 |
</ insert >
|
28 |
< select id = "getAllEmp" resultMap = "resultMapEmp" >
|
29 |
SELECT * FROM emp
|
30 |
</ select >
|
31 |
< select id = "getById" parameterType = "String" resultMap = "resultMapEmp" >
|
32 |
33 |
SELECT * FROM emp
|
34 |
WHERE id=#{value}
|
35 |
</ select >
|
36 |
< delete id = "deleteEmp" parameterType = "String" >
|
37 |
DELETE FROM emp
|
38 |
WHERE id=#{value}
|
39 |
</ delete >
|
40 |
< update id = "updateEmp" parameterType = "java.util.Map" >
|
41 |
UPDATE emp
|
42 |
SET name=#{name},sex=#{sex},age=#{age},phone=#{phone}
|
43 |
WHERE id=#{id}
|
44 |
</ update >
|
45 |
46 |
</ mapper >
|
Spring3.0.6定义:applicationContext.xml
01 |
<? xml version = "1.0" encoding = "UTF-8" ?>
|
02 |
< beans xmlns = "http://www.springframework.org/schema/beans"
|
03 |
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
04 |
xmlns:context = "http://www.springframework.org/schema/context"
|
05 |
xmlns:aop = "http://www.springframework.org/schema/aop"
|
06 |
xmlns:tx = "http://www.springframework.org/schema/tx"
|
07 |
xsi:schemaLocation="http://www.springframework.org/schema/beans
|
08 |
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
|
09 |
http://www.springframework.org/schema/context
|
10 |
http://www.springframework.org/schema/context/spring-context-3.0.xsd
|
11 |
http://www.springframework.org/schema/tx
|
12 |
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
|
13 |
http://www.springframework.org/schema/aop
|
14 |
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
|
15 |
16 |
<!-- -->
|
17 |
18 |
< context:annotation-config />
|
19 |
< context:component-scan base-package = "com.lixing.scm.test.*" />
|
20 |
21 |
22 |
<!-- jdbc.propertis Directory -->
|
23 |
< bean
|
24 |
class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
|
25 |
< property name = "locations" value = "classpath:jdbc.properties" />
|
26 |
27 |
</ bean >
|
28 |
29 |
< bean id = "MyDataSource" destroy-method = "close"
|
30 |
class = "org.apache.commons.dbcp.BasicDataSource" >
|
31 |
< property name = "driverClassName" value = "${jdbc.driverClassName}" />
|
32 |
< property name = "url" value = "${jdbc.url}" />
|
33 |
< property name = "username" value = "${jdbc.username}" />
|
34 |
< property name = "password" value = "${jdbc.password}" />
|
35 |
36 |
</ bean >
|
37 |
38 |
<!-- SqlSessionFactory -->
|
39 |
< bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >
|
40 |
< property name = "dataSource" ref = "MyDataSource" />
|
41 |
</ bean >
|
42 |
<!-- ScanMapperFiles -->
|
43 |
44 |
< bean class = "org.mybatis.spring.mapper.MapperScannerConfigurer" >
|
45 |
< property name = "basePackage" value = "com.lixing.scm.test.mapper" />
|
46 |
</ bean >
|
47 |
48 |
49 |
50 |
|
51 |
|
52 |
< property name = "dataSource" ref = "MyDataSource" ></ property >
|
53 |
54 |
</ bean >
|
55 |
|
56 |
< tx:advice id = "userTxAdvice" transaction-manager = "transactionManager" >
|
57 |
< tx:attributes >
|
58 |
< tx:method name = "delete*" propagation = "REQUIRED" read-only = "false"
|
59 |
|
60 |
< tx:method name = "insert*" propagation = "REQUIRED" read-only = "false"
|
61 |
rollback-for = "java.lang.RuntimeException" />
|
62 |
< tx:method name = "update*" propagation = "REQUIRED" read-only = "false"
|
63 |
rollback-for = "java.lang.Exception" />
|
64 |
65 |
|
66 |
< tx:method name = "find*" propagation = "SUPPORTS" />
|
67 |
< tx:method name = "get*" propagation = "SUPPORTS" />
|
68 |
< tx:method name = "select*" propagation = "SUPPORTS" />
|
69 |
</ tx:attributes >
|
70 |
</ tx:advice >
|
71 |
|
72 |
< aop:config >
|
73 |
|
74 |
75 |
< aop:advisor pointcut-ref = "pc" advice-ref = "userTxAdvice" />
|
76 |
</ aop:config >
|
77 |
|
78 |
|
79 |
<!-- 以下为自定义Bean-->
|
80 |
< bean id = "empDao" class = "com.lixing.scm.test.dao.impl.EmpDaoImpl"
|
81 |
autowire = "byName" />
|
82 |
|
83 |
</ beans >
|
DAO接口:EmpDAO.java
01 |
package com.lixing.scm.test.dao;
|
02 |
03 |
import java.util.List;
|
04 |
import java.util.Map;
|
05 |
06 |
import com.lixing.scm.entity.Emp;
|
07 |
08 |
public interface EmpDao {
|
09 |
void insertEmp(Emp emp);
|
10 |
List<Emp> getAllEmp();
|
11 |
Emp getById(String id);
|
12 |
void deleteEmp(String id);
|
13 |
void updateEmp(Map<String, Object> map);
|
14 |
} |
DAO接口实现类:EmpDaoImpl.java
01 |
package com.lixing.scm.test.dao.impl;
|
02 |
03 |
import java.util.List;
|
04 |
import java.util.Map;
|
05 |
06 |
import com.lixing.scm.entity.Emp;
|
07 |
import com.lixing.scm.test.dao.EmpDao;
|
08 |
import com.lixing.scm.test.mapper.EmpMapper;
|
09 |
10 |
public class EmpDaoImpl implements EmpDao {
|
11 |
private EmpMapper empMapper; //在此处注入一个empMapper
|
12 |
|
13 |
@Override
|
14 |
public void insertEmp(Emp emp) {
|
15 |
this .empMapper.insertEmp(emp);
|
16 |
throw new RuntimeException( "Error" ); //测试抛出RuntimeException //异常查看数据库是否存在记录
|
17 |
}
|
18 |
19 |
@Override
|
20 |
public void deleteEmp(String id) {
|
21 |
this .empMapper.deleteEmp(id);
|
22 |
}
|
23 |
24 |
@Override
|
25 |
public List<Emp> getAllEmp() {
|
26 |
return this .empMapper.getAllEmp();
|
27 |
}
|
28 |
29 |
@Override
|
30 |
public Emp getById(String id) {
|
31 |
return this .empMapper.getById(id);
|
32 |
}
|
33 |
34 |
@Override
|
35 |
public void updateEmp(Map<String, Object> map) {
|
36 |
this .empMapper.updateEmp(map);
|
37 |
}
|
38 |
39 |
|
40 |
public EmpMapper getEmpMapper() {
|
41 |
return empMapper;
|
42 |
}
|
43 |
44 |
public void setEmpMapper(EmpMapper empMapper) {
|
45 |
this .empMapper = empMapper;
|
46 |
}
|
47 |
} |
Service层接口:EmpService.java
1 |
package com.lixing.scm.test.service;
|
2 |
3 |
import com.lixing.scm.entity.Emp;
|
4 |
5 |
public interface EmpService {
|
6 |
void insertEmp(Emp emp);
|
7 |
} |
Service层接口实现类:EmpServiceImpl.java
01 |
package com.lixing.scm.test.service.impl;
|
02 |
03 |
import com.lixing.scm.entity.Emp;
|
04 |
import com.lixing.scm.test.dao.EmpDao;
|
05 |
import com.lixing.scm.test.service.EmpService;
|
06 |
07 |
public class EmpServiceImpl implements EmpService {
|
08 |
private EmpDao empDao;
|
09 |
10 |
@Override
|
11 |
public void insertEmp(Emp emp) {
|
12 |
empDao.insertEmp(emp);
|
13 |
14 |
}
|
15 |
16 |
public EmpDao getEmpDao() {
|
17 |
return empDao;
|
18 |
}
|
19 |
20 |
public void setEmpDao(EmpDao empDao) {
|
21 |
this .empDao = empDao;
|
22 |
}
|
23 |
} |
测试类:TestEmpService.java
01 |
import org.junit.Test;
|
02 |
import org.springframework.context.ApplicationContext;
|
03 |
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
04 |
05 |
import com.lixing.scm.entity.Emp;
|
06 |
import com.lixing.scm.test.service.EmpService;
|
07 |
08 |
09 |
public class TestEmpService {
|
10 |
@Test
|
11 |
public void testTrasaction(){
|
12 |
Emp emp= new Emp();
|
13 |
emp.setId( "00000003" );
|
14 |
emp.setName( "某某某" );
|
15 |
emp.setAge( 50 );
|
16 |
emp.setSex( "男" );
|
17 |
emp.setPhone( "566666" );
|
18 |
|
19 |
|
20 |
EmpService service=ctx.getBean(EmpService. class );
|
21 |
service.insertEmp(emp);
|
22 |
}
|
23 |
} |
相关推荐
在本项目中,Spring主要负责管理Bean,如数据库连接池、事务管理、DAO和Service等。通过Spring的AOP,我们可以方便地实现事务控制和日志记录。同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action...
在实际应用中,Struts2负责处理用户请求和视图渲染,Spring作为核心容器管理依赖注入(DI)和面向切面编程(AOP),而MyBatis则作为持久层框架,负责与数据库交互。 【标签】"源码"意味着这个压缩包可能包含了一个...
在本Demo中,你需要理解如何配置MyBatis的核心配置文件(mybatis-config.xml),包括数据源设置、事务管理器配置以及Mapper扫描等。此外,还需要熟悉XML映射文件的编写,如定义SQL查询、插入、更新和删除操作。 ...
Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。 业务方案: 1、批处理定期提交。 2、并行批处理:并行处理工作。 3、...
2. 配置Spring:配置Spring的核心容器,包括bean的定义、事务管理、数据源以及Activiti的相关配置。使用`applicationContext.xml`文件进行这些配置。 3. 集成Spring MVC:配置Spring MVC的DispatcherServlet,定义...
2. 集成MyBatis:配置MyBatis的主配置文件,包括数据源、事务管理器、SqlSessionFactory和Mapper文件的位置。 3. 创建CXF服务:定义Web服务接口,实现该接口并配置到CXF中。CXF提供了基于注解的Web服务开发方式,...
此外,Spring MVC 可以与Spring框架的其他模块无缝集成,如依赖注入、事务管理等。 3. Mybatis: Mybatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的JDBC代码和...
在企业级Java开发中,"Maven + Spring + MyBatis + MySQL + 事务管理"是一个常见的技术栈组合,它们各自扮演着不同的角色,构建出高效、稳定的后端系统。 **Maven** 是一个项目管理和综合工具,它帮助开发者管理...
5、测试Spring+mybatis的框架搭建,写单元测试JUnit,测试事务配置等:model-->dao(mapper)-->service-->test 6、映入SpringMVC:配置SpringMVC配置信息。-->配置文件:spring-mvc.xml(扫描controller) 7...
spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...
同时,Spring的AOP机制使得事务管理、日志记录等横切关注点的实现变得简单,减少了代码的重复性。 在这个人事管理系统中,Spring还提供了Spring MVC框架来处理HTTP请求,实现视图与模型的分离。Controller接收请求...
在本项目中,Spring将作为服务层和控制层的基石,负责管理bean的生命周期和事务处理。 MyBatis是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解配置将SQL语句与Java代码关联起来。MyBatis消除了几乎所有...
在本项目中,Spring不仅管理了SpringMVC和MyBatis的生命周期,还负责事务控制和业务服务的组装。 jQuery是一个流行的JavaScript库,简化了DOM操作、事件处理、动画效果和Ajax交互。在本项目中,jQuery用于增强用户...
"springtest" 是Spring框架的一部分,提供了测试支持,包括对Spring应用上下文的加载、模拟依赖注入、声明式事务管理等,使得对Spring应用进行单元测试和集成测试变得简单。 在集成MyBatis、Spring和Spring Test的...
当MyBatis与Spring整合时,Spring可以负责管理MyBatis的SqlSessionFactory和SqlSession,使得事务管理和对象的创建更加便捷。 在MyBatisDemo中,我们需要进行以下步骤来配置MyBatis: 1. 创建MyBatis的配置文件...
本系统以“Spring Boot + MyBatis + thymeleaf + MySQL + jQuery + ajax”为核心技术栈,构建了一个轻量级、易维护的图书借阅管理系统,旨在提供一套完整且实用的图书管理解决方案。 首先,Spring Boot作为Java领域...
此外,还可以通过TransactionManager配置实现事务管理,使得Mybatis的操作能够参与到Spring的事务管理中。 4. **JSP**:在"MyBatis_Spring3_jsp"这个文件名中,JSP代表JavaServer Pages,是Java Web开发中的视图层...
Spring MVC、MyBatis 和 ...在实际项目中,还需要配置相应的XML或Java配置文件,定义bean、数据源、事务管理器等,以实现各组件间的协同工作。同时,根据项目需求,可能还需集成其他工具,如日志、缓存、定时任务等。
而Spring框架作为企业级应用的基石,提供了依赖注入、面向切面编程、事务管理等多种功能,使得整个系统更加模块化,便于组件的管理和扩展。 在物流管理项目中,这些技术可能被用于实现以下核心功能: 1. **用户管理...
同时,Spring的AOP特性可以方便地实现事务管理和日志记录等横切关注点。 **4. Spring MVC** Spring MVC是Spring框架的一个模块,用于构建Web应用程序的Model-View-Controller架构。它提供了一种分层的方式来处理...