1.数据库数据表准备工作:
-- 1、创建数据库 yonghedb 数据库
create database if not exists yonghedb charset utf8;
use yonghedb; -- 选择yonghedb数据库
-- 2、删除emp表(如果存在)
drop table if exists emp;
-- 3、在 yonghedb 库中创建 emp 表
create table emp(
id int primary key auto_increment,
name varchar(50),
job varchar(50),
salary double
);
-- 4、往 emp 表中, 插入若干条记录
insert into emp values(null, '王海涛', '程序员', 3300);
insert into emp values(null, '齐雷', '程序员', 2800);
insert into emp values(null, '刘沛霞', '程序员鼓励师', 2700);
insert into emp values(null, '陈子枢', '部门总监', 4200);
insert into emp values(null, '刘昱江', '程序员', 3000);
insert into emp values(null, '董长春', '程序员', 3500);
insert into emp values(null, '苍老师', '程序员', 3700);
insert into emp values(null, '韩少云', 'CEO', 5000);
二、创建项目并给项目导入jar:
<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</groupId>
<artifactId>mybatisday01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<!-- 整合log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
</project>
jar包导入效果:
log4j.properties文件的内容:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
log4j.logger.java.sql.ResultSet=INFO #本行一下内容是为了在控制台打印SQL
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
注意:此日志文件的位置放到src/main/resource路径下
三、编写实体类用于封装查询结果的数据:
提示: Emp类的有参构造无参构造、 hashCode&equals方法、 toString等方法自己自动生成
四、编写一个包含查询方法的接口EmpMapper:
(mybatis运行时会根据xml文件自动为此接口生成实现类,最终真正调用的是实现类)
package com.zyq.mapper;
import java.util.List;
import com.zyq.pojo.Emp;
public interface EmpMapper {
public List<Emp> findAll();
}
五、编写EmpMapper.xml,并在里边定义SQL语句:
注意:此xml的namespace需要写接口的完全限定名(包名.类名), 是为了根据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">
<!-- namespace值表示当前这个mapper文件 框架底层会根据namespace值来定位当前这个mapper文件 -->
<mapper namespace="com.zyq.mapper.EmpMapper">
<!-- 在mapper根据标签内部可以添加很多SQL标签 select:存放查询类型的SQL语句 insert、delete、update:存放增/删/改类型的SQL语句 -->
<!-- 练习1: 查询emp表中的所有员工信息 resultType属性: 用于指定使用什么类型来封装SQL语句查询的结果 如果查询员工信息,可以指定用Emp对象来进行封装,因此resultType需要指向
Emp类的全限定类名 -->
<select id="findAll" resultType="com.zyq.pojo.Emp">
select * from emp
</select>
</mapper>
六、配置mybatis的主配置文件(主要配置数据库连接的数据源和mapperxml文件的位置):
6.1.在/src/main/resources路径下新建jdbc.properties配置文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8&useUnicode=true
jdbc.username=root
jdbc.password=123456
6.2.在/src/main/resources路径下配置MyBatis的主配置文件:
<?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">
<!-- MyBatis的全局配置文件 -->
<configuration>
<properties resource="jdbc.properties"></properties>
<!-- 一、配置环境,environments下可配置多个环境(比如:develop开发、test测试) -->
<environments default="develop">
<environment id="develop">
<!-- 配置事务管理方式:JDBC/MANAGED. JDBC:将事务交给JDBC管理(推荐)MANAGED:自己管理事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,即连接池 JNDI/POOLED/UNPOOLED JNDI:已过时 POOLED:使用连接池(推荐) UNPOOLED:不使用连接池 -->
<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>
<!-- 二、引入Mapper配置文件,可以配置多个。 resource指向类路径, EmpMapper。xml编译后会自动拷贝到类路径下(项目行啊的target下的classes下)-->
<mappers>
<mapper resource="EmpMapper.xml"/>
</mappers>
</configuration>
七、编写测试类:
package com.zyq.testMyBatis;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 com.zyq.mapper.EmpMapper;
import com.zyq.pojo.Emp;
public class Test {
SqlSession sqlsession=null;
@Before
public void beforeSQL() throws IOException {
InputStream in=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
sqlsession=factory.openSession(true);
}
@org.junit.Test
public void testFindAll(){
//方式一、没有EmpMapper接口时这样测试
//List<Emp> emps=sqlsession.selectList("com.tedu.mapper.EmpMapper.findAll");
//方式二、有EmpMapper接口时这样测试
EmpMapper mapper=sqlsession.getMapper(EmpMapper.class);
List<Emp> emps=mapper.findAll();
for (Emp e : emps) {
System.out.println(e);
}
}
@After
public void afterSQL(){
sqlsession.close();
}
}
八、运行结果: