后端开发基础-MyBatis框架学习-001——基础概念

MyBatis简介(ORM框架)

iBatis—>MyBatis
-作用:对数据库进行操作
JDBC—>JdbcTemplate—>MyBatis
MyBatis是对JDBC技术的封装.
-封装了获取连接,生成Statement,执行SQL过程
-封装了SQL参数设置过程
(将参数设置到#{xx})
-封装了将结果集映射成实体对象过程
(resultType指定,名称对应)
MyBatis使用需要的准备工作:
-导入mybatis包+数据库驱动包
-添加一个SqlMapConfig.xml主配置文件
-根据表写实体类/编写SQL/
利用MyBatis调用SQL

MyBatis基本使用

User—>UserMapper.xml
Emp—>EmpMapper.xml

save
update
delete
findById
findAll

select * from user_czh
where name like ?

Mapper映射器(接口)

MyBatis提供了一个Mapper映射器接口规则,
按规则写出的接口,MyBatis框架可以自动生成
实现组件对象。

UserDAO接口—》JdbcUserDAO实现类
—》生成对象使用
Mapper映射器接口—》生成对象使用

映射器接口接口规则:
-方法名参考SQL定义的id属性(保持一致)
-方法参数类型参考SQL定义的
parameterType属性(保持一致)
-方法返回类型
增删改:可以是void 或 int
查询:单行结果类型为resultType
多行结果类型为List
-将SQL定义文件元素的
namespace属性指定为”包名.接口名”

映射器接口的使用:
sqlSession.getMapper(接口.class);

UserDAO dao = new $Proxy4();
public class $Proxy4 implements UserDAO{
public List findAll(){
return session.selectList(“findAll”);
}

public User findById(int id){
return session.selectOne(
“findById”,id);
}
}

=====任务=====
利用MyBatis对资费表进行以下操作
-查询所有资费记录
-按ID查询资费记录
-添加资费记录
-删除资费记录
-更新资费记录
-编写CostDAO映射器接口实现上述操作

案例演示:

案例思路:

后端开发基础-MyBatis框架学习-001——基础概念_第1张图片

后端开发基础-MyBatis框架学习-001——基础概念_第2张图片

工程案例目录结构

后端开发基础-MyBatis框架学习-001——基础概念_第3张图片

 pom.xml


  4.0.0
  com.study
  mybatis-day07
  0.0.1-SNAPSHOT
  war
  
   
  	

    org.mybatis
    mybatis
    3.3.0


  	
  		com.oracle
  		ojdbc14
  		10.2.0.4.0
  	
  	
  		junit
  		junit
  		4.12
  	
  

SqlMapConfig.xml

  


	
		
			
			
					
					
					
					
			
		
	
	
	
	
		
	

UserMapper.xml

  


	
	
	
	
	
	
	
	
		DELETE FROM user_dk
		WHERE ID = #{id}
	
	
	
	
	
		UPDATE user_dk 
		SET NAME=#{name},AGE=#{age}
		WHERE ID=#{id}
	
	
	
	
		INSERT INTO user_dk  (ID,NAME,AGE) 
		VALUES (#{id},#{name},#{age})
	
	
	
	
	
	
	
	

User.java

package com.dk.entity;

import java.io.Serializable;

public class User implements Serializable{
	private Integer id;
	private String name;
	private Integer age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

}

MyBatisUtil.java

package com.dk.entity;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	
	public static SqlSession getSession() throws IOException{
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		String conf = "SqlMapConfig.xml";
		Reader reader = Resources.getResourceAsReader(conf);
		
		SqlSessionFactory factory = builder.build(reader);
		SqlSession session = factory.openSession();
		
		return session;
	}

	public static void main(String[] args) throws IOException {
		SqlSession session = MyBatisUtil.getSession();
		System.out.println(session);
	}
}

TestUser.java

package com.test;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.dk.dao.UserDAO;
import com.dk.entity.MyBatisUtil;
import com.dk.entity.User;

public class TestUser {
	
	@Test//测试Mapper映射器接口
	public void test8() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		//根据接口生成实现对象
		UserDAO dao = session.getMapper(UserDAO.class);
		System.out.println(dao.getClass().getName());
		
		//调用 id = findAll的SQL语句
		List list = dao.findAll();
		for(User user:list){
			System.out.println(user.getId()+" "+user.getName());
		}
		session.close();
	}
	
	@Test//测试查询返回Map
	public void test7() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		Map map = session.selectOne("findName", 1);
		if(map != null){//利用字段名做key提取值
			System.out.println(map.get("ID")+" "+map.get("NAME"));
		}else{
			System.out.println("未找到数据");
		}
		
		session.close();
		
	}
	
	@Test//测试模糊查询
	public void test6() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		List list = session.selectList("findLikeName", "%D%");
		for(User user:list){
			System.out.println(user.getName());
		}
		session.close();
	}
	
	@Test//测试删除
	public void test5() throws IOException{
		SqlSession session  = MyBatisUtil.getSession();
		//执行删除
		int rows = session.delete("deleteUser", 10);
		System.out.println("删除的记录行数:"+rows);
		session.commit();
		session.close();
	}
	
	@Test//测试更新
	public void test4() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		User user  = new User();
		user.setId(10);
		user.setName("MYBATIS");
		user.setAge(21);
		//执行更新
		int rows = session.update("updateUser", user);
		System.out.println("更新的记录行数:"+rows);
		//提交事物
		session.commit();
		session.close();
	}
	
	@Test//测试添加
	public void test3() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		User user = new User();
		user.setId(10);//也可由序列生成  ==
		user.setName("mybatis");
		user.setAge(20);
		//执行insert
		session.insert("saveUser", user);
		//提交事物(增删改需要提交事物)
		session.commit();
		session.close();
	}
	
	@Test//测试多行查询
	public void test2() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		//执行多行查询
		List  list = session.selectList("findAll");
		for(User user:list){
			System.out.println(user.getId()+" "
								+user.getName()+" "
								+user.getAge());
		}
		session.close();
	}
	
	@Test//测试单行查询
	public void test1() throws IOException{
		SqlSession session = MyBatisUtil.getSession();
		System.out.println(session);
		//使用SqlSession执行SQL操作
		//selectOne("SQL定义的id属性",paramterType参数值)
		User user = session.selectOne("findById",1);
		if(user != null){
			System.out.println(user.getName());
			System.out.println(user.getAge());
		}else{
			System.out.println("没有该记录");
		}
		session.close();
	}

	@Test//测试获取SqlSession
	public void test() throws IOException{
		//SqlSessionFactoryBuilder
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		//加载SqlMapConfig.xml主配置文件,
		//转化为Reader流参数
		String conf = "SqlMapConfig.xml";
		Reader reader = Resources.getResourceAsReader(conf);
		
		//SqlSessionFactory
		//加载配置信息获取SqlSession工厂
		SqlSessionFactory factory = builder.build(reader);
		//SqlSession,由工厂创建SqlSession对象
		SqlSession session = factory.openSession();
		System.out.println(session);
		
		//使用SqlSession执行SQL操作
		//selectOne("SQL定义的id属性",parameterType参数值)
		User user = session.selectOne("findById", 2);
		if(user != null){
			System.out.println(user.getName());
			System.out.println(user.getAge());
		}else{
			System.out.println("没有该记录");
		}
		session.close();
	}

}

UserDAO.java

package com.dk.dao;

import java.util.List;
import java.util.Map;

import com.dk.entity.User;
/**
 * Mapper映射器接口:对应UserMapper.xml里的SQL语句
 * 方法名-->id属性
 * 参数-->parameterType属性
 * 返回类型-->增删改void或int;查询参考resultType属性
 * @author Cher_du
 *
 */
public interface UserDAO {
	
	public User findById(int id);
	public List findAll();
	public int saveUser(User user);
	public int updateUser(User user);
	public int deleteUser(int id);
	public List findLikeName(String name);
	public Map findName(int id);
}

编写每一个方法对应依次运行test进行测试:

后端开发基础-MyBatis框架学习-001——基础概念_第4张图片

你可能感兴趣的:(Java框架,MyBatis)