学习网页:入门_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
运行上述步骤出现的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