目录
MyBatis入门案例
一、需求
二、工程搭建
1.导入依赖jar
2.配置核心配置文件
3.配置log4j.properties
4.编写pojo
5. 配置sql映射文件
6. 在mybatis核心配置文件中加载映射文件
7.抽取公共代码,编写公共类
8.测试类
MyBatis的前身是apache的一个开源项目iBatis,2010年迁移到google code,改名为Mybatis,2013年又从google code 迁移到github。
MyBatis是一个ORM框架,是国内常用的两个ORM框架之一。
下面通过一个案例,学习Mybatis的执行流程。
根据ID查询客户信息
根据客户名模糊查找客户列表
添加客户
修改客户
删除客户
需求完成后的项目结构和数据表结构如下图所示。
该文件名字符合规范就行,我这里取名为:mybatis-config.xml ,放在资源文件夹config下,也是类路径下
希望在控制台打印sql语句等,需要配置该文件
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.cn.zdxh=DEBUG
# 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
入门案例以Customer为例
package cn.zdxh.mybatis.po;
/**
*客户持久化类
*/
public class Customer {
private Integer id; // 主键
private String username; // 客户名称
private String jobs; // 职业
private String phone; // 电话
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 String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Customer [id=" + id + ", username=" + username +
", jobs=" + jobs + ", phone=" + phone + "]";
}
}
该文件里的sql语句是使用sqlyog粘贴来的。该文件是mybatis框架中特别重要的文件,可以说,mybatis的强大之处就体现再映射文件的编写上。
INSERT INTO `t_customer` (`id`, `username`, `jobs`, `phone`)
VALUES
(NULL, #{username}, #{jobs}, #{phone}) ;
UPDATE
`mybatis`.`t_customer`
SET
`username` = #{username},
`jobs` = #{jobs},
`phone` = #{phone}
WHERE `id` = #{id}
DELETE
FROM
`t_customer`
WHERE `id` = #{id} ;
因为在8.测试中,所有测试方法中都出现相同代码,而且,根据官网文档,SqlSessionFactory建议使用单例,我们抽取了一个工具类SqlSessionFactoryUtils.java,内容如下:
package cn.zdxh.mybatis.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//1. 创建SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//2. 创建核心配置文件输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//3. 通过输入流创建 SqlSessionFactory 对象
sqlSessionFactory = ssfb.build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
package cn.zdxh.mybatis.test;
import static org.junit.jupiter.api.Assertions.*;
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.jupiter.api.Test;
import cn.zdxh.mybatis.po.Customer;
import cn.zdxh.mybatis.utils.SqlSessionFactoryUtils;
class MybatisTest {
@Test
void testGetCustomerById() throws IOException {
//1. 创建SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//2. 创建核心配置文件输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//3. 通过输入流创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = ssfb.build(inputStream);
//4. 创建SqlSession对象,包含了jdbc的CRUD所有方法
SqlSession sqlSession = sqlSessionFactory.openSession();
//5. 执行查询 :参数1 :sql id ;参数2 :入参,入参要与xml文件的入参一一对应
Customer customer = sqlSession.selectOne("cn.zdxh.mybatis.po.Customer.getCustomerById", 18);
//6. 处理
System.out.println(customer);
//7. 释放资源
sqlSession.close();
}
@Test
void testGetCustomerByName() throws IOException {
//1. 创建SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//2. 创建核心配置文件输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//3. 通过输入流创建 对象
SqlSessionFactory sqlSessionFactory = ssfb.build(inputStream);
//4. 创建SqlSession对象,包含了jdbc的CRUD所有方法
SqlSession sqlSession = sqlSessionFactory.openSession();
//5. 执行查询 :参数1 :sql id ;参数2 :入参,入参要与xml文件的入参一一对应
// List list = sqlSession.selectList("cn.zdxh.mybatis.po.Customer.getCustomerByName", "%刘%");
List list = sqlSession.selectList("cn.zdxh.mybatis.po.Customer.getCustomerByName", "刘");
//6. 处理
for (Customer customer : list) {
System.out.println(customer);
}
//7. 释放资源
sqlSession.close();
}
@Test
void testAddCustomer() throws IOException {
//调用工具类的静态方法得到sqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//4. 创建SqlSession对象,包含了jdbc的CRUD所有方法
SqlSession sqlSession = sqlSessionFactory.openSession();
System.out.println(111);
//5. 执行插入 :参数1 :sql id ;参数2 :入参,入参要与xml文件的入参一一对应
Customer customer = new Customer();
customer.setUsername("刘胡兰5");
customer.setJobs("网红4");
customer.setPhone("13888888888");
int row=sqlSession.insert("cn.zdxh.mybatis.po.Customer.addCustomer", customer);
System.out.println(row);
// 提交事务
sqlSession.commit();
//7. 释放资源
sqlSession.close();
}
@Test
void testUpdateCustomer() throws IOException {
//调用工具类的静态方法得到sqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//4. 创建SqlSession对象,包含了jdbc的CRUD所有方法
SqlSession sqlSession = sqlSessionFactory.openSession();
//5. 执行插入 :参数1 :sql id ;参数2 :入参,入参要与xml文件的入参一一对应
Customer customer = new Customer();
customer.setId(20);
customer.setUsername("刘老师1");
customer.setJobs("大学老师");
customer.setPhone("13888888888");
int row=sqlSession.update("cn.zdxh.mybatis.po.Customer.updateCustomer", customer);
System.out.println(row);
// 提交事务
sqlSession.commit();
//7. 释放资源
sqlSession.close();
}
@Test
void testDeleteCustomerById() throws IOException {
//调用工具类的静态方法得到sqlSessionFactory
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
//4. 创建SqlSession对象,包含了jdbc的CRUD所有方法
SqlSession sqlSession = sqlSessionFactory.openSession();
//5. 执行插入 :参数1 :sql id ;参数2 :入参,入参要与xml文件的入参一一对应
int row=sqlSession.delete("cn.zdxh.mybatis.po.Customer.deleteCustomerById", 20);
System.out.println(row);
// 提交事务
sqlSession.commit();
//7. 释放资源
sqlSession.close();
}
}
测试结果,特别是删除和修改,大家自行运行。
总结:本文只是一个使用mybatis入门的案例,细节配置,后续文中再详细说明。