AutoMapper
- Hello, after using a library AutoMapper authored by Chau Tran . I would like to share the use-case that I apply in my backend project. In my projects, using the typeorm library to do orm helps me to persistent data implementation into the database, so I need to create quite a lot of entities (each entity will represent a table under the database). Now let’s see how we use AutoMapper.
- Suppose you have an entity as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @ <span class="token function">Entity</span> <span class="token punctuation">(</span> <span class="token string">'USER'</span> <span class="token punctuation">)</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token punctuation">{</span> @ <span class="token function">Column</span> <span class="token punctuation">(</span> <span class="token string">'number'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> primary <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> name <span class="token punctuation">:</span> <span class="token string">'ID'</span> <span class="token punctuation">,</span> precision <span class="token punctuation">:</span> <span class="token number">20</span> <span class="token punctuation">,</span> scale <span class="token punctuation">:</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> @ <span class="token function">AutoMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> id <span class="token punctuation">:</span> number <span class="token punctuation">;</span> @ <span class="token function">Column</span> <span class="token punctuation">(</span> <span class="token string">'varchar2'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> name <span class="token punctuation">:</span> <span class="token string">'PASSWORD'</span> <span class="token punctuation">,</span> nullable <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> length <span class="token punctuation">:</span> <span class="token number">50</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> @ <span class="token function">AutoMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> password <span class="token punctuation">:</span> string <span class="token operator">|</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> @ <span class="token function">Column</span> <span class="token punctuation">(</span> <span class="token string">'nvarchar2'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> name <span class="token punctuation">:</span> <span class="token string">'USER_NAME'</span> <span class="token punctuation">,</span> nullable <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> length <span class="token punctuation">:</span> <span class="token number">100</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> @ <span class="token function">AutoMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> userName <span class="token punctuation">:</span> string <span class="token operator">|</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
- In case you want to retrieve information of a user you will do the following:
let userInfo = userRepo.findOne(id);
- Then return
userInfo
to the frontend. But there seems to be something wrong here. How can I return the user’spassword
to the frontend? So what’s the solution. Have a look at the title of the article, AutoMapper . Here I will guide you to use the basic features of this library.
- Create a UserVm class as follows:
1 2 3 4 5 6 7 8 | <span class="token keyword">class</span> <span class="token class-name">UserVm</span> <span class="token punctuation">{</span> @ <span class="token function">AutoMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> id <span class="token punctuation">:</span> number <span class="token punctuation">;</span> @ <span class="token function">AutoMap</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> userName <span class="token punctuation">:</span> string <span class="token operator">|</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
- The rest is quite simple. Everything is left to AutoMapper lo =)). You only need to do two things as follows:
Mapper.createMap(User, UserVm);
let userInfo = Mapper.map(userRepo.findOne(id), UserVm);
- After executing this command, the results returned to the frontend only exist with id and userName.
- As you can see, using the library to implement a two-object mapper is quite simple. However, how to make the code cleaner, it will take more paper and ink. I would like to introduce to you in the following article. If you find it useful, remember the star for this library. Thank you for reading through the end of my article.