Mybatis如何将数据库数据巧妙地封装进实体对象?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1126个文字,预计阅读时间需要5分钟。
一、前言针对一个问题,数据库中的数据为NULL,需要递归到前端显示为0。之前已有了解,使用MyBatis框架将数据库数据封装到对象中,通常是通过对象的Setter方法实现的。这个大家也都知道。
二、问题分析当数据库中的字段为NULL时,如何在前端显示为0?
三、解决方案
1.在MyBatis的Mapper接口中,定义一个查询方法,该方法返回一个对象列表。
2.在Mapper接口的实现类中,使用@Select注解编写SQL查询语句,使用COALESCE函数将NULL值转换为0。
3.在Service层,调用Mapper接口的方法,获取对象列表。
4.在Controller层,将对象列表返回给前端。
具体代码如下:
Mapper接口:
javapublic interface DataMapper { @Select(SELECT id, name, COALESCE(age, 0) FROM users) List selectUsers();}Service层:java@Servicepublic class UserService { @Autowired private DataMapper dataMapper;
public List getUsers() { return dataMapper.selectUsers(); }}
Controller层:java@RestController@RequestMapping(/users)public class UserController { @Autowired private UserService userService;
@GetMapping public List getUsers() { return userService.getUsers(); }}
四、总结通过使用MyBatis框架和COALESCE函数,我们可以将数据库中的NULL值转换为0,并在前端显示。这种方法简单易行,能够满足需求。
一、前言
接到一个问题,数据库为Null的数据,传递到前端显示为0。之前有了解过,持久层框架(mybatis)在把数据库数据封装到对象中,是利用对象的Setter方法,这个大家也都知道,因此我就在Setter方法尝试,结果并不完全是这样。下面我用例子演示。
二、准备阶段
1.数据表
2.表对应的实体类
@Data @ApiModel("用户账号") public class User { @ApiModelProperty(value = "用户id") Integer id; @ApiModelProperty(value = "密码") String password; @ApiModelProperty(value = "用户名") String name; @ApiModelProperty(value = "状态") Integer type; public void setType(Integer type) { if (type == null) { this.type = 0; } else { this.type = type; } System.out.println("id为"+this.id+"的type = " + this.type); } public void setName(String name) { this.name = name; System.out.println("id为"+this.id+"的name = " + this.name); } }
这里用到的是lombok和swagger2注解
3.Controller层
@RestController @RequestMapping("/user") @Api(tags = "UserController", description = "用户管理") public class UserController { @Autowired private UserDao userDao; @GetMapping("/getUser/{id}") @ApiOperation("获取用户账号") public User getUser(@PathVariable @ApiParam("用户id") Integer id) { return userDao.selectOne(id); } @PostMapping("/setUser") @ApiOperation("添加用户账号") public void setUser(@RequestBody User user) { userDao.insert(user); } }
图方便,我就将UserDao直接注入UserController层中,其中使用到spring boot注解加swagger2注解,稍后使用swagger2进行测试
4.Dao层
public interface UserDao{ @Select("select * from user where id=#{id}") User selectOne(Integer id); @Insert("insert into user values(null,#{name},#{password},#{type})") void insert(User user); }
注意:dao接口需要被扫描到才能完成映射
5.swagger2接口
6.测试
1.先获取id为1的用户账号:
swagger2结果:
控制台结果:
说明这里都有使用Setter方法赋值
2.再获取id为2的用户账号:
swagger2结果:
控制台结果:
首先,swagger2结果中 type为null,而不是我们期望的0;再就是,控制台也只打印出了一句话。这是怎么回事呢?别急,我们接着往下看。
3.我准备在实体类中做点改变,再测试获取id为2的用户账号,如下:
改变后的实体类:
其他地方不变,看结果。首先,swagger2结果:
再看,控制台结果:
小结:通过上面一些测试结果,我断言当数据库数据为null时,框架不会调用该属性的Setter方法为其赋值,而是会使用它的默认值。还有,从控制台输出顺序可看出,调用Setter方法顺序为数据表字段从左至右依次开始封装。
在此,我又冒出了一个新的想法,我想测试前端传到后端的json数据是不是也是这个结论。还是使用上面准备的环境开始测试:
注意:实体类中@ApiModelProperty(value = "状态") Integer type;
先把swagger2中数据设置好
先看控制台结果:
再看数据库中数据:
小结:跟我预想的结果有些出入,本以type为null也不会调用Setter方法。因此,spring boot在封装前端传来的json数据时,就算数据为null,也会去调用Setter方法。
三、结尾
到此这篇关于详解Mybatis是如何把数据库数据封装到对象中的的文章就介绍到这了,更多相关Mybatis 数据封装到对象 内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计1126个文字,预计阅读时间需要5分钟。
一、前言针对一个问题,数据库中的数据为NULL,需要递归到前端显示为0。之前已有了解,使用MyBatis框架将数据库数据封装到对象中,通常是通过对象的Setter方法实现的。这个大家也都知道。
二、问题分析当数据库中的字段为NULL时,如何在前端显示为0?
三、解决方案
1.在MyBatis的Mapper接口中,定义一个查询方法,该方法返回一个对象列表。
2.在Mapper接口的实现类中,使用@Select注解编写SQL查询语句,使用COALESCE函数将NULL值转换为0。
3.在Service层,调用Mapper接口的方法,获取对象列表。
4.在Controller层,将对象列表返回给前端。
具体代码如下:
Mapper接口:
javapublic interface DataMapper { @Select(SELECT id, name, COALESCE(age, 0) FROM users) List selectUsers();}Service层:java@Servicepublic class UserService { @Autowired private DataMapper dataMapper;
public List getUsers() { return dataMapper.selectUsers(); }}
Controller层:java@RestController@RequestMapping(/users)public class UserController { @Autowired private UserService userService;
@GetMapping public List getUsers() { return userService.getUsers(); }}
四、总结通过使用MyBatis框架和COALESCE函数,我们可以将数据库中的NULL值转换为0,并在前端显示。这种方法简单易行,能够满足需求。
一、前言
接到一个问题,数据库为Null的数据,传递到前端显示为0。之前有了解过,持久层框架(mybatis)在把数据库数据封装到对象中,是利用对象的Setter方法,这个大家也都知道,因此我就在Setter方法尝试,结果并不完全是这样。下面我用例子演示。
二、准备阶段
1.数据表
2.表对应的实体类
@Data @ApiModel("用户账号") public class User { @ApiModelProperty(value = "用户id") Integer id; @ApiModelProperty(value = "密码") String password; @ApiModelProperty(value = "用户名") String name; @ApiModelProperty(value = "状态") Integer type; public void setType(Integer type) { if (type == null) { this.type = 0; } else { this.type = type; } System.out.println("id为"+this.id+"的type = " + this.type); } public void setName(String name) { this.name = name; System.out.println("id为"+this.id+"的name = " + this.name); } }
这里用到的是lombok和swagger2注解
3.Controller层
@RestController @RequestMapping("/user") @Api(tags = "UserController", description = "用户管理") public class UserController { @Autowired private UserDao userDao; @GetMapping("/getUser/{id}") @ApiOperation("获取用户账号") public User getUser(@PathVariable @ApiParam("用户id") Integer id) { return userDao.selectOne(id); } @PostMapping("/setUser") @ApiOperation("添加用户账号") public void setUser(@RequestBody User user) { userDao.insert(user); } }
图方便,我就将UserDao直接注入UserController层中,其中使用到spring boot注解加swagger2注解,稍后使用swagger2进行测试
4.Dao层
public interface UserDao{ @Select("select * from user where id=#{id}") User selectOne(Integer id); @Insert("insert into user values(null,#{name},#{password},#{type})") void insert(User user); }
注意:dao接口需要被扫描到才能完成映射
5.swagger2接口
6.测试
1.先获取id为1的用户账号:
swagger2结果:
控制台结果:
说明这里都有使用Setter方法赋值
2.再获取id为2的用户账号:
swagger2结果:
控制台结果:
首先,swagger2结果中 type为null,而不是我们期望的0;再就是,控制台也只打印出了一句话。这是怎么回事呢?别急,我们接着往下看。
3.我准备在实体类中做点改变,再测试获取id为2的用户账号,如下:
改变后的实体类:
其他地方不变,看结果。首先,swagger2结果:
再看,控制台结果:
小结:通过上面一些测试结果,我断言当数据库数据为null时,框架不会调用该属性的Setter方法为其赋值,而是会使用它的默认值。还有,从控制台输出顺序可看出,调用Setter方法顺序为数据表字段从左至右依次开始封装。
在此,我又冒出了一个新的想法,我想测试前端传到后端的json数据是不是也是这个结论。还是使用上面准备的环境开始测试:
注意:实体类中@ApiModelProperty(value = "状态") Integer type;
先把swagger2中数据设置好
先看控制台结果:
再看数据库中数据:
小结:跟我预想的结果有些出入,本以type为null也不会调用Setter方法。因此,spring boot在封装前端传来的json数据时,就算数据为null,也会去调用Setter方法。
三、结尾
到此这篇关于详解Mybatis是如何把数据库数据封装到对象中的的文章就介绍到这了,更多相关Mybatis 数据封装到对象 内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

