前言
本人使用idea版本为2020.1,大家可以看看是否版本一致,如果不一致可能会导致,操作步骤不一样,建议查看其他博主的文章。
1.项目的搭建
1.1 第一步,点击file,new一个新项目。
1.2 第二步,选择maven,我这里创建的是一个简单的Java项目。
目录结构:
1.3 第三步,配置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.jdfs</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<mysql.version>5.1.47</mysql.version>
<junit.version>4.12</junit.version>
</properties>
<dependencies>
<!--使用mybatis框架也是需要数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis
mybatis依赖设置
-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!--添加一个log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--插件设置-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
1.4 创建一个mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--加载properties文件-->
<properties resource="db.properties"/>
<!--mybatis的全局配置-->
<settings>
<!--针对oracle数据库null处理-->
<setting name="jdbcTypeForNull" value="VARCHAR"/>
</settings>
<!--配置类的别名-->
<typeAliases>
<package name="com.fs.entity"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库四大参数-->
<property name="driver" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--加载sql映射文件-->
<mappers>
<!-- resource: 指定sql映射文件-->
<mapper resource="UserDao.xml"/>
</configuration>
1.5 数据库连接参数
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/(这里改成你要操作的数据库名)?useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.user=你的数据库用户(学习阶段默认是root,以后工作了不会给你超级管理员)
jdbc.password=你的数据库密码
2. 项目创建的文件
2.1 创建一个UserDao接口
package com.fs.dao;
import com.fs.entity.User;
public interface UserDao {
/**
* 根据主键查询
* @param id
* @return
*/
User selectById(Integer id);
}
2.2 创建一个UserDao实现类
package com.fs.dao.impl;
import com.fs.dao.UserDao;
import com.fs.entity.User;
import com.fs.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class UserDaoImpl implements UserDao {
private SqlSession sqlSession;
public UserDaoImpl() {
this.sqlSession = MybatisUtil.getSqlSession();
}
@Override
public User selectById(Integer id) {
User user = sqlSession.selectOne("UserDao.selectById",id);
sqlSession.close();
return user;
}
}
2.3 这里使用一个工具类,用来创建一个SqlSession对象
package com.fs.util;
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 MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static{
//1.读取mybatis主配置文件
InputStream in = null;
try {
in = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//2.解析mybatis主配置文件(xml解析), 创建SqlSessionFactory对象
//创建SqlSessionFactory对象, 使用构建者模式 构建者类 SqlSessionFactoryBuilder
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.4 创建实体类User
package com.fs.entity;
public class User {
private Integer id;
private String name;
private String sex;
private Integer age;
private String address;
private String email;
private String qq;
private String photo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public User() {
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public User(String name, String sex, Integer age, String address, String email, String qq) {
this.name = name;
this.sex = sex;
this.age = age;
this.address = address;
this.email = email;
this.qq = qq;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", address='" + address + '\'' +
", email='" + email + '\'' +
", qq='" + qq + '\'' +
'}';
}
}
2.5 创建一个UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserDao">
<select id="selectById" parameterType="int" resultType="com.fs.entity.User">
select * from tb_userinfo where id = #{id}
</select>
</mapper>
3. 编写一个测试类
package com.fs.dao;
import com.fs.dao.impl.UserDaoImpl;
import org.junit.Test;
public class UserDaoTest {
@Test
public void selectById() {
System.out.println(new UserDaoImpl().selectById(18));
}
}
3.1 测试结果
数据库数据:
总结:
MyBatis是一个开源的数据持久层框架,它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射。MyBatis将程序中的大量SQL语句剥离出来,配置在配置文件当中,实现SQL的灵活配置,这样做的好处是将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件当中修改SQL。
MyBatis框架通过简单的XML或者注解的方式进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动的ORM实现。它前身是iBatis,是Apache的一个开源的项目,2010年迁移到GoogleCode,并改名为Mybatis,2013年迁移到Github。
使用MyBatis框架的优势在于:
- 避免了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
- 可以使用简单的XML或注解进行配置和原始映射,将SQL语句和实体类之间建立映射关系,实现SQL的灵活配置。
- 可以将SQL语句和程序代码分离,提高了代码的可读性和可维护性。
MyBatis框架适用于需要频繁修改数据库操作语句的情况,特别是在应用程序操作数据库,对表数据进行增删改查的操作时,MyBatis可以提供更好的灵活性和可维护性。同时,对于需要频繁更换数据库引擎的项目,MyBatis可以通过简单的配置实现不同的数据库访问操作,降低了更换数据库的难度和成本。