MyBatis初学(1),介绍及快速入门
个人推荐学习MyBatis的时候看MyBatis的官网,官网有中文支持,初学使用完全足够了
下面的流程官网上均有说明
MyBatis官网https://mybatis.org/mybatis-3/zh/index.html
简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
优点
1、与JDBC相比,减少了50%的代码量
2、 最简单的持久化框架,简单易学
3、SQL代码从程序代码中彻底分离出来,可以重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持对象与数据库的ORM字段关系映射
缺点
1、SQL语句编写工作量大,熟练度要高
2、数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很大的差异
快速入门
1.使用IDEA创建一个Maven项目,Maven项目默认使用的是JDK5语法检测,可以修改为使用JDK8
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
2.添加Maven依赖pom.xml
<!-- mybaits依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 打印日志依赖,用来控制台输出SQL语句 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 单元测试依赖,用来单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
3.配置db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.74.111:3306/demo?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
4.控制台打印SQL语句,配置log4j.properties
#全局日志配置
log4j.rootLogger=ERROR, stdout
#MyBatis日志配置
log4j.logger.包名=TRACE
#控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.XML配置文件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>
<!--引入外部资源-->
<properties resource="db.properties"></properties>
<!--别名设置-->
<typeAliases>
<package name="实体类包的完全限定名"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="映射文件所在包的完全限定名"/>
</mappers>
</configuration>
6.创建数据库表对应的实体类和接口,使用的是学习的emp表
package com.yangqihang.bean;
import java.util.Date;
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double comm;
//省略Getter和Setter方法
//省略toString方法
}
接口类
package com.yangqihang.mapper;
import com.yangqihang.bean.Emp;
public interface EmpMapper {
Emp selectByEmpno(Integer empno);
}
6.XML映射文件配置EmpMapper.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.yangqihang.mapper.EmpMapper">
<select id="selectByEmpno" resultType="com.yangqihang.bean.Emp">
select * from emp where empno = #{empno}
</select>
</mapper>
7.编写测试类
package com.yangqihang.mapper;
import com.yangqihang.bean.Emp;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
public class EmpMapperTest {
SqlSession sqlSession = null;
EmpMapper mapper = null;
@Before
public void setUp() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
mapper = sqlSession.getMapper(EmpMapper.class);
}
@After
public void tearDown() throws Exception {
sqlSession.commit();
sqlSession.close();
}
@Test
public void selectByEmpno() {
Emp emp = mapper.selectByEmpno(7369);
System.out.println(emp);
}
}
项目结构