MyBatis的ORM映射

目录

什么是ORM

一,列的别名

二,结果映射

三,总结


什么是ORM

ORM:对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。

2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

MyBatis只能自动维护库表"列名"与"属性名"相同时的对应关系,二者不同时无法自动ORM,如下:

一,列的别名

在SQL中使用 as 为查询字段添加列别名,以匹配属性名:

在RoleDao接口中

java 复制代码
public List<Role> findAll();

在RoleDao.xml文件中

java 复制代码
<select id="findAll" resultType="com.by.pojo.Role" >
        select id, role_name as roleName, role_desc as roleDesc from role
    </select>

在测试类中

java 复制代码
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接口中

java 复制代码
public List<Role> findAll2();

在RoleDao.xml文件中

java 复制代码
<!--
        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>

在测试类中

java 复制代码
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是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。

相关推荐
苏-言7 小时前
MyBatis最佳实践:动态 SQL
数据库·sql·mybatis
苏-言20 小时前
MyBatis最佳实践:提升数据库交互效率的秘密武器
数据库·mybatis
一缕叶2 天前
mybatis(19/134)
mybatis
lozhyf2 天前
基于SpringBoot + Mybatis Plus + SaToken + Thymeleaf + Layui的后台管理系统
spring boot·layui·mybatis
坚持不懈的大白2 天前
后端:MyBatis
mybatis·pagehelper
十二同学啊2 天前
MyBatis Plus 的 InnerInterceptor:更轻量级的 SQL 拦截器
sql·tomcat·mybatis
日拱一卒无有尽, 功不唐捐终入海2 天前
Mybatis乐观锁使用
java·开发语言·jvm·mybatis
小菜日记^_^3 天前
苍穹外卖项目总结(二)
java·spring boot·spring·tomcat·maven·mybatis·postman
阑梦清川3 天前
用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法
java·数据库·mybatis
每天都要进步13 天前
Mybatis 进阶 / Mybatis—Puls (详细)
mybatis·mybatis-plus