一、什么是对象关系映射
简单来说,对象关系映射即是将Java中的对象一一对应映射到MySQL(本文基于MySQL)的Table(表)中,通过对对象各个属性赋值来更新数据库。
官方的说,对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。(本段来自百度百科)
二、如何写ORM代码
首先,我们要在工程中编写配置文件(XML格式),下面给出配置文件的具体代码(由于本人也不是特别熟悉配置文件中每个语句的具体使用,避免误导大家,暂时不解释配置文件):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis//DTD Config 3.0//EN"
"http://mybatis/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/World?useSSL=false&serverTimezone=GMT%2B8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.csuft.db.mapper"/>
</mappers>
</configuration>
本人使用的是MySQL8.0默认的Example(World数据库),所以在配置文件中的url是jdbc:mysql://127.0.0.1:3306/World?...
接着我们来看看如何使用映射,emmmm,我们一起来读取(SELECT)一下World数据库中City表中的数据,并在控制台中模拟换页的效果,每页显示五条信息,下面请看代码:
public class City {
int id;
String name;
String countryCode;
String district;
int population;
@Override
public String toString() {
return "City [id=" + id + ", name=" + name + ", countryCode=" + countryCode + ", district=" + district
+ ", population=" + population + "]";
}
}
首先根据City表的字段写一个City类,类中的字段对应于表的字段,重写toString方法,方便对象打印到控制台上。
public interface CityMapper {
@Select("SELECT * FROM city LIMIT 5 offset #{offset}")
@Results({
@Result(column="ID",property="id"),
@Result(column="Name",property="name"),
@Result(column="CountryCode",property="countryCode"),
@Result(column="District",property="district"),
@Result(column="Population",property="population")
})
List<City> find(int offset);
}
定义一个映射的接口,是不是不知道有什么用?不着急,可以理解为通过这个接口中的方法可以执行映射的SQL语句
接着重头戏来了,我们一起看一下如何执行映射:
public class App {
public static void main(String[] args) {
try {
//根据配置文件创建数据源(一个生产对话的工厂)
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(new FileReader("config.xml"));
//获得 SQLSession(通过工厂获得对话)
SqlSession session = factory.openSession();
//在通过对话获取到映射
CityMapper mapper = session.getMapper(CityMapper.class);
//调用映射的find方法查询表中数据
Scanner sc = new Scanner(System.in);
int offset = 0;
while(true) {
List<City> list = mapper.find(offset);
for (City c : list) {
System.out.println(c);
}
System.out.println("请输入是否显示下一页数据?(是/1,退出/0)");
int temp = sc.nextInt();
if(temp == 1) {
offset += 5;
}else if(temp == 0){
System.out.println("成功退出查询!");
break;
}else {
System.out.println("输入有误!退出查询!");
break;
}
}
//释放资源,提交对话
sc.close();
sessionmit();
session.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
具体的步骤在代码注释中已经给出来了,我们可以理解为Java程序和数据库之间是在进行对话,如同生活中一样,对话需要媒介,这里的媒介就是映射。(还有一个就是:如果只是查询,数据库中的数据没有改变,可以不需要会话提交)
本文是本人学习JDBC的小心得,转载请注明,若有错误,请评论指出,不胜感激
更多推荐
Java对象关系映射(ORM)
发布评论