• jQuery火箭图标返回顶部代码


    一、什么是AutoMapper?

    AutoMapper是一个简单的对象映射框架(OOM),将一个对象映射到另一个对象。

    二、AutoMapper的好处

    以前的时候我们将DTO对象转换为Model对象时,我们必须将每一个属性都手动映射

    实体类

        /// <summary>
        /// 用户表
        /// </summary>
        [Table("tb_User")]
        public class TbUser
        {
            /// <summary>
            /// 用户Id
            /// </summary>
            [Key]
            [Column("userId")]
            [StringLength(32)]
            public string UserId { get; set; }
            /// <summary>
            /// 用户名
            /// </summary>
            [Column("userName")]
            [StringLength(20)]
            public string UserName { get; set; }
            /// <summary>
            /// 邮箱
            /// </summary>
            [Column("email")]
            [StringLength(30)]
            public string Email { get; set; }
            /// <summary>
            /// 添加时间
            /// </summary>
            [Column("addTime")]
            [Required]
            public DateTime AddTime { set; get; }
        }

    DTO传输对象

        /// <summary>
        /// 用户传输对象
        /// </summary>
        public class UserDto
        { 
            /// <summary>
            /// 用户Id
            /// </summary>
            [StringLength(32, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户Id")]
            public string UserId { get; set; }
            /// <summary>
            /// 用户名
            /// </summary>
            [StringLength(20, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户名")]
            public string UserName { get; set; }
            /// <summary>
            /// 邮箱
            /// </summary>
            [StringLength(30, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "邮箱")]
            public string Email { get; set; }
        }

    业务层

        /// <summary>
        /// 业务处理
        /// </summary>
        public class UserService : IUserService
        {
            private readonly MyDbContext _dbContext;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="dbContext"></param>
            public UserService(MyDbContext dbContext)
            {
                _dbContext = dbContext;
            }
            /// <summary>
            /// 添加用户
            /// </summary>
            /// <param name="dto">实体传输对象</param>
            /// <returns></returns>
            public int Add(UserDto dto)
            {
                var user = new TbUser
                {
                    UserId = Guid.NewGuid().ToString("N"),
                    Email = dto.Email,
                    UserName = dto.UserName,
                    AddTime = DateTime.Now
                };
                _dbContext.Add(user);
                return _dbContext.SaveChanges();
            }
            /// <summary>
            /// 编辑用户信息
            /// </summary>
            /// <param name="dto">实体传输对象</param>
            /// <returns></returns>
            public int Update(UserDto dto)
            {
                var user = _dbContext.TbUsers.Find(dto.UserId);
                if(user==null) throw new Exception("获取用户信息失败");
                user.UserName = dto.UserName;
                user.Email = dto.Email;
                return _dbContext.SaveChanges();
            }
        }

    这样情况还可以,属性不是很多,如果属性过多(几十,几百),还需要手动赋值,简直太头疼了,还会导致大量的时间浪费在对象转换中,用AutoMapper,只需要简单的配置就可以完成两个对象之间的属性映射,开发中省去了属性转换的时间,从而提高工作效率。

    三、使用AutoMapper

    安装引用

    通过程序包管理器控制台安装AutoMapper

    Install-Package AutoMapper -version 9.0.0

    Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -version 7.0.0

    配置映射关系

    创建一个类并继承autoMapper的Profile类

        public class Mappings : Profile
        {
            public Mappings()
            {
                CreateMap<UserDto, TbUser>();
            }
        }

    注入服务

                //注入AutoMapper服务,Mappings就是自己创建的映射类
                services.AddAutoMapper(typeof(Mappings));

     修改业务层代码

        /// <summary>
        /// 业务处理
        /// </summary>
        public class UserService : IUserService
        {
            private readonly MyDbContext _dbContext;
            /// <summary>
            /// 注入接口
            /// </summary>
            private readonly IMapper _mapper;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="dbContext"></param>
            /// <param name="mapper"></param>
            public UserService(MyDbContext dbContext,IMapper mapper)
            {
                _dbContext = dbContext;
                _mapper = mapper;
            }
            /// <summary>
            /// 添加用户
            /// </summary>
            /// <param name="dto">实体传输对象</param>
            /// <returns></returns>
            public int Add(UserDto dto)
            {
                var info = _mapper.Map<UserDto, TbUser>(dto);
                info.AddTime=DateTime.Now;
                info.UserId = Guid.NewGuid().ToString("N");
                //var user = new TbUser
                //{
                //    UserId = Guid.NewGuid().ToString("N"),
                //    Email = dto.Email,
                //    UserName = dto.UserName,
                //    AddTime = DateTime.Now
                //};
                _dbContext.Add(info);
                return _dbContext.SaveChanges();
            }
            /// <summary>
            /// 编辑用户信息
            /// </summary>
            /// <param name="dto">实体传输对象</param>
            /// <returns></returns>
            public int Update(UserDto dto)
            {
                var user = _dbContext.TbUsers.Find(dto.UserId);
                if(user==null) throw new Exception("获取用户信息失败");
                //user.UserName = dto.UserName;
                //user.Email = dto.Email;
                _mapper.Map(dto, user);
                return _dbContext.SaveChanges();
            }
        }

    运行测试

     

    PS:一般在使用AutoMapper转换时dto中字段名称要跟实体对象定义一样才能转换成功。 

  • 相关阅读:
    支付系统
    在Ubuntu 14.04 64bit上安装百度云Linux客户端BCloud
    spring data jpa update
    多数据源springboot-jta-atomikos
    rabbitMQ 的基本知识
    java 调用短信 api 接口发送短信
    springboot整合ribbitMQ
    【RabbitMQ】ubuntu下RabbitMQ安装与简单使用
    @Slf4j注解
    quartz 定时任务的增删改
  • 原文地址:https://www.cnblogs.com/tenghao510/p/11975789.html
Copyright © 2020-2023  润新知