目录
一、mybatis的入门
1.mybatis的环境搭建
- 创建 maven工程并导入坐标
- 创建实体类和dao的接口
- 创建MyBatis的只配置文件
- SqlMapConfig.xml
- 创建映射配置文件
- IUserDao.xml
Ⅰ maven的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.MyBatis</groupId>
<artifactId>MyBatisStudy</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>LATEST</version>
</dependency>
</dependencies>
</project>
Ⅱ 创建实体类和dao的接口
package com.MyBatis01.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @program: MyBatisStudy
* @description: 实体类
* @author: 醉人
* @create: 2019-07-20 22:04
**/
public class User implements Serializable
{
private Integer id;
private String username;
private Date birthday;
private Character sex;
private String address;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public Date getBirthday()
{
return birthday;
}
public void setBirthday(Date birthday)
{
this.birthday = birthday;
}
public Character getSex()
{
return sex;
}
public void setSex(Character sex)
{
this.sex = sex;
}
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
@Override
public String toString()
{
return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex=" + sex + ", address='" + address + '\'' + '}';
}
}
package com.MyBatis01.dao;
import com.MyBatis01.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao
{
/**
* 查询所有操作
* @return
*/
List<User> findAll();
}
Ⅲ 创建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>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源,也叫连接池-->
<!--连接池的选项有三个-->
<dataSource type="POOLED">
<!--配置连接书库的四个基本信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate_day1?useSSL=false&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="1045683477"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是dao独立的配置文件-->
<mappers>
<mapper resource="com/dao/IUserDao.xml" />
</mappers>
</configuration>
Ⅳ 创建映射配置文件
<?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.MyBatis01.dao.IUserDao">
<!--配置查询所有 id不可随便写,要写dao的方法名称,resultType返回的类型-->
<select id="findAll" resultType="com.MyBatis01.domain.User">
select *from user;
</select>
</mapper>
2.环境搭建的注意事项
- 在 idea 中创建目录的时候,他和包是不一样的
- 包在创建时:com.zuiren.dao 他是三级结构
- 目录在创建时:com.zuiren.dao 他是一级结构
- mybatis的映射文件位置必须和dao接口的包结构相同
- 映射配置文件的mapper标签namspace属性的取值必须是dao接口的全限定类名
- 映射配置文件的操作配置,id属性的取值不许是dao接口的方法名
当我们遵从了第三四五点之后,我们在开发中就无需再写dao的实现类
二、测试
1.配置log4j文件
### 配置根 ###
log4j.rootLogger = debug,console
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
### 配置输出到文件 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File = logs/log.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
2.创建测试类
Ⅰ 步骤
- 读取配置文件
- 创建SqlSessionFactory工厂
- 使用工厂生产SqlSession对象
- 使用SqlSession创建Dao接口代理对象
- 使用代理对象执行方法
- 释放资源
Ⅱ 代码
package com.MyBatis01.test;
import com.MyBatis01.dao.IUserDao;
import com.MyBatis01.domain.User;
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;
import java.util.List;
/**
* @program: MyBatisStudy
* @description: 入门案例
* @author: 醉人
* @create: 2019-07-21 10:50
**/
public class MyBatisTest
{
public static void main(String[] args)
{
try
{
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
//3.使用工厂生产 SqlSession 对象
SqlSession session=factory.openSession();
//4.使用 SqlSession 创建 Dao 接口代理对象
IUserDao userDao=session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users=userDao.findAll();
for (User user:users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
3.注意细节
- 两种常用读取方式
- 使用类加载器,它只能读取类路劲的配置文件
- 使用ServletContext对象的getRealPath()
创建 SqlSessionFactory 工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in);
- 创建工厂 mybatis 使用了构建这模式
- builder 就是构建者
- 构建者模式:把对象创建细节隐藏,是使用者直接调用方法即可拿到对象
使用工厂生产 SqlSession 对象
- 使用工厂模式
- 优势:解耦(降低类之间的依赖关系)
使用 SqlSession 创建 Dao 接口代理对象
session.getMapper(IUserDao.class);
创建Dao接口实现类代理模式
优势:不修改源码的基础上对已有的方法增强
4.注意事项
- 不要忘记在映射配置中告知mybatis要封装到那个实体类中
- 配置的方式:指定实体类的全限定类名