栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis

1、Mybatis简介

Mybatis是一种持久层框架,类似于JDBC访问数据库的操作,
我们说JDBC使用到的对象有Connection对象,PreparedStatement对象,ResultSet对象。
而Mybatis框架的核心对象有SqlSessionFactoryBuilder对象,SqlSessionFactory对象,SqlSession对象。
并且myibatis框架和hibernate框架最大的区别就在于mybatis它的灵活性比较高。

2、Mybatis特点

1.基于SQL语法,简单易学
2.SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

3、Mybatis组成部分 3.1 核心对象

SqlSessionFactoryBuilder:
SqlSessionFactory:MyBatis应用的核心
SqlSession

3.2 核心配置文件
mybatis-config.xml
  						//默认的运行环境 ID
								//运行环境 ID
							//事务管理器配置
									//数据源配置
    
	
	
	



3.3 sql映射文件

	//返回值需一致
		select count(1) from user
	

4.项目准备 4.1先创建Maven项目导入依赖
 
      org.mybatis
      mybatis
      3.5.1
    
    
      mysql
      mysql-connector-java
      5.1.36
    
4.2 添加日志 mybatis-config.xml
  
    
        
        
    
4.3工具类 util/MybatisUtil.java
public class MybatisUtil {
    private static SqlSessionFactory factory = null;

    static {
        String config = "mybatis-config.xml";
        try {
            InputStream in = Resources.getResourceAsStream(config);
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            factory = builder.build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//    获取SqlSession
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        if(factory != null){
            sqlSession = factory.openSession();
        }
        return sqlSession;
    }
}

4.4 mybatis-config.xml




    


    
    
        
        
    



    
    
    
    
        
        
            
            
            
            
            
                
                
                
                
                
                
                
                
            
        
    
    
    
        
        
    

4.5 Test测试
 @Test
    public void testHelloWorld() throws IOException {
        String config = "mybatis-config.xml";
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        Integer count = sqlSession.getMapper(PersonMapper.class).findCount();
        System.out.println("count:"+count);
        
        sqlSession.close();
    }
5.#和$不同应用场景

#:占位符 语法: 替换值 安全 预处理之后可以预防SQL注入 性能提高 把每次预编译后产生的preparedStatement对象缓存,以便下次直接使用

$: 字符串替换 语法: 替换表名/列名/不同列排序等 不安全 在预编译之前就已经被替换,有被注入的风险 一般用在order by, limit, group by等场所

如下例:

如果传入的username 为 a' or '1=1,那么使用${}处理后直接替换字符串的sql就解析为:

select * from t_user where username = 'a' or '1=1' ;

这样的话所有的用户数据就被查出来了,这样就属于SQL注入。

如果使用#{},经过sql动态解析和预编译,会把单引号转义为’

那么sql最终解析为:

select * from t_user where username = "a' or '1=1 ";

//这样会查不出任何数据,有效阻止sql注入

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号