实训Day06

学习目标

MP高级应用

​ 1.引入service CRUD接口IService->ServiceImpl

​ 2.实现分页的方法

​ 3.生成逆向工程的方法

MVC整体框架搭建

今日所学

更新项目目录

主要在于实现了service业务层的接口以及实现类

在这里插入图片描述

集合

单列集合Collection和双列集合Map

单列集合包括List和Set

List的实现:ArrayList Vector LinkedList

Set的实现:HashSet

可变参数

…表示可变参数,本质上就是数组

在Java中,可变参数(Varargs)是一种特殊的语法,允许方法接受可变数量的参数。本质上,可变参数在方法内部被当作数组来处理。通过可变参数,可以更灵活地定义方法,而无需提前确定参数的数量。

public class VarargsExample {
    
    public static void printNumbers(int... numbers) {
        for (int number : numbers) {
            System.out.print(number + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        printNumbers(1, 2, 3); // 可以传入任意数量的参数
        printNumbers(4, 5, 6, 7, 8);
    }
}

在上面的示例中,printNumbers方法使用可变参数int... numbers来接受一个或多个整数参数。在调用printNumbers方法时,可以传入任意数量的整数参数,编译器会将这些参数封装成一个数组。

因此,虽然在方法定义中使用了可变参数的语法,但在方法内部,实际上是将传入的参数作为数组来处理的。这样,可变参数为我们提供了一种更加灵活和方便的方法参数传递方式。

datetime类型和date类型

在Java中,有两个主要的日期时间类型:java.util.Datejava.time.LocalDateTime。这两种类型在处理日期和时间方面有一些区别:

  1. java.util.Date:

    • java.util.Date是Java早期用于表示日期和时间的类,自JDK 1.0就存在。
    • 它表示特定的时间戳,精确到毫秒级别。
    • java.util.Date类中的大多数方法已被标记为过时,因为它存在一些问题,例如不是线程安全的,不提供时区支持等。
    • 通常不建议在新代码中使用java.util.Date,而是推荐使用java.time包中的新日期时间API。
  2. java.time.LocalDateTime:

    • java.time.LocalDateTime是Java 8引入的日期时间API的一部分,位于java.time包中。
    • 它提供了更加全面和灵活的日期时间操作功能,包括更好的时区支持、不可变性、线程安全等特性。
    • LocalDateTime表示日期和时间,但不包含时区信息。
    • LocalDateTime类提供了丰富的方法来处理日期和时间,例如日期加减、格式化、比较等。

在使用日期时间操作时,推荐优先选择java.time.LocalDateTime,因为它提供了更好的设计和功能,同时解决了java.util.Date存在的一些问题。如果需要考虑时区信息,还可以使用java.time.ZonedDateTime或其他相关类。

MP引入Service业务层

​ MP封装Iservice接口,并在该接口中定义了大量的API

​ 我们不直接使用Mapper,间接使用

​ 在声明自定义接口的同时,并继承IService接口

​ 相对于Mapper优势:增加了更多方法:saveOrUpdate(),list(),page()…

1.声明业务接口

public interface UserService extends IService<User> {
	...
}

2.声明业务接口的实现类

@Service
@Transactional(rollbackFor = Throwable.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    ...
}

3.操作的测试

@SpringBootTest(classes = MainApp.class)
@RunWith(SpringRunner.class)
public class UserServiceTest {
	@Autowired
	private UserService userService;
	@Test
	public void testSave(){
		User user = new User();
		user.setName("杨瑞");
		user.setPhone("155");
		user.setPwd("123456");
		boolean save = userService.save(user);
	}
	@Test
	public void testSaveOrUpadate(){
		// getById: 通过id(必须是主键)查询
		// getOne: 当结果只有一条
		// list: 当结果有多条
		// User byId = userService.getById(1);
		User byId = new User();
		byId.setName("张学友");
		boolean save = userService.saveOrUpdate(byId);
	}
}

控制器对业务层的调用

1.在控制器中注入service

@RequestMapping("/user")
@Slf4j
@Api(value = "UserController",tags ="用户操作接口" )
@RestController
public class UserController {
	/**
	* 自动装配一个UserService对象
	*/
	@Autowired
	private UserService userService;
}

2.在实体类中对json加强

/**
* 生成json时, 该字段会被忽略
*/
@JsonIgnore
@TableField("pwd")
private String pwd;
/**
*指定生成json时的时间格式和时区
*/
@TableField("reg_time")
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone = "Asia/Shanghai")
private Date regTime;

3.在给前端返回中携带code和msg

public static R error(Integer code,String msg){
	R r = new R();
	r.setCode(code);
	r.setMsg(msg);
	return r;
}
public class BizException extends Exception{
	private Integer code;
	public Integer getCode(){
		return code;
	}
	public BizException(ErrorCode errorCode){
		super(errorCode.getMsg());
		this.code = errorCode.getCode();
	}
}	
@RestControllerAdvice
public class GlobalExceptionHandler {
	@ExceptionHandler(BizException.class)
	public R handlerBizException(BizException e){
		return R.error(e.getCode(),e.getMessage());
	}
	/**
	* 对所有异常进行统一的处理
	* @return R
	*/
	@ExceptionHandler(Throwable.class)
	public R handlerThrowable(){
		return R.error("系统开小差了, 请稍后再试");
	}
}

4.使用service完成业务操作

@GetMapping("/getById")
public R getById( Integer id) throws BizException {
	User byId = userService.getById(id);
	if(byId == null){
		throw new BizException(ErrorCode.NULL_USER);
	}
	return R.success(byId);
}

拓展

Spring管理事务: 事务管理器

在Spring中,事务管理器(Transaction Manager)是用来管理事务的关键组件之一。事务管理器负责协调事务的开始、提交、回滚等操作,确保数据库操作的一致性和可靠性。

Spring框架提供了多种事务管理器实现,常用的包括:

  1. PlatformTransactionManager

    • PlatformTransactionManager是Spring事务管理的核心接口,定义了事务管理的基本操作。
    • Spring提供了多个实现类,如DataSourceTransactionManagerJpaTransactionManagerHibernateTransactionManager等,用于不同数据访问技术的事务管理。
  2. DataSourceTransactionManager

    • DataSourceTransactionManager是Spring JDBC事务管理器的实现,用于基于JDBC的事务管理。
    • 它通过DataSource来管理事务,适用于传统的JDBC数据访问。
  3. JpaTransactionManager

    • JpaTransactionManager是Spring对JPA(Java Persistence API)事务管理的实现。
    • 它用于管理基于JPA的事务,与JPA的EntityManagerFactory集成,支持JPA的事务特性。
  4. HibernateTransactionManager

    • HibernateTransactionManager是Spring对Hibernate事务管理的实现。
    • 它用于管理基于Hibernate的事务,与Hibernate的SessionFactory集成,支持Hibernate的事务特性。

通过配置事务管理器,可以在Spring应用中实现声明式事务管理,将事务管理从业务代码中解耦,提高代码的可维护性和可测试性。在配置中指定事务管理器后,Spring会自动为标记了@Transactional注解的方法添加事务管理的功能。

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值