Mybatis学习

一、

1.第一个mybatis程序

层层递进,SqlSession用来执行sql语句,SqlSession是与数据库的一次会话。

通过SqlSessionFactory获取SqlSession

通过SqlSessionBuilder的build()方法获取SessionFactory

Mybatis学习_第1张图片

Mybatis学习_第2张图片

Mybatis学习_第3张图片

Mybatis学习_第4张图片

2.第一个程序就找了30分钟的错(悲惨)

核心配置文件配错了,把 在写url时,把 url多加了一个  斜杠

写一个斜杠就行,下方是正确写法。

Mybatis学习_第5张图片

3.第一个程序的细节

核心配置文件中的 mapper  中的 url与resource属性,建议用resource

4.事务管理机制深度剖析

在mybatis-config.xml 核心配置文件中,可以通过以下的配置进行mybatis事务管理

type属性的值有两种:① JDBC   ②  Managed

Mybatis学习_第6张图片

当使用属性值 JDBC时,开启了事务,需要手动提交事务。

当使用属性值 Managed,表示事务交给别人管理,没有开启事务,自动提交。

下图是老杜剖析的:

Mybatis学习_第7张图片

Mybatis学习_第8张图片

5.JUnit在实际开发的使用

Mybatis学习_第9张图片

Mybatis学习_第10张图片

6.Mybatis 集成日志组件

注意:logback的作用域是 test ,因此只有在测试时,对应的日志文件才会生效。

mybatis的核心配置文件中可以配置

Mybatis学习_第11张图片

mybatis内部 内置了日志实现   STDOUT_LOGGING ,这时需要在mybatis的核心配置文件中,配置一下  .

要想使用其他日志组件,可以引入相关依赖,然后配置其必需的配置文件,不需要在mybatis-config中配置

Mybatis学习_第12张图片

.dtd 文档类型约束

Mybatis学习_第13张图片

Mybatis学习_第14张图片

二、进行简单的增删改查

1.增

pojo类的对象和map可以进行传值。

但要注意:pojo类的属性名要和#{ name } 中相同,而map的key要与#{key} 中的key相同。

后面会学到 开启驼峰命名的映射,这样传 pojo类就会特别方便。

Mybatis学习_第15张图片

下面是 传pojo类时会出现的问题:

没有对应的getter方法,即#{a}中的名字a 需要在pojo类中获得其对应的值,但 在pojo类中没有对应的 get()来获得,即没有getA()方法。

Mybatis学习_第16张图片

小汇总:

2.删

当只有一个占位符时,其内部的名字可以随便写。

Mybatis学习_第17张图片

3.改

改 其实比较简单,直接传进去一个pojo对象就行,但注意名字可能会不匹配,因为数据库中的表名,极有可能含有 下划线,这时就不能 通过 get()方法获取相应的值。

Mybatis学习_第18张图片

4.查

查询单条数据

如果没有 指定相应  resultType   ,就不能用Car 类型的变量来接收

源码:如下

如果不指定resultType ,就会出现异常。

Mybatis学习_第19张图片

查询多条数据(特别注意)

对于查询多条数据,所要 指定的resultType  仍未Car 不需要写成List<>的形式。

Mybatis学习_第20张图片

5.命名空间

命名空间的引入是为了解决sql  的 id  冲突。

假如有一个CarMapper1.xml  里面配置 id =selectAll, 另一个配置文件同样配置 id=selectAll,这个时候,就需要命名空间来解决问题。

在调用sqlSession.select(命名空间.id );  ,以这种形式就会解决id冲突的问题。

   

三、核心配置文件详解




    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

①    

下面是   内部的标签

            

Mybatis学习_第21张图片

Mybatis学习_第22张图片

1.environment

里面可以有多个 

每一个 environment有它独特的id, 在通过sqlSessionFactoryBuilder的build方法创建sqlSessionFactory时,可以根据id去指定具体的环境.

如果没有指定环境,就会 enviroments(加s了) 中 default 指定的数据库。

2.transactionManager

type属性有两个值:MANAGED 和JDBC 

MANAGED 将事务的管理交给其他容器进行管理。

JDBC 使用原生的JDBC事务机制,即在mybatis中必须手动提交,当然如果你不想手动提交,可以在创建sqlsession 进行指定。

Mybatis学习_第23张图片

3.datasource

type属性有三种值:POOLED  UNPOOLED   JNDI

POOLED和UNPOOLED很简单,从字面意思就可以知道,一个使用mybatis内置的连接池,一个不使用任何连接池,即没开启一次会话就关闭。

但对于JNDI这种方式,可以使用 JNDI服务器中集成的连接池。

JNDI服务器可以是TomCat,但我不知道为什么?

4.properties

mybatis提供了更加灵活的配置,连接数据库的信息可以单独写到一个属性资源文件中,假设在类的根路径下创建jdbc.properties文件,配置如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/powernode

 在mybatis核心配置文件中引入并使用:





    
    
        
        
    

    
        
            
            
                
                
                
                
                
            
        
    
    
        
    

编写Java程序进行测试:

@Test
public void testProperties() throws Exception{
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config4.xml"));
    SqlSession sqlSession = sqlSessionFactory.openSession();
    Object car = sqlSession.selectOne("selectCarByCarNum");
    System.out.println(car);
}

Mybatis学习_第24张图片

5.mapper

Mybatis学习_第25张图片

四、手写godMybatis

1.dom4j解析XML文件

你可能感兴趣的:(java,开发语言)