✨什么是MyBatis?
百度介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
特点
简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的orm字段关系映射。
提供对象关系映射标签,支持对象关系组建维护。
提供xml标签,支持编写动态sql。
创建测试数据库
#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;
#创建表
create table t_user
(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
insert into t_user(username,password,phone,address) values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) values('小美','123','18565234759','信阳');
select * from t_user;
创建一个Java项目并导入mybatis框架的jar包
创建跟表对应的实体类。
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
创建针对表操作的全查 添加 删除接口类
在接口的包中创建对应的mapper映射配置文件
6.在src目录中创建mybatis框架的核心配置文件
在src目录中创建mybatis xml文件
在测试类中进行测试
public class UserTest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
UserDao userDao=null;
@Before
public void init() throws IOException{
//1.加载核心配置文件的字节输入流
stream=Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder = new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory= builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession=factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao=sqlSession.getMapper(UserDao.class);
}
@Test
//全查
public void testSelectAll() throws IOException {
//6.通过代理对象执行查询方法
List userList=userDao.selectAll();
//7.遍历集合
for (User user : userList){
System.out.println(user);
}
}
//添加
@Test
public void testadd()throws IOException{
init();
User user=new User();
user.setUsername("yd");
user.setPassword("123");
user.setPhone("135");
user.setAddress("GG");
int n = userDao.add(user);
if (n>0){
System.out.printf("CG");
}
distroy();
}
//删除
@Test
public void testDelete(){
int n=userDao.delete(3);
if (n>0){
System.out.printf("delete CG");
}
}
@After
public void distroy() throws IOException{
sqlSession.commit();
sqlSession.close();
stream.close();
}
}
创建新的数据库
create table emp(
eid int primary key auto_increment,
ename varchar(8),
dept varchar(20),
job varchar(20),
sal int,
phone varchar(11),
address varchar(20)
)
insert into emp(ename,dept,job,sal,phone,address) values('张翠萍','测试部','测试工程师',5800, '15821563548','郑州');
insert into emp(ename,dept,job,sal,phone,address) values('李耀菲','测试部','测试经理',9800, '13658942168','许昌');
insert into emp(ename,dept,job,sal,phone,address) values('王长林','研发部','开发工程师',8800, '13954865721','南阳');
insert into emp(ename,dept,job,sal,phone,address) values('陈清泰','研发部','开发经理',14900, '13785463249','洛阳');
insert into emp(ename,dept,job,sal,phone,address) values('赵德保','运维部','运维工程师',5200, '15785642139','信阳');
insert into emp(ename,dept,job,sal,phone,address) values('刘瑞琳','运维部','产品经理',12600, '17956248563','商丘');
select * from emp;
创建实体类
package com.f.bean;
public class User {
private Integer eid;
private String ename;
private String dept;
private String job;
private Integer sal;
private String phone;
private String address;
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"eid=" + eid +
", ename='" + ename + '\'' +
", dept='" + dept + '\'' +
", job='" + job + '\'' +
", sal=" + sal +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
创建接口
package com.f.dao;
import com.f.bean.User;
import java.util.List;
public interface UserDao {
List selectAl();
int baa(User user);
int delete(int uid);
int update(User user);
User selectByUid(int uid);
}
测试类进行测试
package com.f.test;
import com.f.bean.User;
import com.f.dao.UserDao;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserTest {
InputStream stream = null;
SqlSessionFactoryBuilder builder = null;
SqlSessionFactory factory = null;
SqlSession sqlSession = null;
UserDao userDao = null;
@Before
public void init() throws IOException {
stream=Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder = new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory= builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession=factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao=sqlSession.getMapper(UserDao.class);
}
全查
@Test
public void selectAlll()throws IOException {
List userList = userDao.selectAl();
for (User user : userList) {
System.out.println(user);
}
}
@Test
添加
public void testabb() {
User user = new User();
user.setEname("蓝胖子");
user.setDept("维修部");
user.setJob("维修组长");
user.setSal(6545);
user.setPhone("14785245694");
user.setAddress("圣诞岛");
int v = userDao.baa(user);
if (v > 0) {
System.out.println("添加成功");
}
}
@Test
修改
public void testUpdate() {
User user = userDao.selectByUid(2);
System.out.println("修改前" + user);
user.setEname("老六");
user.setDept("人事部");
user.setJob("人事组长");
user.setSal(8000);
user.setPhone("15268576957");
user.setAddress("任意门");
userDao.update(user);
User sd = userDao.selectByUid(1);
System.out.println("11" + user);
}
@Test
public void selectByEid() {
User user = userDao.selectByUid(5);
System.out.println(user);
}
@Test
删除
public void del() {
int del = userDao.delete(2);
if (del > 0) {
System.out.println("删除成功");
}
}
@After
public void distro() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
}