一、什么是对象关系映射

简单来说,对象关系映射即是将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&amp;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)