将整个领域模型传递给用户是错误的
UserModel才是真正意义上处理业务的核心模型,dataobject是对数据库的映射
4. 领域模型不应返回给前端用户
在前端添加vo
convertFromModel
1. 企业级mvc项目模块
controller层
service层
2. UserController
mapping('/user')
3. UserService
UserInfoModel userMapper.selectByPrimaryKey(id)
返回用户密码
DO对象绝对不可以开放给接口
service层添加model的概念
dataobject和model的区别:dataobject仅仅是映射数据库;model是业务模型,该模型的属性会来自于多个数据库
3.1 使用SpringMVC方式开发用户信息 1. 搭建 MVC 层次组件 创建 controller 层目录,并编写 UserController,包含一个 getUser(Integer id) 方法,注意添加注解。 创建 service 层目录,并编写 UserService 接口以及 UserSServiceImpl 实现类,包含 getUserById(Integer id) 方法,其中使用了 UserDOMapper. 2. 除了 UserDO 表示与数据库对应的数据对象类外, service 层业务领域也应该有与 DO 对象不同的对象 model, 即业务领域对象,用来封装 DO 对象,避免直接将 DO 对象返回给前端。 创建 service 层领域模型对象: com.miaoshaproject.service.model.UserModer, 其中封装从 DO 到 model 封装方法。 为 userPasswordDOMapper 添加 selectByUserId(Integer id) 方法,实现通过用户 id 查找对应的用户加密密码信息。 3. 编写 userController 中的 getUser() 方法,返回领域模型 userModel, 测试是否可以通过前端成功访问。 4. 创建一个前端模型对象 UserVO, 用来封装可以返回给前端的对象数据信息,不包含前端非必要属性字段。其中包含 convertFromModel(model) 方法,用来将核心领域模型 model 对象封装成可供前端使用的 VO 对象。 5. 需要注意的是 DO、VO、Model 对象中的属性类型必须一致,字段名同样要一致,才可以使用 BeanUtils.copyProperties(srcObj, tarObj) 方法,否则会丢失不一致属性中的数据。
dataobject负责数据存储到service的传输并且在用户service服务里组装了对应需要核心领域模型UserModel做下一步的处理,然后controller层做了到用户viewobject之间的互传,保证了UI只使用到它需要的展示的字段即可
在UserController中将返回值改为UserVO,并返回userVO
在UserController中将返回值改为UserVO
我们不能将用户密码信息返回给前端,这样是不专业的,所以需要在controller层新建viewobject对象UserVO,生成get和set方法,age应该是Integer类型
在UserController中返回userModel
通过convertFormDataObject(userDO,userPasswordDO)将userModel转出来并返回给controller层
然后在UserPasswordDOMapper类中新建UserPasswordDO selectByUserId(Integer userId);
改造UserPasswordDOMapper.xml文件,userId就是我们要传进来的类型
将userDO复制给userModel并返回userModel
通过UserService获取用户的领域模型的对象
第一层是dataobject是完全与数据库一一映射,数据库里有什么字段,dataobject里就有什么字段,并不含任何逻辑,是一个最简单的ORmapping映射
在service层要有一个model,它是真正意义上定义SpringMVC中业务逻辑交互模型的概念UserModel-设置私有变量再生成对应的get和set方法
UserServiceImpl是SpringBoot的service层
UserController是SpringBoot的controller层
dao层,也有叫mapper层,一个数据访问接口(Data Access Object,) 里面是**mapper.java, 当操作这个对象的方法时候,会自动产生SQL语句来和数据库进行交互
注意, service的实现类是需要加 @Service 的
本节出现的问题:
原因
@Autowired private UserPasswordDOMapper userPasswordDOMapper;
没有加Autowired,以为加在用户的对象上就也作用到密码的对象了。应该都加。
service层返回用model
dataobject层负责数据的存储到service层的传输。组装核心领域模型进行下一步处理。
用户信息和密码存储在不同的表,逆向工程生成不同的对象,要处理是时候要全部的信息,新建model。
用户的密码不必展示给前端,所以在controller加一层模型对象。
BeanUtils.copyProperties 必须保证字段名一致,类型一致。否则复制到的属性为null。
BeanUtils
service对应的数据库的映射不能直接返回
实体类只是映射
必须有个model(有实体类的字段)的概念service返回登陆的model对象
(字段的名字一致,类型一致)
对象:BeanUtils
BeanUtils.copyProperties(实体类,模型类);把实体类的属性复制到模型类