Mybatis学习总结

跟着bilibili上的秦疆老师经过三天的时间,把Mybatis系统的学习了一下。今天是第三天,课程结束了,来做个简单的回顾和总结。进入正题。Mybatis作为持久层的一个框架,整体学下来,学到了很多对数据的不一样的操作。真切的感觉到了这个框架的强大和便利。环境使用的是IDea,Maven项目。首先创建了一个主程序,在配置文件中加入引用,Maven自动下载引用jar包,不得不说很舒服。不像之前使用的环境需要自己手动导包,buildPath...

紧接着就是需要进行主配置(Mybatis-config.xml)的编写

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <properties resource="db.properties"/>
 7     <typeAliases>
 8        <typeAlias type="com.coolzhu.domain.User" alias="User"/>  <!--给实体类起别名,在resultType需要返回对象的时候使用。-->
 9     </typeAliases>
10     <environments default="mysql">
11         <environment id="mysql">
12             <transactionManager type="JDBC" />
13             <dataSource type="POOLED">
14                 <property name="driver" value="${driver}" />
15                 <property name="url" value="${url}" />
16                 <property name="username" value="${username}" />
17                 <property name="password" value="${password}" />
18             </dataSource>
19         </environment>
20     </environments>
21     <mappers><!--映射器-->
22         <mapper resource="com/coolzhu/Mapper/UserMapper.xml"/>
<!--映射器   有三种使用 "resource"算第一种
2.class="com.coolzhu.Mapper.UserMapper"
3.package="com.coolzhu.Mapper"
其中,resource不要求配置文件存放位置,后两者要求配置文件要存放在同一文件夹下-->
23 </mappers> 24 </configuration>

工具类的编写:

 1 package com.coolzhu.Utils;
 2 
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 
11 //sqlSessionFactory   -->sqlSession
12 public class MybatisUtils {
13     private static SqlSessionFactory sqlSessionFactory;
14     static {
15         try {
16             String resource="Mybatis-config.xml";
17             InputStream inputStream= Resources.getResourceAsStream(resource);
18             sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23     public static SqlSession getSqlSession(){
24        return sqlSessionFactory.openSession(true);//自动提交事务(t/f)
25     }
26 }

Mybatis-config.xml配置完毕之后,写实体类(domain/pojo/entity),“alt+ins”自动生成构造函数,GETTER/SETTER。

CRUD的实现:

再写dao/Mapper包,其中包含(***Mapper接口,***Mapper.xml配置文件)

 

 

 

 ***Mapper是一个传统的接口,写具体实现就好。至于同名xml文件,需要注意的是,namespace:用作与接口进行联系,做出具体实现。要实现CRUD只需要在<mapper></mapper>中写入相应的标签,然后再写具体的SQL行了。这时,老师讲了个万能Map,事实证明,确实好用。

在增删改的时候,需要注意的是,这个时候没有resultMap选项,此时给出parameterType=map,在具体实现的时候就可以愉快的使用map了。而在做查找操作的时候,需要给出returnMap。

 

注解开发:

注解开发,对于简单的CRUD来说,又省去了很多步骤。当然前提是(简单的CRUD...)

 

 

注解开发的时候,要注意在Mybatis-config.xml中把映射器中的.xml文件(class模式时)换成.Mapper,因为注解开发的时候,是不需要.xml配置文件进行连接的。

 

 

日志:

 

日志如果是引用标准的日志,只需要在Mybatis-config.xml中加入setting,就可以了。

 

 

 但是如果使用log4j的话,当然还需要做导包,配置,引入才可以正常使用。

导包:

 

1 <!-- https://mvnrepository.com/artifact/log4j/log4j -->
2 <dependency>
3     <groupId>log4j</groupId>
4     <artifactId>log4j</artifactId>
5     <version>1.2.17</version>
6 </dependency>

配置:

 1 ### set log levels ###
 2 log4j.rootLogger = DEBUG , C , D , E 
 3 
 4 ### console ###
 5 log4j.appender.C = org.apache.log4j.ConsoleAppender
 6 log4j.appender.C.Target = System.out
 7 log4j.appender.C.layout = org.apache.log4j.PatternLayout
 8 log4j.appender.C.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
 9 
10 ### log file ###
11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
12 log4j.appender.D.File = ../logs/mybatis_study.log
13 log4j.appender.D.Append = true
14 log4j.appender.D.Threshold = INFO 
15 log4j.appender.D.layout = org.apache.log4j.PatternLayout
16 log4j.appender.D.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
17 
18 ### exception ###
19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
20 log4j.appender.E.File = ../logs/mybatis_study_error.log 
21 log4j.appender.E.Append = true
22 log4j.appender.E.Threshold = ERROR 
23 log4j.appender.E.layout = org.apache.log4j.PatternLayout
24 log4j.appender.E.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n
25 
26 ###mybatis show sql###
27 log4j.logger.com.ibatis=debug
28 log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
29 log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
30 log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
31 
32 log4j.logger.java.sql.Connection=debug
33 log4j.logger.java.sql.Statement=debug
34 log4j.logger.java.sql.PreparedStatement=debug

引用:

 

 这样的话,log4j就可以使用了。

 

 

 动态SQL:

动态SQL是为了解决SQL拼接的问题。提供了基于 OGNL 的表达式if,choose,foreach,when...再结合map一起使用,很强大。

一级缓存和二级缓存:

缓存是为了解决大量用户访问统一数据库造成的诸多(类似高并发)问题。引用秦老师上课的时候,讲的两张表。

 

图、缓存出现的必要性

用户访问数据库顺序:二级缓存---一级缓存---数据库

一级缓存存在场景:SqlSession(一级缓存,自动开启,且无法关闭);

二级缓存存在场景:namespace(二级缓存,手动开启,首先在setting中设置:cacheEnable=true,之后再Mybatis-config.xml中加入“<cache/>”,就完成了二级缓存的开启)

 

 

 

 

图、用户访问数据的顺序

 

 

当然因为是初学,所以也很多遇到了一些常见的坑。

下次再一 一写出来吧。这点东西居然写了一个多小时。。睡了睡了。晚安。

                                                          -------仅用于回忆自己学习Mybatis的内容以及方便日后复习。

posted @ 2020-01-17 23:29  奔跑的虫呙牛  阅读(127)  评论(0)    收藏  举报