欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis入门

程序员文章站 2022-03-10 17:18:26
...

jdbc原生态分析

原生态的jdbc代码问题总结:
1、在创建连接时,存在硬编码(1-2步) 解决办法:配置文件(全局配置文件)
2、在执行statement时存在硬编(3-7步) 解决办法:配置文件(映射文件)
3、频繁的开启和关闭数据库连接,会造成数据库性能下降(8步) 解决办法:数据库连接池(全局配置文件)

public static void main(String[] args) {//原生态的jdbc代码
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;

            try {
                //1、加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                //2、通过驱动管理类获取数据库链接
                connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
                //3、定义sql语句 ?表示占位符
            String sql = "select * from user where username = ?";
                //4、获取预处理statement
                preparedStatement = connection.prepareStatement(sql);
                //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                preparedStatement.setString(1, "王五");
                //6、向数据库发出sql执行查询,查询出结果集
                resultSet =  preparedStatement.executeQuery();
                //7、遍历查询结果集
                while(resultSet.next()){
                    User user 
                    System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //8、释放资源
                if(resultSet!=null){
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(preparedStatement!=null){
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

            }

        }

mybatis框架原理

  • 开发过程中通常对黄色区域进行编码。
  • 面试时注意表达出executor执行器的作用。

Mybatis入门

配置文件中的一些问题

.#{}和${}的区别

  • .#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意。
  • 后者表示拼接符模糊查询时常用,${}接收简单类型的参数时,里面的名称必须是value。
  • ${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号,而.#{}会有)
  • ${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名。

缓存

Mybatis的缓存,包括一级缓存和二级缓存一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,同一级缓存。一级缓存是默认使用的。二级缓存需要手动开启。但是Mybatis本身是一个持久层框架,它不是专门的缓存框架,所以它对缓存的实现不够好,不能支持分布式。因此使用redis集群对缓存数据进行集中管理,使用分布式缓存框架redis、memcached、ehcache。

****

Mybatis提供来一个****工具,通过****,可以帮助程序员根据单表来生成po类、mapper映射文件、mapper接口。注意只是单表。

相关标签: mybatis