1. Mybatis 简介
Mybatis 官网 @ mybatis – MyBatis 3 | 简介
Mybatis下载 GitHub @ GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java
Maven 仓库 @ Maven Repository: org.mybatis » mybatis (mvnrepository.com) , 其中POM修改如下:
<dependency> <!-- mysql驱动--> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- mybatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. Mybatis 配置
涉及到的新文件:需要配置: POM.xml文件,resources/ mybatis-config.xml文件(定义MySQL数据库)/ UserMapper.xml文件(具体定义数据库访问接口规范)
如果遇到src/main/java/com/crevew/dao/*.xml 不打包的问题,有几种解决方案:
1. 把xml文件移到 resources目录下面,系统默认打包该文件夹下所有文件
2. 在POM.xml文件中增加以下配置,显示让maven打包;增加后,务必reload project,否则POM的修改不生效。(如果还不生效,就重启IDEA)
3. 可以在 target/classes/com/crevew/dao/ 下面核实该文件是否存在。
<build> <!--配置打包时不过滤非java文件开始 --> <!--说明,在进行模块化开发打jar包时,maven会将非java文件过滤掉, xml,properties配置文件等,但是这些文件又是必需的, 使用此配置可以在打包时将不会过滤这些必需的配置文件。 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
Mybatis Idea 编辑
Mybatis XML Idea编辑自动提示方法 (强烈推荐):@ (14条消息) IDEA Mybatis xml中配置sql代码自动提示【必看】_idea中xml如何设置自动提示_mingyuexinc的博客-CSDN博客
Mybatis plugin @ IDEA 添加 mybatis mapper的xml文件的自动提示功能 - 简书 (jianshu.com)
3. Mybatis 语法
Mybatis查询就直接查询;增删改需要提交事务。
Mybatis Mapper.xml 参数有三种类型:
1. Object,直接在sql取对象的属性即可
2. Map传递参数,直接在sql中取出属性,用于输出多个参数 (多个参数输入 用Map或者注解)
3. 基本类型(基本类型也可以不写)
模糊查询,可以在xml sql 当中拼接(不安全),也可以在代码执行的时候传递%%
select * from mybatis.user where name like #{value} 或者 List<User> userList = mapper.getUserLike("%李%");
#{} 预编译, ${} 无预编译
4. 配置解析
4.1 Mybatis 默认设置
默认的事务管理器是JDBC, 默认的连接池POOLED
4.2 Properties/typeAliases/Settings/Mappers
Properties: 可以通过properties属性来引用配置文件,如果配置db.properties之后,出现连接错误,原因是: @ 解决Mybatis报错:### Error querying database. Cause: java.sql.SQLException: No suitable driver found for_zhaiC_的博客-CSDN博客
typeAliases:
- 为Java类型设置一个短的名字(DIY),减少冗余;
- 也可以指定包名,Mybatis会自动搜索Java Bean,首字母小写;
- 在实体类较少时,使用前者;实体类较多的时候,使用后者; 但是后者不可以DIY,如果非要改,就在POJO上面增加注解实现@Alias()
Settings: logImpl, cacheEnabled, lazyLoadingEnabled 等。 (Plugin: mybatis-generator-core, mybatis-plus, 通用mapper)
Mappers 映射器: 通过 resource,class,file(不用),package,四种方式加载mapper
4.3 作用域和生命周期
SqlSessionFactoryBuilder: 一旦创建SqlSessionFactory,就不再需要了
SqlSessionFactory: 可以想象为数据库连接池,运行期一直存在,应用作用域;单例模式,或者静态单例模式
SqlSession: 连接到连接池的一个请求,用完需要关闭
5. 映射文件
5.1 ResultMap
解决属性名和字段名不一致的问题。问题是:数据库的字段名称,和pojo属性不一致。
方法一:别名
<select id="getUserById" parameterType="int" resultType="UserAlias"> select id,name,pwd as password from mybatis.user where id = #{id} </select>
方法二:ResultMap 结果集映射
6. 日志
logImpl: 重点是LOG4J, STDOUT_LOGGING
LOG4J 配置文件设置 @ (15条消息) LOG4J的配置文件_log4j配置文件_小逗比iswho的博客-CSDN博客
7. 分页
1. 使用SQL语句的limit实现分页,比如:select * from mybatis.user limit 1,2
2. 使用RowBounds分页,比如
//通过RowBounds实现 RowBounds rowBounds = new RowBounds(1, 2); //通过Java代码层面实现分页 List<User> userList = sqlSession.selectList("com.crevew.dao.UserMapper.getUserByRowBounds",null, rowBounds);
3. 分页插件: MyBatis PageHelper
8. 注解开发
关于接口的理解:
- 接口从更深层次的理解,应是定义(规范、约束)与实现(名实分离的原则)的分离。
- 接口的本身反映了系统设计人员对系统的抽象理解。
- 接口应有两类:第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface)。
- 一个个体可能有多个抽象面。抽象体与抽象面是有区别的。
三个面向区别
- 面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法。
- 面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现。
- 接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题。更多的体现就是对系统整体架构。
注解和XML配置,可以同时使用。 注解的使用方法就是:在接口上实现。
- 本质:反射机制实现。
- 底层:动态代理。
9. Lombok
Lombok安装方式有三部,IDEA安装,POM引用,接口使用。详见 @ (15条消息) idea中怎么使用lombok依赖_idea依赖树只有lombok_南商的博客-CSDN博客
10. 多对一处理
实验环境搭建: @ (15条消息) Mybatis一对多,多对一_mybatis一对多 多对一_羊村跳水冠军个人学习笔记的博客-CSDN博客