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

相关推荐
程序猿熊跃晖19 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
Hars、Wlgb19 小时前
mybatis 自带的几个插入接口的区别
mybatis
XiaoLeisj1 天前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
KATA~2 天前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
伊成2 天前
Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统
java·maven·mybatis·springboot·学生成绩管理系统
我要学编程(ಥ_ಥ)2 天前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus
〆、风神2 天前
装饰器模式与模板方法模式实现MyBatis-Plus QueryWrapper 扩展
mybatis·装饰器模式·模板方法模式
依旧很淡定3 天前
09-SpringBoot3入门-整合Mybatis
mybatis
Alt.93 天前
MyBatis基础五(动态SQL,缓存)
java·sql·mybatis
okok__TXF3 天前
Mybatis源码分析
java·后端·mybatis