MyBatis(1)之Mybatis架构

一、Mybatis基础

【1】. 原生态 jdbc的问题总结;mybatis架构
【2】. mybatis入门程序:查询用户信息、用户添加、用户修改和删除、mybatis和 Hibernate的适用场景 (网址:https://blog.csdn.net/qq_41029923/article/details/83550312
【3】. mybatis全局配置文件(网址:https://blog.csdn.net/qq_41029923/article/details/83583825
【4】. Mapper映射文件【 输入映射类型和输出映射类型:parameterType传递包装类型、resultType的使用、resultMap入门】(网址: https://blog.csdn.net/qq_41029923/article/details/83591787
【5】. mybatis 开发 dao 的两种方法:sqlSession适用范围、原始 dao开发方式、mapper动态代理开发方式
【6】. 动态 sql:动态 sql-ifwhere和 sql片段、foreach的使用
【1】. 原生态 jdbc的问题总结(JDBC操作数据库的问题):

数据库连接频繁的创建与关闭,缺点:浪费数据库资源,影响操作效率;
使用数据库连接池(在 sqlMapConfig.xml配置文件中配置数据库连接池)。
sql语句是硬编码,若需求更改修改 java代码,重新编译,系统不易维护;
sql语句写在统一的配置文件中(mapper.xml中配置 SQL语句,与 Java代码分离)。
PreparedStatement中占位符(参数位置与值)是硬编码;
参数在配置文件中设置(mapper.xml的 statement中 parameterType属性定义输入参数类型)。
结果集遍历存在硬编码;
自动对 sql查询结果对 JAVA对象映射(即输出映射),(mapper.xml的 statement中 resultType属性定义输出类型)。

(1)

jdbc程序:导入驱动包、创建连接、语句、执行、结果
(eg:Users——用户表、Items——商品表、Orders——订单表、OrderDetails——订单信息表)

(2)

创建数据库:create database test;
使用数据库:use test;
创建Users表:

create table Users(
     id integer primary key auto_increment,
     username varchar(20),
     age int
 );
insert into users (username,age) values ('tom',20);
insert into users (username,age) values ('jay',10);
(3)
public class JdbcDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //0.导入驱动包 1.创建连接 2.语句 3.执行 4.结果
        Connection conn=null;  //1.建立连接
        PreparedStatement pstmt=null; //2.语句(预编译语句)
        ResultSet rs=null;   //结果集
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
            String sql="select * from users where username=?";
            pstmt=conn.prepareStatement(sql);//此句需要一个sql,所以先上一句
            pstmt.setString(1,"tom");
            //3.执行(得到结果集ResultSet到3;得到后要拿出来,所以到4)
            rs=pstmt.executeQuery();
            //4.结果(如果有下一个,拿出;但上面sql语句中有一个?它需要通过PrepareStatement设置进去值,这样才能拿到结果,否则?占位符是无值的)
            while (rs.next()){
                System.out.println(rs.getString(1+","+rs.getString(2)));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (rs!=null){
                rs.close();
            }if (pstmt!=null){
                pstmt.close();
            }if (conn!=null){
                conn.close();
            }
        }
    }
}
【2】. mybatis架构

重点是对 SQL语句进行操作。
首先有一个全局配置文件(.xml文件,名称可任意,如SqlMapConfig.xml,此配置文件可配置数据源、事务等),还有 Xmapper.xml配置 Sql;通过此全局配置文件才能创建 SqlSessionFactory;由 SqlSessionFactory创建 SqlSession,才能对 DB进行操作;在 DB操作过程中调用底层的 Exector;Exector将 mapper.xml中配置的 sql语句变成所需的 Statement去操作 DB(操作过程中 sql语句会有占位符);要有输入映射,将某类型映射过来取替换掉占位符,再执行,从 DB中得到执行结果,输出某类型;
MappedStatement对 sql执行 输入参数 进行定义(包括 hashmap),Exector通过 MappedStatement,在执行 Sql 将输入的 java对象映射到 sql中,输入参数映射就是 jdbc编程中对 prepareStatement设置参数;
MappedStatement对 sql执行 输出结果 进行定义(包括 hashmap),Exector通过 MappedStatement,在执行 Sql 将输出结果映射到 java对象中,输出结果映射过程相当于 jdbc编程中对 结果的解析处理过程;
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41029923/article/details/83472411