图片来自b站的黑马网课 截图 懒得自己打字了hh 帅气的人都要注明出处
相信在学习框架之前 都学习了JDBC
因为Mybatis可以解决旧的JDBC存在的一些问题
Mybatis是一个ORM框架,即object relation mapping,对象关系映射架构,让Java的对象与数据库的对象一一对应。能自动保存对象到数据表。
idea创建一个maven项目
在pom.xml 中加入下面的依赖项:
2023年应该都是最新版本的。
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.33</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.13</version>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.26</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.13.2</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
create database mybatis;
创建
db.properties连接配置
- mysql.driver=com.mysql.cj.jdbc.Driver
- mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimeZone=utc&CharacterEncoding=utf8
- mysql.username=root
- mysql.password=Zxd123456789.
-
导入写好的 连接配置
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="properties/db.properties">properties>
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
-
- <property name="driver" value="${db.driver}"/>
- <property name="url" value="${db.url}"/>
- <property name="username" value="${db.user}"/>
- <property name="password" value="${db.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
-
- <mapper resource="StudentMapper.xml"/>
- mappers>
-
- configuration>
搭建完毕之后 我们就来 用一下mybatis
上面的例子中我们已经创建好了数据库 现在我们新建一张表
- create table user
- (
- id int null,
- name varchar(10) null,
- age int null,
- constraint table_name_pk
- primary key (id)
- );
-
- create unique index table_name_id_uindex
- on table_name (id);
insert into user (id, name, age) values ('0','老李',12)
建立一个包mypojo 在包里新建一个pojo类
让他和数据库的字段一一对应
- package mypojo;
-
- public class pojo {
- private String name;
- private int age;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- }
这里用来查询
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="mypojo.pojo">
-
-
-
- <select id="find" resultType="mypojo.pojo">
- //设置唯一的id 与数据类型
- select * from user where id =#{id}
- select>
- mapper>
在核心配置文件mybatis-config.xml里 映射 我们的查询
-
- <mappers>
-
- <mapper resource="usermapping.xml"/>
- mappers>
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="db.properties">
-
- properties>
-
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
-
- <property name="driver" value="${mysql.driver}"/>
- <property name="url" value="${mysql.url}"/>
- <property name="username" value="${mysql.username}"/>
- <property name="password" value="${mysql.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
-
- <mapper resource="usermapping.xml"/>
- mappers>
-
- configuration>
新建个测试类
test.java
-
- import mypojo.pojo;
- 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 java.io.IOException;
- import java.io.InputStream;
-
- public class test {
- public static void main(String[] args) throws IOException {
-
-
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- //获取核心配置
- SqlSessionFactory sqlf = new SqlSessionFactoryBuilder().build(is);
- //开启sql
- SqlSession sqs = sqlf.openSession();
- pojo p= sqs.selectOne("mypojo.pojo.find",1);
- //加载sql
- System.out.println(p.getName()+p.getAge());
- //获取到数据库信息
- sqs.close();
- //释放资源
- //从这里也可以看出 mybatis对于jdbc的补充
-
- }
- }
成功获取了信息
亲手做了上面的练习 能很好的看出mybatis的工作原理。
图是b站黑马的 注明出处 不过这不影响帅气的人自学
由核心配置文件加载映射文件 也就是上面将数据库与Java对象对应起来的文件
然后构造会话工厂 创建会话对象 创建执行器 由 mybatis为我们自动封装映射数据库中的类型到Java对象上
mybatis-config.xml
下面这个配置文件的顺序是固定的不能随意更改 全部给了注释
- "1.0" encoding="UTF8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="db.properties">
- properties>
- <settings>
- <setting>//这里配置一些设置setting>
- settings>
- <typeAliases>
- <package name=""/>
-
- typeAliases>
- <environments default="development">
-
- <environment id="development">
-
- <transactionManager type="JDBC"/>
-
- <dataSource type="POOLED">
-
-
- <property name="driver" value="${mysql.driver}"/>
- <property name="url" value="${mysql.url}"/>
- <property name="username" value="${mysql.username}"/>
- <property name="password" value="${mysql.password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
-
- <mapper resource="usermapping.xml"/>
-
-
- mappers>
-
- configuration>
在之前拼接sql使用的是 程序员去手动的拼接
举个例子:select xx from table where xxx and xxx
非常繁琐 且不方便 而且存在问题 如果条件不成立 关键字就会多余出来
mybatis提供了动态sql拼接
有以下几组标签 来拼接sql
以if和where为例子
这里的select语句 如果按照之前的静态的写法 将会很麻烦 这里我们用where和if 组合起来
进行了条件判断 其他几个标签也可以自行去尝试 语法差不多 有Java基础是可以很快理解的
下面主要将一下 trim标签
可以看到下面的代码 tirm标签可以代替where 可以添加前缀where 以及自动的去除where后面的and 【根据and和where后面的条件是否成立来决定是否剔除关键字】
用法也是比较简单
在更新语法后
这里写条件即可
提供了set标签 当set与if连用 要确保set标签内部不为空 否则会有问题
数据库关系映射:
1:1 一对一 一个人 一张身份证
1:n 一对多 一个人很多个朋友
m:n 多对多 每个人都会有很多朋友