Mybatis学习记录

 学习网页:入门_MyBatis中文网

为什么学习Mybatis,或者说这玩意儿有啥用?

答:持久层的一个框架,个人理解是用于简化SQL操作,因为各种操作可以通过XML文件进行配置,最后在类中调用配置文件,即可使用文件中的各种方法,之后的操作不需要再使用SQL语句,而直接调包。

主要特点是会对对象进行映射,mappers的设置是核心内容。

学习创建项目的过程顺序:

1.创建项目后在项目中创建Maven模块:在pom.xml文件中导入jdbc以及mybatis对应依赖,这玩意儿主要用途就是用来导包。

2.创建配置文件mybatis.xml,并且对其进行设置:设置内容主要包含头文件、环境配置、映射配置等,如下为配置文件:环境配置和映射配置都可以存储多个映射,也就是说存在environments(environment1,environment2,..)和mappers(与environment同理)。

注意:创建的mybatis.xml文件要在resources文件夹下,并且resources文件夹要为资源根目录。




    
        
            
            
                
                
                
                
            
        




    
    
        
    

3.创建映射文件mapper_xxx.xml,定义查询方法,比如下述的resultType定义的是相对路径,select * from book定义的是selec方法。




    

4.在配置文件mybatis中导入mapper_xxx.xml 

    

5.创建需要完成的类,创建对应测试类:
测试类中导入mybatis.xml配置文件,在这里一定要注意导入包的路径不要出错。

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 pojo.Book;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException {
        //导入配置文件
        String resource = "mybatis.xml";
        //根据配置文件创建流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //调用工厂方法用于创建会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行查询
        List list =sqlSession.selectList("Book.sellectAllBooks");
        for (int i = 0; i < list.size() - 1; i++) {
            Book B= (Book) list.get(i);
            System.out.println(B.getAuthor());
            System.out.println(B.getId());
        }
        sqlSession.close();
    }
} 
  

运行上述步骤出现的BUG:

1.Could not find resource resources.mybatis.xml:原因在于将配置文件的相对路径写错了。

2.代码运行后为什么会显示正在链接虚拟机:未知BUG,重启IDEA后解决。

3.在test.py中调用sellectAllBooks时将名称写错sellectAll

配置文件设置(xxx.properties):

出现报错:大概意思找不到数据库的url
问题所在:因为在xx.property文件中设置的url中有中文,将其转换为了utf-8的编码后,解决问题,以后创建内容最好不要出现中文,防止编码问题。

注意点:配置文件不要出现空格,格式为键=值,中间不能出现任何其余内容。除此之外,配置文件不是xml文件,编码方式不同,xml(加了头文件,头文件中有utf-8编码)文件支持中文,而.property不支持。

很重要的点,和环境以及映射文件相同的一点,配置文件也需要在mybatis.xml中进行配置,同时三者之间还有顺序关系,顺序不能够出错,否则会进行报错。

起外号:

MyBatis别名的两种实现方式_mybatis中别名的声明怎么写,两种方式-CSDN博客

目前初学阶段没有感觉太大用途,用法就是在mybatis.xml文件中添加外号语句,将调用方法进行直接定义,之后再xxx_mapper.xml文件中就直接使用外号。注意,这里的外号实际上是一个类的路径,并且这个类是用于定义数据库的。

而在测试类只需要直接使用xxx_mapper.xml文件中的方法,所以取别名和测试类没有联系,相当于在mybatis.xml与xxx_mapper.xml两者之间套娃。

配置maven日志;

使用log4j来进行,在maven中导入依赖,在resource根文件下添加log4j.properties文件,这个文件名是固定的。重新运行测试类之后发现并没出现日志信息,原因在于我用的是log4j1.x的语法而导入的2.x的版本,1.x与2.x的语法不一致。

将日志与mybatis结合的产物如下,可以将整个路径的日志等级全部打出,这里设置log4j.logger.pojo.book=trace的意义在于可以将这个路径下的trace以上的日志全部打出,可以结合mybatis的别名,将log4j.logger.pojo.book=trace换为log4j.logger.别名=trace

log4j.rootLogger=error

log4j.logger.pojo.book=trace
#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n

你可能感兴趣的:(mybatis,学习,java)