0
点赞
收藏
分享

微信扫一扫

实习笔记 —— MyBatis II (MyBatis数据库操作)

迪莉娅1979 2022-04-30 阅读 60

系列文章目录

实习笔记 —— Spring基础
实习笔记 —— IOC反转控制(xml配置文件 + 注解)
实习笔记 —— AOP开发I
实习笔记—— AOP开发II(AOP中Advice的类型)
实习笔记 —— MyBatis I (MyBatis基础)


文章目录


一、MyBatis结构图:

在这里插入图片描述
mybatis大体上包括四部分:输入映射、输出映射、mybatis处理数据的部分(中间部分)、数据库。

在淘宝输入搜索关键字“华为nova”,经过mybatis处理到数据库中查询相关的商品信息,输出传递给spring,spring再传给前端。

点击商品,查看详情也是一次数据查询(输入的是nova的实体类)

1.中部内容依次为:
①配置文件,分为一个主配置文件 + 映射配置文件(一般用一个)
map:映射,抽象理解为水中倒影。
②mybatis工厂类
③某工厂类的实例
④执行
⑤根据用户输入的需求查库的具体过程

二、MyBatis项目

在这里插入图片描述

1.创建主配置文件(在src目录下):

在这里插入图片描述
头文件:

<?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">

jdbc事务管理——写库失败,可以进行回溯操作:
微信红包,只要点击收取,正常情况下家长的-100,我的+100;但若是瞬间网断了,家长的-100,但我的没+100,此时若有事务管理,系统在发现出现故障时自己就回到还没点击收取的状态。

2.创建实体类:

要操作数据库中的某个表,需要把对应的表创建一个实体类:
右键表 → 设计表 查看表中属性的类型
在这里插入图片描述

package com.high.demo2;

import java.util.Date;

//entity 实体类
public class User {
	private Integer id;
	private String username;
	private Date birthday;
	private String gender;
	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 String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	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 + ", gender=" + gender
				+ ", address=" + address + "]";
	}	
}

3.创建新包存放 mapper

com.high.demo2.mapper
(本来想在实体类所在包的下一级创建,不过都可以)
包中包括:接口UserMapper,存储对数据库进行操作的方法 + 名字同为UserMapper的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">

4.创建测试类

Resources导包注意用ibatis的包

package com.high.demo2;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.Test;

import com.high.demo2.mapper.UserMapper;

public class MybatisDemo {
	@Test
	public void demo() throws IOException {
		//1.获取SqlSessionFactory对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		//加载主配置文件sqlMapConfig.xml
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
		
		//2.获取sqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		
		//3.使用sqlSession的方法,调用user.xml中的 id="findUserById" 
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		User user1 = mapper.findByUserId(27);
		User user2 = mapper.findByUserId(10);
					
		System.out.println(user1);
		System.out.println(user2);				
	}
	
	
	@Test
	public void demo2() throws IOException {
		// 1.获取SQLSessionFactory(工厂类)对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		// 加载主配置文件sqlMapConfig.xml
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
				
		// 2.获取sqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		// 以上都是模板		
		
		// 3.使用sqlSession的方法,调用映射配置文件的findByUserId方法
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		List<User> user = mapper.findByUserName("小");
		
		System.out.println(user);
	}
	
	@Test
	public void demo3() throws Exception {
		//1.获取SqlSessionFactory对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		//加载主配置文件sqlMapConfig.xml
		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = builder.build(inputStream);
		
		//2.获取sqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		
		//3.使用sqlSession的方法,调用user.xml中的 id="findUserById" 
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		//4.创建对象=>参数
		User user = new User();
		user.setUsername("KKK大清误我三百年");
		user.setBirthday(new Date());
		user.setGender("1");
		user.setAddress("哈尔滨");
		
		mapper.addUser(user);
		
		//提交,事务管理: 一但失败,会执行回滚操作
		openSession.commit(); //只要是写操作,需加这条语句.
						
	}
}

5.测试结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论