Mybatis
Mybatis
ORMapping:Object Reationship Mapping对象关系映射
对象指面向对象
关系指关系型数据库
java到Mysql的映射,开发者可以用面向对象的思维来管理数据库。
简单来说,mybatis是一个实现了数据持久化的开源框架,简单理解就是对jdbc进行封装。
- Mybatis优点
-
Mybatis缺点
-
Mybatis核心的接口和类
-
Mybatis的开发方式
1.使用原生接口
2.Mapper代理实现自定义接口。
如何使用Mybatis?
- 新建Maven工程,pom.xml里面添加依赖。
<?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>com.southwind</groupId>
<artifactId>aimybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<!--添加mybatis的依赖和mysql的驱动-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!--解决idea只能读取resource文件夹里面的配置文件。java里面的配置文件也应该被读取-->
<build>
<resources>
<resource>
<!--把java文件夹里面的所有xml文件设置为可读取状态-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
</dependencies>
-
新建数据表
CREATE TABLE t_account( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(11), PASSWORD VARCHAR(11), age INT )
-
新建数据表对应的实体类Account
package com.southwind.entity;
import lombok.Data;
@Data
import lombok.Data;
import lombok.NoArgsConstructor;
public class Account {
private long id;
private String username;
private String password;
private int age;
}
-
创建Mybatis的配置文件config.xml,文件名可自定义。
<?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> <!--配置mybatis的运行环境--> <!--environments可以配置多个环境environment,我们从中选一个环境即可--> <!--default属性代表默认的数据源名称,名称可以自己起--> <environments default="development"> <environment id="development"> <!--配置JDBC的事务管理--> <transactionManager type="JDBC"></transactionManager> <!--POOLED配置JDBC数据源连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--选择与那个数据库连接--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?userUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
1.使用原生接口开发
Mybatis框架需要开发者自定义Sql语句,写在Mapper.xml文件中,实际开发过程中,会为每个实体类创建对应的Mapper.xml,定义管理对象数据的SQL。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.mapper.AccountMapper">
<!--insert标签相当于一个方法,save相当于方法名,parameterType相当于传参,传一个ACCOUNT类型的对象-->
<!--从对象中把value值取出来并通过value传给sql-->
<insert id="save" parameterType="com.southwind.entity.Account">
insert into t_account(username,password,age) values(#{username},#{password},#{age})
</insert>
</mapper>
- namespace通常设置为文件所在包加文件名的形式。
- insert标签执行查询操作
- id:实际调用mybatis方法时需要用到的参数
- parameterType是调用对应方法是参数的类型。
在cpnfig.xml注册AcccountMapper.xml
<!--注册AccountMapper.xml-->
<!--如果引用要写文件后缀的时候,前面的最好用/来表示下一级,因为文件后缀是.会和前面的.冲突-->
<mappers>
<mapper resource="com/southwind/mapper/AccountMapper.xml"></mapper>
</mappers>
调用Mybatis原生接口进行调用
package com.southwind.test;
import com.southwind.entity.Account;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
//加载Mybatis配置文件,把配置文件config.xml以流的形式读取到类中。
InputStream inputStream = Test.class.getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
//sqlSessionFactoryBuilder根据对应的配置文件创建工厂对象。
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过获取AccountMapper.xml文件中Insert标签的位置把它与该类关联起来。
String statement ="com.southwind.mapper.AccountMapper.save";
Account account = new Account(1l,"zhangsan","1234",24);
//把位置与sqlsession、关联,并把需要的对象参数也传进去
sqlSession.insert(statement,account);
//提交事务
sqlSession.commit();
}
}