MyBatis基本操作
Posted kawyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis基本操作相关的知识,希望对你有一定的参考价值。
MyBatis 是一款优秀的半自动的轻量级的持久层框架。
创建Maven项目
pom.xml 导入相关依赖
- org.mybatis -> mybatis
- mysql-connection-java -> mysql
- org.projectlombok -> lombok
- log4j -> log4j
<?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.example</groupId>
<artifactId>MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
- 配置
mapper
读取位置 ,解决Mapper配置文件读取不到的关键
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
resources/config.xml
通过 config.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>
<!-- SQL配置 -->
<!-- 连接配置 -->
<!-- 注册Mapper -->
</configuration>
- SQL 的相关配置
<settings>
<!-- 打印SQL语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
- 连接配置
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="url" value="jdbc:mysql://localhost:3306/JavaWeb?userSSL=false&allowPublicKeyRetrieval=true"/>
</dataSource>
</environment>
</environments>
- 注册Mapper
<mappers>
<!-- 注解形式注册 -->
<mapper class="com.kawyang.repository.IClass" />
<!-- 配置文件方式注册 -->
<mapper resource="com/kawyang/mapper/IClassesMapper.xml" />
<mapper resource="com/kawyang/mapper/IStudentMapper.xml" />
</mappers>
entity
创建实体类对象。
lombok 会通过以下注解快速??完成设置
@Data
: 自动添加 Get/Set 方法。
@AllArgsConstructor
: 有参构造
@NoArgsConstructor
: 无参构造
- 配置文件形式
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Classes {
private int id;
private String name;
}
reposotory
编写数据库操作接口
-
配置文件形式
通过配置文件形式,需要编写相应的
Mapper
配置文件,将接口中的方法与 数据库的操作进行映射。
并且在config.xml
中对配置文件 通过 mapper ???的resource
属性,完成注册。
public interface IClasses {
Classes findById(int id);
List<Classes> findAll();
int insertClass(Classes classes);
int deleteById(int id);
int updateClass(Classes classes);
ClassesStudents findClassAndStudentById(int id);
List<ClassesStudents> findAllClassAndStudent();
}
- 注解形式
通过一下注解,编写相应的SQL语句,完成接口方法与数据库操作的映射,不需要配置文件,在 config.xml
中,使用 mapper??? 的 class
属性完成注册。
- @Insert(String sql) : 增
- @Delete(String sql) : 删
- @Update(String sql) : 改
- @Select(String sql) : 查
public interface IClasses {
@Select("select * from classes where id=#{id}")
Classes findById(int id);
@Select("select * from classes")
List<Classes> findAll();
@Insert("insert into classes (id,name) values (#{id},#{name})")
int insertClass(Classes classes);
@Delete("delete from classes where id=#{id}")
int deleteById(int id);
@Update("update from classes set name=#{name} where id=#{id}")
int updateClass(Classes classes);
}
mapper
com.mapper.IClassesMapper
编写数据库操作的Mapper文件,完成方法与查询语句的映射。
<?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>
<select >..</select>
<delete >..</delete>
<update >..</update>
<insert >..</insert>
</mapper>
Mapper??? 通过属性 namespace
: 数据库操作接口的全路径
数据库操作??? :
-
select
- id : 映射接口的方法名
- parameterType : 方法参数的类型
- resultType : 返回值类型的全路径
-
delete
- id : 映射接口的方法名
- parameterType : 方法参数的类型
- 无返回值属性,返回值为
int
类型
-
update
- id : 映射接口的方法名
- parameterType : 方法参数的类型
- 无返回值属性,返回值为
int
类型
-
insert
- id : 映射接口的方法名
- parameterType : 方法参数的类型
-
resultMap:
通过 resultMap
进行含有内嵌对象类的配置。
如:StudentClas 类,除了包含student的基本信息外,含有内嵌对象 classes,需要通过 resultMap 来完成数据的配置。
<resultMap id="StudentCla" type="com.kawyang.entity.StudentCla" >
<id property="id" column="sid"/>
<result property="name" column="sname" />
<collection property="students" ofType="com.kawyang.model.Classes">
<id property="id" column="cid"/>
<result property="name" column="cname" />
</collection>
</resultMap>
<select id="selectStudentClaById" resultMap="StudentCla" parameterType="ind">
select s.id as sid, s.name as sname, c.id as cid, c.name as cname
from student s,classes c
where s.cid=c.id and s.id=#{id}
</select>
- resultMap??? :
- id -> resultMap 的 id
- type -> 实体类类型
- id 和 result??? :
- property -> 类的属性名称
- column -> 查询结果的列名
- collection???:完成对象注入
- property -> 类的注入对象的名称
- ofType -> 注入对象的类型
Main
- 读取配置文件
- 创建SQLSession对象
- 使用SQLSession对象,创建 相应操作的 mapper 对象
- 使用 mapper 对象完成 数据库的操作
public class Main{
public static void main(String[] args) {
// 1. 读取配置文件
InputStream in = Main.class.getClassLoader().getResourceAsStream("config.xml");
// 2. 创建SQLSession对象
// 2.1 创建 SqlSession 工厂??类
SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder();
// 2.2 使用配置文件 完成??创建
SqlSessionFactory bulid = bulider.build(in);
// 2.3 使用??创建 SqlSession
SqlSession session = build.openSession();
// 3. 使用SQLSession对象,创建 相应操作的 mapper 对象
IStudentCla mapper = session.getMapper(IStudentCla.class);
// 4. 使用 mapper 对象完成 数据库的操作
StudentCla student = mapper.findById(2);
// 5. 关闭 SqlSession
session.close();
}
}
以上是关于MyBatis基本操作的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper