系列文章目录
实习笔记 —— 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.测试结果