• MySQL题外篇【ORM思想解析】



    1. 什么是ORM?

      对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

    简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

    ORM在业务逻辑层和数据库层之间充当了桥梁的作用。

    2. ORM解决了什么问题?

    • ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。

    • ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。

    • 让软件开发人员专注于业务逻辑的处理,提高了开发效率。

    3. 结合MyBatis理解ORM

    3.1 MyBatis是什么?

      Mybatis是一个优秀的半自动的ORM框架,它对JDBC操作数据库的过程进行封装,原来我们使用JDBC去操作数据库时,需要手动的写代码去注册驱动、获取connection、获取statement等硬编码的方式去实现与数据库的交互,现在Mybaits帮助我们把这些事情做了,使我们只需要关注我们的业务sql即可,能大大提高我们的开发效率。

    3.2 MyBatis使用

    • 在Maven中引入MyBatis依赖
    	
        <dependencies>
            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>3.4.5version>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>5.1.6version>
                <scope>runtimescope>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 创建User实体类-User.java
    @Data
    @AllArgsConstructor // 全参构造函数
    @NoArgsConstructor  // 无参构造函数
    public class User {
        private Long id;
        private Integer age;
        private String username;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 创建User对应的Mapper接口类-UserDao.java
    public interface UserDao {
        //查询所有用户
        public List<User> findAll() throws Exception;
        //根据条件进行用户查询
        public User findByCondition(User user) throws Exception;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 创建User的xml文件-UserMapper.xml
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    // namespace 必须是对应UserDao的路径
    <mapper namespace = "com.my.dao.UserDao">
    
        
        <select id="findAll" resultType="com.my.pojo.User" parameterType="com.my.pojo.User">
            select * from user
        select>
        
        
        <select id="findByCondition" resultType="com.my.pojo.User" parameterType="com.my.pojo.User">
            select * from user where id = #{id} and username = #{username}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 编写mybatis配置信息-mybatis.xml
    
    DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
    
        
        <properties resource="jdbc.properties">properties>
    
        
        <typeAliases>
            
          
            
            <package name="com.my.pojo"/>
        typeAliases>
    
        
        <environments default="development">
            <environment id="development">
                
                <transactionManager type="JDBC">transactionManager>
                
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                dataSource>
            environment>
        environments>
    
    
        
        <mappers>
    
    
            
            <package name="com.my.dao"/>
        mappers>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 调用Mybatis
    	/**
         * 通过手动提交并定义statement的方法去调用查询
         * @throws IOException
         */
        @Test
        public void test1() throws IOException {
            //1.Resources工具类,配置文件的加载,把配置文件加载成字节输入流
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
            //2.解析了配置文件,并创建了sqlSessionFactory工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //3.生产sqlSession
            // 默认开启一个事务,但是该事务不会自动提交,在进行增删改操作时,要手动提交事务
            // 注:openSession(true) 传入true即为开启自动提交事务 
            SqlSession sqlSession = sqlSessionFactory.openSession();
            
            //4.sqlSession调用方法:查询所有selectList  查询单个:selectOne 添加:insert  修改:update 删除:delete
            List<User> users = sqlSession.selectList("com.my.dao.IUserDao.findAll");
            for (User user : users) {
                System.out.println(user);
            }
            sqlSession.close();
        }
        
    	@Test
        public void test6() throws IOException {
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            IUserDao mapper = sqlSession.getMapper(IUserDao.class);
    
            User user1 = new User();
            user1.setId(4);
            user1.setUsername("lucy");
    
            List<User> all = mapper.findByCondition(user1);
            for (User user : all) {
                System.out.println(user);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    3.3 Mybatis使用总结

    1. Maven添加MyBatis的坐标
    2. 创建User数据表
    3. 编写User实体类
    4. 编写映射文件UserMapper.xml
    5. 编写核心文件mybatis.xml
    6. 编写测试类
  • 相关阅读:
    辅助驾驶功能开发-上游需求篇(8)-地平线J2感知性能解析
    淘宝/天猫API:brand_cat_top-获取分类推荐品牌列表
    postgresql如何关闭自动提交设置
    学习自动化测试该怎么学?
    大数据管道聚合并分页 有什么调优方案
    数学建模国赛题型和获奖策略
    ARM32开发——第一盏灯
    矩阵键盘中断扫描
    【译】SQLAlchemy文档:SQLAlchemy 统一教程
    永磁同步电机转子位置估算专题——正交锁相环
  • 原文地址:https://blog.csdn.net/qq_33399435/article/details/126018253