一、项目目录结构
二、导包
UTF-8
4.12
1.7.25
1.4
2.6
2.3.1
3.1.0
5.1.38
3.4.6
5.0.8.RELEASE
1.8.10
0.9.5.2
1.3.2
5.1.6.RELEASE
org.springframework
spring-webmvc
${spring-webmvc.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
com.mchange
c3p0
${c3p0.version}
org.aspectj
aspectjweaver
${aspect.version}
org.aspectj
aspectjrt
${aspect.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-test
${spring.version}
test
org.mybatis
mybatis
${mybatis.version}
mysql
mysql-connector-java
${mysql.version}
javax.servlet.jsp
javax.servlet.jsp-api
${javax.servlet.jsp-api.version}
provided
javax.servlet
javax.servlet-api
${javax.servlet-api.version}
provided
commons-fileupload
commons-fileupload
${commons-fileupload.version}
commons-io
commons-io
${commons-io.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
test
junit
junit
${junit.version}
test
三、domian、service、controller
3.1.domain包
3.1.1.BaseBean
package com.blog.domain;
public class BaseBean {
private Integer uid;
private String uname;
private Integer age;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "BaseBean [uid=" + uid + ", uname=" + uname + ", age=" + age + ", address=" + address + "]";
}
}
3.1.2.Account
package com.blog.domain;
public class Account {
private Integer id;
private String name;
private Double money;
private Double transferMoney;
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;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public Double getTransferMoney() {
return transferMoney;
}
public void setTransferMoney(Double transferMoney) {
this.transferMoney = transferMoney;
}
}
3.2.service包
3.2.1.AccountService接口
package com.blog.service;
import com.blog.domain.Account;
public interface AccountService {
//转账操作:账户a给账户b转账
public void transfer(Account a,Account b);
}
3.2.2.AccountServiceImpl实现类
package com.blog.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.blog.domain.Account;
import com.blog.mapper.AccountMapper;
@Service
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountMapper accountMapper;
@Override
public void transfer(Account a, Account b) {
//扣钱
accountMapper.reduce(a);
//异常
//int x=1/0;
//减钱
accountMapper.increase(b);
}
}
3.2.3.BaseSerive接口
package com.blog.service;
import com.blog.domain.BaseBean;
public interface BaseService {
public BaseBean getOneById(Integer uid);
}
3.2.4.BaseServiceImpl实现类
package com.blog.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.blog.domain.BaseBean;
import com.blog.mapper.BaseMapper;
@Service
public class BaseServiceImpl implements BaseService {
@Resource(name="baseMapper")
private BaseMapper baseMapper;
@Override
public BaseBean getOneById(Integer uid) {
return baseMapper.getOneById(uid);
}
}
3.3.controlller包
3.3.1.BaseController
package com.blog.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.blog.domain.BaseBean;
import com.blog.service.BaseService;
@Controller
@RequestMapping(value="/base")
public class BaseController {
@Resource(type=BaseService.class)
private BaseService baseService;
@GetMapping(value="/getOneById")
public @ResponseBody String getOneById(@RequestParam Integer uid) {
BaseBean bean = baseService.getOneById(uid);
System.out.println(bean);
return "成功访问";//给前端相应数据“成功访问”
}
@GetMapping(value="/")
public String toNewJsp() {
return "new";//会跳转到/webapp/views/new.jsp,前提是new.jsp存在
}
}
三、mybatis相关配置
1.mybatis配置文件mybatisConfig.xml
2.mapper接口和mapper.xml映射文件
2.1.BaseMapper 接口
@Repository
public interface BaseMapper {
public BaseBean getOneById(Integer uid);
}
2.2.BaseMapper .xml映射文件
select * from t_user where uid = #{uid}
2.3.AccountMapper接口
package com.blog.mapper;
import com.blog.domain.Account;
public interface AccountMapper {
//账户加钱操作
public void increase(Account a);
//账户扣钱操作
public void reduce(Account a);
}
2.4.AccountMapper.xml映射文件
update t_account set money = money+#{transferMoney} where id=#{id}
update t_account set money = money-#{transferMoney} where id=#{id}
四、spring相关配置applicationContext-core.xml
五、springmvc相关配置springmvc-servlet.xml
# 六、web.xml
blog
contextConfigLocation
classpath:applicationContext*.xml
org.springframework.web.context.ContextLoaderListener
springmvc
org.springframework.web.servlet.DispatcherServlet
1
springmvc
/
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
七、db.properties(请根据自己的数据库进行修改)
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
dataSource.user=blog
dataSource.password=blog
八、测试
1.测试BaseService
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-core.xml")
public class TestBaseService {
@Resource(type=BaseService.class)
private BaseService baseService;
@Test
public void test1() {
BaseBean bean = baseService.getOneById(15);
System.out.println(bean);
}
}
2.测试事务管理
package com.blog.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.blog.domain.Account;
import com.blog.service.AccountService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext-core.xml")
public class TestAccountService {
@Autowired
private AccountService accountService;
@Test
public void test1() {
Double transferMoney = 1000d;
Account a = new Account();
Account b = new Account();
a.setId(1);
b.setId(2);
a.setTransferMoney(transferMoney);
b.setTransferMoney(transferMoney);
accountService.transfer(a, b);
}
}
3.postman测试springmvc
3.1.页面跳转()
3.2.响应前端数据