MyBatis框架简介及入门案例详解
MyBatis框架简介
MyBatis是一个持久层框架,它支持定制化SQL、存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手工输入以及对结果集的检索封装。MyBatis可以采用注解或xml方式配置映射关系,支持动态SQL,极其灵活方便。
MyBatis入门案例
准备工作
1.创建一个Java Web项目,并引入MyBatis的jar包。
2.引入数据库驱动包,这里以MySQL为例。
在项目中定义实体类
下面以学生实体类为例,实现类信息的定义。
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
定义Mapper接口
定义Mapper接口,并声明方法,将其映射到SQL语句中。
public interface StudentMapper {
public List<Student> findAllStudents();
}
定义Mapper.xml
在resources文件夹下新建一个mapper文件夹,并且在文件夹中新建一个StudentMapper.xml。
<?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.mapper.StudentMapper">
<select id="findAllStudents" resultType="com.domain.Student">
SELECT * FROM student
</select>
</mapper>
配置MyBatis全局配置文件
在resources文件夹下新建一个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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/StudentMapper.xml" />
</mappers>
</configuration>
执行查询操作
public class TestMybatis {
private static SqlSessionFactory factory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SqlSession session = factory.openSession();
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
List<Student> studentList = studentMapper.findAllStudents();
for (Student student : studentList) {
System.out.println("学生id:" + student.getId() + " 学生姓名:" + student.getName() + " 学生年龄:" + student.getAge());
}
session.close();
}
}
MyBatis多表查询示例
数据库表定义
这里我们演示一个校园论坛的数据表结构,包括了四张表:用户表(user)、板块表(board)、帖子表(post)和评论表(reply)。
用户表(user)
列名 | 类型 | 是否为空 | 主键 | 备注 |
---|---|---|---|---|
id | int | 否 | 是 | |
name | varchar(8) | 否 |
板块表(board)
列名 | 类型 | 是否为空 | 主键 | 备注 |
---|---|---|---|---|
id | int | 否 | 是 | |
name | varchar(50) | 否 | ||
content | text | 否 | ||
parent | int | 是 |
帖子表(post)
列名 | 类型 | 是否为空 | 主键 | 备注 |
---|---|---|---|---|
id | int | 否 | 是 | |
title | varchar(50) | 否 | ||
text | text | 否 | ||
reply | int | 是 | 回复数 |
评论表(reply)
列名 | 类型 | 是否为空 | 主键 | 备注 |
---|---|---|---|---|
id | int | 否 | 是 | |
text | text | 否 | ||
post | int | 否 | ||
user | int | 否 | 作者 |
问题描述
需求:查询出每个帖子及其对应的一个评论,要求查询结果为帖子标题和该帖子的一个评论内容。
Mapper.xml文件内容
<?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.mybatis.courses.manytomany.CourseMapper">
<resultMap id="PostResult" type="com.mybatis.courses.manytomany.Post">
<id property="id" column="id" />
<result property="title" column="title" />
<result property="replyCount" column="replyCount" />
<collection property="comments" column="id" javaType="ArrayList"
ofType="com.mybatis.courses.manytomany.Comment" select="findCommentById" />
</resultMap>
<resultMap id="CommentResult" type="com.mybatis.courses.manytomany.Comment">
<id property="id" column="id" />
<result property="postId" column="post_id" />
<result property="content" column="content" />
</resultMap>
<select id="findPostById" resultMap="PostResult">
SELECT * FROM post WHERE id = #{id}
</select>
<select id="findCommentById" resultMap="CommentResult">
SELECT * FROM comment WHERE post_id = #{id} LIMIT 1
</select>
</mapper>
测试类内容
@Test
public void testFindPostWithComment() {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try {
CourseMapper courseMapper = sqlSession.getMapper(CourseMapper.class);
Post post = courseMapper.findPostById(1);
System.out.println(post.getTitle());
System.out.println(post.getComments().get(0).getContent());
} finally {
sqlSession.close();
}
}
通过以上示例,我们可以看到通过MyBatis优雅地进行类与关系型数据库之间的数据交互。无需编写大量的JDBC代码,从而提高开发效率,在代码维护与稳定性方面也有很好的保障。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis框架简介及入门案例详解 - Python技术站