[MUSIC] Cloud services have access to huge amounts of storage, that allow them to aggregate information from multiple, mobile clients and then be able to search that information and return it back to mobile clients. So one of the important functions that we have to learn how to build in our cloud services for mobile clients, is the capability to take advantage of all these storage resources and store data on a clients behalf. And then be able to search that data and find what a particular client needs and return it to them. Now this whole process looks very similar to what we saw when we were sending object data over HTTP. We would have some objects, that we were working with, either on the client or on the service side, we would then marshal them, into an HTTP body of a message. And then, on the other side, we would have to unmarshal that data back into objects. So all of this would happen on the client, and then this would happen on the server. So we would have this whole process where we were taking objects, we were converting them into HTTP messages to send to the cloud based service, and then on the server side we were converting those bodies back into objects. And we saw that there were ways to simplify this using various libraries like Jackson, which can automatically convert an object into JSON, which can be placed into an HTTP body, and then automatically take that JSON and convert it back into an object. And we used Retrofit to do a lot of this for us, in the earlier discussions. Now, what we'd like to be able to do is something similar for storing data on the server. So, on the server side, we also are working with objects. So we will have objects, just like we did on the client side, and then what we want to do is we want take the information in those objects, and we want to convert it into some format, which then gets stored in a database. And there are multiple formats and types of databases that we might be storing in. But one of the keys things that we have to do, is we have to marshal again our objects into, or map our objects, into the database and the format of the database. So down here in the database, probably, the format is something like, rows and columns. So, we've got database rows and we've got database columns and we have to figure out how do we go from an object to this format in the database. And the way that we can do this, one way to do it at least, is to always just write our own code that goes and takes each object and decides how we map that object into a database table. So for example, we might take each object and map each object into a row of the database, and then we might set each column to a particular property or member variable of that object. So we can put the member variable values in the columns, and we can map our object instances to different rows. But if we go and do something like this, we're doing a lot of work, because every time we save an object, we have to figure out how to convert that object into a table format. And then every time we want to go and get data back, we have to figure out how we search these tables, and we have to write our own code to search the tables. And then, once we find the data that we want in the database, then we have to convert that data in those, either table rows or wha, columns or whatever part of the table it is that we've stored our data into, we have to convert that data back into object so that we can do something with it. And this whole process is normally called object relational mapping, at least for traditional relational databases. [BLANK_AUDIO] This term still gets used, even with non-relational databases like noSQL databases. We're still doing this whole process of essentially mapping objects into the database. And some people call it ORM, some people call it other things when it hits noSQL databases. But regardless of what it is, the, the fundamental fact remains that we have to take objects, and we have to convert them on the server side in order to store them into some format that the database can understand. And then when we want to use them, we have to be able to find them, convert that data back into objects, and do something with it, because Java operates on objects. And we don't really want to operate on raw primitives and database tables which don't make sense in the Java language or may not be strongly typed, like we would like.