Mybatis配置详解
作者:mmseoamin日期:2023-12-13

mybatis

      • 1、mybatis的作用
      • 2、封装JDBC
      • 3、mybatis基于XML配置
      • 4、Mapper代理开发

        1、mybatis的作用

        1、再MVC三层模式中mybatis作用于DAO层。

        2、进行与数据库连接。

        3、事务管理:支持数据操作进行手动或自动事务管理,确保数据

        提交的一致性和可靠性。

        4、通过SQL语句执行对数据库的CRUD操作,提供数据持久化。

        2、封装JDBC

        MyBatis相较于JDBC简化了以下开发:

        1. 数据库连接管理:使用JDBC进行数据库操作时,需要手动获取数据库连接、释放数据库连接等操作,在高并发的情况下还需要面对连接池的问题。而在MyBatis中,数据源(DataSource)等连接管理工作都被封装好了,用户只需要关注执行SQL语句即可。

        2. 预处理和执行SQL语句:在JDBC中,需要通过Statement对象或PreparedStatement对象来进行预处理和执行SQL语句。MyBatis将执行SQL语句的相关操作都封装成接口方法,用户通过Mapper文件或注解来配置对应的SQL语句,消除了样板式代码,使得代码更加简洁易懂。

        3. 处理结果集:在JDBC中,需要使用ResultSet对象来处理查询结果集,通过访问ResultSet对象的列名或是序号来获取结果。而在MyBatis中,支持将查询结果自动封装为Java属性对象列表或者Map映射,可以避免重复的属性名称声明以及类型不匹配的异常。

        4. 事务管理:JDBC需要通过Spring框架或编写大量的代码来进行事务管理。而MyBatis提供了默认的SqlSession事务模式、支持Spring事务以及托管给全局事务管理器三种事务管理方式,并且对事务Rollback、Commit进行了封装,简化了事务处理流程。

        MyBatis采用了不同的架构和设计理念,封装了JDBC底层操作,并提供了更方便、高效的CRUD编程接口以及自动参数映射和结果集处理,大大简化了数据库开发。

        3、mybatis基于XML配置

        1、创建Maven项目

        2、在maven项目中下载mybatis和mysql的依赖

        pom.xml
        
         
                
                    org.mybatis
                    mybatis
                    3.5.7
                
                
                
                    mysql
                    mysql-connector-java
                    5.1.46
                
            
        

        3、创建mybatis核心配置文件,在src\main\resources下创建mybatis-config.xml文件

        src\main\resources\mybatis-config.xml
        
        
        
        
            
            
                
                    
                    
                    
                        
                        
                        
                        
                    
                
            
            
            
                
                
            
        
        

        注意在这些代码中修改自己的mysql配置

              
              
              
                
                
                
                
            
        

        4、创建UserMapper.xml文件

        src\main\resources\UserMapper.xml
        
        
        
        
        
            
            
            
            
            
            
                INSERT INTO tb_user(username, password) VALUES (#{username}, #{password});
            
            
            
                DELETE FROM tb_user WHERE id = #{id};
            
            
            
                UPDATE tb_user SET password = #{newPassword} WHERE id = #{userId};
            
        
        

        5、创建数据库的实体类,实体类要根据我们创建的mysql数据库相对应

        实体类中的每一个属性,都有一个mysql属性与之相对应

        在这里插入图片描述

        src\main\java\com\example\pojo\User.java
        
        package src.main.com.example.pojo;
        public class User {
            private Integer id;
            private String username;
            private int password;
            private String gender;
            private String addr;
            public User() {
            }
            public User(int id, String username, int password, String gender, String addr) {
                this.id = id;
                this.username = username;
                this.password = password;
                this.gender = gender;
                this.addr = addr;
            }
            public int getId() {
                return id;
            }
            public void setId(int id) {
                this.id = id;
            }
            public String getUsername() {
                return username;
            }
            public void setUsername(String username) {
                this.username = username;
            }
            public int getPassword() {
                return password;
            }
            public void setPassword(int password) {
                this.password = password;
            }
            public String getGender() {
                return gender;
            }
            public void setGender(String gender) {
                this.gender = gender;
            }
            public String getAddr() {
                return addr;
            }
            public void setAddr(String addr) {
                this.addr = addr;
            }
            @Override
            public String toString() {
                return "User{" +
                        "id=" + id +
                        ", username='" + username + '\'' +
                        ", password=" + password +
                        ", gender='" + gender + '\'' +
                        ", addr='" + addr + '\'' +
                        '}';
            }
        }
        

        6、创建测试类

        src\main\java\com\example\text\Text.java
        
        package src.main.com.example.text;
        import org.apache.ibatis.io.Resources;
        import org.apache.ibatis.session.SqlSession;
        import org.apache.ibatis.session.SqlSessionFactory;
        import org.apache.ibatis.session.SqlSessionFactoryBuilder;
        import java.io.IOException;
        import java.io.InputStream;
        import java.util.List;
        public class Text{
            public static void main(String[] args) throws IOException {
                // 加载核心配置文件路径
                String resource = "mybatis-config.xml";
                //通过SqlesSsionFactor实例化SqlSessionFactor
                //然后通过SqlSessionFactor的openSqlSession()方法获取SqlSession对象
                InputStream inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                SqlSession sqlSession = sqlSessionFactory.openSession();
                //使用SqlSession来执行SQL语句
                List user = sqlSession.selectList("UserMapper.findAllUsers");
                System.out.println(user);
                sqlSession.close();
            }
        }
        

        4、Mapper代理开发

        mapper代理开发,让我们在调用sql语句时会更加方便

        我们在原来的配置上进行如下修改

        1、创建一个与映射文件(UserMapper.xml)同名的接口文件,

        2、接口文件中定义方法,方法名与映射文件中的id一致,返回

        类型也要和resultType一致

        3、注意返回是一个对象还是多个对象,多个对象要用list集合接收

        下面我们创建与映射文件同名的接口,并且定义方法
        src/main/com/example/mapper/UserMapper
        
        ackage src.main.com.example.mapper;
        public interface UserMapper {
           list findAllUsers();
           User findUserById();
            User  addUser();
           User deleteUserById();
           User updatePasswordById();
        }
        

        2、第二步要将我们的映射文件(UserMapper.xml)与接口文件(UserMapper)放在同一个包中

        1、方法一:直接将映射文件拖入mapper包下
        2、方法二:为了统一管理,我们直接在reserces下创建一个
        com/example/mapper,再将映射文件拖入该文件下,可以达到同样的效果
        

        3、修改映射文件的namespace,以前这个值是可以谁便取得,但现在要将它改为接口文件的路径

        在UserMapper.xml中修改namespace
        
        
        
        
        
            
            
            
            
            
            
                INSERT INTO tb_user(username, password) VALUES (#{username}, #{password});
            
            
            
                DELETE FROM tb_user WHERE id = #{id};
            
            
            
                UPDATE tb_user SET password = #{newPassword} WHERE id = #{userId};
            
        
        

        4、由于映射文路径置改了,我们的配置文件要引入映射文件,

        也要修改为相同路径

        修改mybatis-config.xml中的
        
        
        
        
            
            
                
                    
                    
                    
                        
                        
                        
                        
                    
                
            
            
            
                
                
            
        
        

        5、测试时我们不在使用sqlSessioj的方法,而是使用sqlSession.getMapper()

        获取UserMapper接口代理对象,在调用接口中的方法

        src/main/java/com/example/text/Text.java
        
        import java.io.IOException;
        import java.io.InputStream;
        import java.util.List;
        public class Text{
            public static void main(String[] args) throws IOException {
                // 加载核心配置文件路径
                String resource = "mybatis-config.xml";
                //通过SqlesSsionFactor实例化SqlSessionFactor
                //然后通过SqlSessionFactor的openSqlSession()方法获取SqlSession对象
                InputStream inputStream = Resources.getResourceAsStream(resource);
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                SqlSession sqlSession = sqlSessionFactory.openSession();
                //使用SqlSession.getMapper()来获取UserMapper接口对象
               UserMapper mapper=sqlSession.getMapper(UserMapper.class);
               //调用接口方法
               List user= mapper.findAllUsers();
               
               
                System.out.println(user);
                sqlSession.close();
            }
        }