Mybatis学习(二) ----入门案例

目录

MyBatis入门案例

一、需求

二、工程搭建

1.导入依赖jar

​         2.配置核心配置文件

 3.配置log4j.properties

4.编写pojo

5. 配置sql映射文件

6. 在mybatis核心配置文件中加载映射文件

7.抽取公共代码,编写公共类

8.测试类


MyBatis入门案例

MyBatis的前身是apache的一个开源项目iBatis,2010年迁移到google code,改名为Mybatis,2013年又从google code 迁移到github。

MyBatis是一个ORM框架,是国内常用的两个ORM框架之一。

下面通过一个案例,学习Mybatis的执行流程。

一、需求

  1. 根据ID查询客户信息

  2. 根据客户名模糊查找客户列表

  3. 添加客户

  4. 修改客户

  5. 删除客户

二、工程搭建

需求完成后的项目结构和数据表结构如下图所示。

Mybatis学习(二) ----入门案例_第1张图片                                  Mybatis学习(二) ----入门案例_第2张图片

1.导入依赖jar

Mybatis学习(二) ----入门案例_第3张图片

2.配置核心配置文件

该文件名字符合规范就行,我这里取名为:mybatis-config.xml ,放在资源文件夹config下,也是类路径下




	
  
  	
    
      
      
        
        
        
        
      
    
  

	


 3.配置log4j.properties

希望在控制台打印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

4.编写pojo

入门案例以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 + "]";
	}
}

5. 配置sql映射文件

该文件里的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} ;
	

6. ​​​​​​​mybatis核心配置文件中加载映射文件

 


	

7.抽取公共代码,编写公共类

因为在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;
	}
	
	
}

 

8.测试类

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入门的案例,细节配置,后续文中再详细说明。

你可能感兴趣的:(mybatis)