记录Java后端框架,持久层MyBatis框架的基本使用,使用Maven对依赖进行管理,使用两种方式使用Mybatis访问MySQL数据库,简化MySQL代码,包含完整代码
前言
提示:本文要记录的大概内容
框架是对基础功能进行封装,程序员在此基础上进行业务开发。本文主要记录使用Mybatis去构建访问MySQL数据库的简单项目。(本文使用的是云数据库,已经创建ssmdb用户,作为学习Mybatis的数据库账户,读者可以直接按照此博客创建项目)
提示:以下是本篇文章正文内容
一、MyBatis 是什么
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、使用步骤
项目文件树如下所示:
1.安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
2.配置mybatisConfig.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://IP地址:3306/数据库名?serverTimezone=Asia/Shanghai"/>
<property name="username" value="用户名"/>
<property name="password" value="用户密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/AdminMapper.xml"/>
</mappers>
</configuration>
3.创建JavaBean对象
package cn.crazymen.mybatis_project.model;
public class Admin {
private int id;
private String account;
private String password;
private String gender;
public Admin() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Admin{" +
"id=" + id +
", account='" + account + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
4.创建数据库映射文件AdminMapper.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="cn.crazymen">
<select id="findAdminById" parameterType="int" resultType="cn.crazymen.mybatis_project.model.Admin">
select * from admin where id = #{id}
</select>
</mapper>
5.创建测试方法
package cn.crazymen.mybatis_project.test;
import cn.crazymen.mybatis_project.model.Admin;
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 TestOne {
public static void main(String[] args) throws IOException {
String resource = "mybatisConfig.xml";
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession 使用此对象与数据库进行会话 相当于Connection
SqlSession sqlSession = sqlSessionFactory.openSession();
Admin admin = sqlSession.selectOne("cn.crazymen.findAdminById", 1);
System.out.println(admin);
sqlSession.close();
}
}
TestOne运行结果如下:
6.Mybatis推荐的构建步骤
Mybatis推荐的构建步骤主要是在对象关系映射这里与先前介绍的不同。
我们现在使用接口的方式去构建。
创建数据访问层的接口AdminDao:
package cn.crazymen.mybatis_project.dao;
import cn.crazymen.mybatis_project.model.Admin;
public interface AdminDao {
Admin findAdminById(int id);
}
AdminMapper.xml修改的地方主要是在命名空间这里,将命名空间更改为我们刚才创建的数据访问层AdminDao接口地址。
具体修改AdminMapper.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="cn.crazymen.mybatis_project.dao.AdminDao">
<select id="findAdminById" parameterType="int" resultType="cn.crazymen.mybatis_project.model.Admin">
select * from admin where id = #{id}
</select>
</mapper>
TestOne也需要修改,具体修改如下:
package cn.crazymen.mybatis_project.test;
import cn.crazymen.mybatis_project.dao.AdminDao;
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 TestOne {
public static void main(String[] args) throws IOException {
String resource = "mybatisConfig.xml";
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession 使用此对象与数据库进行会话 相当于Connection
SqlSession sqlSession = sqlSessionFactory.openSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
System.out.println(adminDao.findAdminById(1));
sqlSession.close();
}
}
总结
本文记录通过Mybatis访问MySQL数据库的两种方法。两者相比较,我更倾向于使用后一种(通过接口去创建对象关系映射)使用接口,让代码显得更加简洁,在接口里面只需要定义方法名称,返回值类型,形参列表。当我们有了新的需求的时候,我们通过接口去再次定义新的方法,对于项目的更迭很友好。