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

相关推荐
打死不学Java代码8 小时前
PaginationInnerInterceptor使用(Mybatis-plus分页)
android·java·mybatis
Code哈哈笑14 小时前
【Spring Boot】深入解析:#{} 和 ${}
java·spring boot·后端·spring·mybatis
quququ_213816 小时前
Java面试:从Spring Boot到微服务的全面考核
spring boot·微服务·kubernetes·mybatis·hibernate·java面试
BillKu1 天前
Spring Boot + MyBatis 动态字段更新方法
java·spring boot·mybatis
我家领养了个白胖胖2 天前
#和$符号使用场景 注意事项
java·后端·mybatis
论迹2 天前
【JavaEE】-- MyBatis操作数据库(1)
java·开发语言·数据库·java-ee·mybatis
述雾学java2 天前
Mybatis延迟加载、懒加载、二级缓存
mybatis·java核心基础
红豆和绿豆2 天前
mybatis-plus开发orm
java·开发语言·mybatis
Java&Develop2 天前
Spring Boot+Mybatis设置sql日志打印
spring boot·sql·mybatis
安清h3 天前
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单
数据库·spring boot·后端·mysql·mybatis