mybatis知识点总结
文章目录
前言
以下是本篇文章正文内容,如有表达不全的问题还请指出,本文中插入的图片部分由网上下载,如涉及版权问题联系我删除。
一、持久层技术区别
二、ssm项目开发准备及步骤
1.mybatis下载
下载网址:https://github.com/mybatis/mybatis-3,点击Download Latest
github地址:https://github.com/JTanga/MybatisTest
2.新建maven项目,添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.tangjingjing.example</groupId>
<artifactId>MySSMTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<!--junit-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.新建数据库,创建usertest表
4.添加User类
package com.test.pojo;
public class User {
private String userName;
private String password;
private Integer id;
private Integer age;
private String gender;
private String email;
public User(String userName,String password,Integer id,Integer age,String gender,String email){
this.userName = userName;
this.id = id;
this.password = password;
this.age = age;
this.gender = gender;
this.email = email;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", password='" + password + '\'' +
", id=" + id +
", age=" + age +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
5.添加mybatis-config.xml
xml文件中配置数据库连接信息、mapper文件路径
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 默认使用的环境 ID(比如:default="development")
也就是说我们可以配置多套<environment>环境-->
<environments default="development">
<!--
每个 environment 元素定义的环境 ID
-->
<environment id="development">
<!--
transactionManager 事务管理器
type的值有JDBC和MANAGED
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
-->
<transactionManager type="JDBC"/>
<!--
dataSourcedataSource 数据源 dbcp c3p0 druid
type="[UNPOOLED|POOLED|JNDI]"
POOLED意思有连接池的连接
UNPOOLED意思没有连接池的连接
-->
<dataSource type="POOLED">
<!-- JDBC 驱动 mysql8.**用com.mysql.cj.jdbc.Driver-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- url数据库的 JDBC URL地址。-->
<property name="url" value="jdbc:mysql://localhost:3306/clouddisk"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!-- defaultTransactionIsolationLevel – 默认的连接事务隔离级别。–>-->
<!-- <property name="defaultTransactionIsolationLevel" value=""/>-->
<!-- defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)–>-->
<!-- <property name="efaultNetworkTimeout" value=""/>-->
</dataSource>
</environment>
</environments>
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<!-- <mapper resource="asia/xiaojiang/mybatis03/dao/UserMapper.xml"/>-->
<!-- 使用完全限定资源定位符(URL)
不推荐使用
<mapper url="E:\JetBrains\mybatis学习\Mybatis-study\Mybatis-03\src\main\java\asia\xiaojiang\mybatis03\dao\UserMapper.xml"/>
-->
<!-- 使用映射器接口实现类的完全限定类名
使用注意点:
接口和其配置文件必须同名, 必须在同一个包下
-->
<mapper resource="mapper/UserMapper.xml"/>
<!-- 将包内的映射器接口实现全部注册为映射器
使用包扫描注意点:
接口和其配置文件必须同名, 必须在同一个包下
-->
<!-- <package name="asia.xiaojiang.mybatis03.dao"/>-->
</mappers>
</configuration>
6. 创建UserMapper接口
public interface UserMapper {
int insertUser();
}
7.创建UserMapper.xml
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.UserMapper">
<insert id="insertUser">
insert into usertest values(1,'tangjingjing','123456',23,'fale','123@qq.com')
</insert>
</mapper>
8.创建测试文件,测试添加一条记录
public class Test {
@org.junit.Test
public void test() throws IOException {
// 获取配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 获取SqlSession会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取usermpper的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();
System.out.println(result);
// 提交事务才能起效
sqlSession.commit();
sqlSession.close();
}
三、mybatis标签与注解
1.< typeAliases>定义别名
2.@Mapkey(“对象中某一属性名”)
比如查询功能,mapper接口中接收mapper.xml中返回的类型时,用@MapKey可以直接接收为map类型,而不是单纯的List列表。@Mapkey(“对象中某一属性名”)可以指定用该实体类中的哪个属性做返回值map的key,而每个key的对应value就是查询出来的对象。
参考http://t.csdn.cn/X2TPS
@MapKey("userName")
Map<String, User> selectAll();
3.< resultMap>标签
解决数据库表字段和对象属性不一致的情况
<mapper namespace="com.test.mapper.UserMapper">
<!-- 解决数据库表字段和User对象属性不一致的情况-->
<!-- 并且type=User是<typeAliases>起的别名-->
<resultMap id="resultMap" type="User">
<id column="id" property="id"></id>
<result column="userName_test" property="userName"></result>
<result column="password_test" property="password"></result>
<result column="age_test" property="age"></result>
<result column="gender" property="gender"></result>
<result column="email" property="email"></result>
</resultMap>
<select id="select" resultMap="resultMap">
select * from usertest where userName_test = #{userName}
</select>
<insert id="insertUser">
insert into usertest values(null,'tangjingjing1','1234567',23,'fale','123@qq.com')
</insert>
</mapper>
4.association、collection
association | 一对一和多对一 | 人和身份证是一对一 |
---|---|---|
collection | 一对多 |
association是用于一对一和多对一;
collection是用于一对多的关系;
5.动态sql标签
< if> | |
---|---|
< where> | 解决where关键字以及出现的第一个and/or关键字导致sql语句错误 |
< trim> | 在条件判断完的SQL语句前后添加或者去掉指定的字符 |
< choose> < when> | if-else |
< foreach> | 循环数组、集合、map,比如批量添加删除 |
< set> | 去除update语句中的{,}逗号的问题 |
< include> | 引用sql片段 |
参考https://blog.csdn.net/m0_46570170/article/details/124256245
批量添加:
6.mybatis一级二级缓存
一级缓存基于数据库会话(SqlSession 对象)的,默认开启。即通过同一个sqlSession查询的数据会被缓存。
二级缓存基于全局(nameSpace)的,开启需要配置。
一级缓存
:
一级缓存失效
:(清空缓存:sqlSession.clearCache())
二级缓存
:
MyBatis 的二级缓存,实际上就是将数据放进了硬盘文件中去了(序列化)。
设置< cache>标签
:
关闭一级缓存进入二级缓存
:
二级缓存 命中率
:
Cache Hit Ratio (缓冲命中率)
假设你将一段数据缓存至内存中
第一查询数据时:由于你是在从数据库中查询的数据,缓存命中率为了0,还没有进入缓存,关闭此数据库链接后
第二次再查询相同的数据时会直接从内存中去取这条相同的数据
缓存将命中,所以此时的缓存命中率为0.5
第三次查询相同的数据,则命中率为0.66666
以此类推…
参考https://blog.csdn.net/ChineseSoftware/article/details/122881217
6.mybatis整合第三方缓存ehcache/redis
参考https://blog.csdn.net/qq_34097912/article/details/122102106
7.MyBatis逆向工程代码生成
根据数据库表生成实体、mapper.java、mapper映射文件。
参考https://blog.csdn.net/qq_45829231/article/details/117263141
总结
以上就是今天要讲的内容,本文仅仅简单介绍了mybatis的一些基础内容,有描述错误的地方请指出,感谢观看。