目录
????????ORM:对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
????????1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。?
????????2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系,二者不同时无法自动ORM,如下:
在SQL中使用 as 为查询字段添加列别名,以匹配属性名:
在RoleDao接口中
public List<Role> findAll();
在RoleDao.xml文件中
<select id="findAll" resultType="com.by.pojo.Role" >
select id, role_name as roleName, role_desc as roleDesc from role
</select>
在测试类中
public class MyBatisTset {
private SqlSession sqlSession;
private InputStream inputStream;
@Before
public void init() throws IOException {
//加载配置文件
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
//创建SessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//使用数据的会话实例
sqlSession = sessionFactory.openSession();
}
@Test
public void testFindAll(){
RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
List<Role> roleList = roleDao.findAll();
for (Role role : roleList) {
System.out.println(role);
}
}
@After
public void close() throws IOException {
sqlSession.close();
inputStream.close();
}
}
输出结果:
?
如果我们的查询很多,都使用别名的话写起来岂不是很麻烦,有没有别的解决办法呢?
在RoleDao接口中
public List<Role> findAll2();
在RoleDao.xml文件中
<!--
id:和select查询标签的返回值保持一致
type: 映射实体的全类名
-->
<resultMap id="findAll2ResultMap" type="com.by.pojo.Role">
<!--
描述主键字段的映射关系:
property:实体类的属性
column:数据表字段名称
-->
<id property="id" column="id" />
<!--
描述非主键字段的映射关系:
property:实体类的属性
column:数据表字段名称
-->
<result property="roleName" column="role_name" />
<result property="roleDesc" column="role_desc" />
</resultMap>
<select id="findAll2" resultMap="findAll2ResultMap" >
select * from role
</select>
在测试类中
public class MyBatisTset {
private SqlSession sqlSession;
private InputStream inputStream;
@Before
public void init() throws IOException {
//加载配置文件
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
//创建SessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//使用数据的会话实例
sqlSession = sessionFactory.openSession();
}
@Test
public void testFindAll(){
RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
List<Role> roleList = roleDao.findAll2();
for (Role role : roleList) {
System.out.println(role);
}
}
@After
public void close() throws IOException {
sqlSession.close();
inputStream.close();
}
}
输出结果
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。?
??????? ORM技术特点:?
??????? 1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。?
??????? 2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。?
????????ORM的优缺点?
? ? ? ? 1.ORM的缺点是会牺牲程序的执行效率和会固定思维模式。?
? ? ? ? 2.从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。