001- 框架概述
1.1 软件开发常用结构
1.2 框架是什么
1.3 回顾JDBC编程
1.4 MyBatis框架概述
002- MyBatis框架快速入门
2.1 入门案例
或者手动把主配置文件复制粘贴过去
2.2 MyBatis对象分析
MyBatis底层是JDBC
2.3 创建工具类
首先创建一个新Maven模块:
创建mapper文件模板:
创建主配置文件模板:
IDEA自动格式化快捷键:ctrl+alt+L
下面开始写工具类:
package com.bjpowernode.utils;
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 java.io.IOException;
import java.io.InputStream;
/**
* 工具类:创建SqlSession对象
*/
public class MyBatisUtil {
private static SqlSessionFactory factory = null;
static {
String config = "mybatis.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(config);
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//创建方法 获取SqlSession对象
public static SqlSession getSqlSession(){
SqlSession session = null;
if(factory != null){
//openSession() 手动提交事务
//openSession(true) 自动提交事务
session = factory.openSession(true);
}
return session;
}
}
测试:使用工具类
2.4 MyBatis使用传统Dao开发方式
使用 Dao 的实现类,操作数据库
package com.bjpowernode.dao.Impl;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class StudentDaoImpl implements StudentDao {
@Override
public Student selectById(Integer id) {
//1.获取SqlSession对象
SqlSession session = MyBatisUtil.getSqlSession();
//2.指定sqlId
String sqlId = "com.bjpowernode.dao.StudentDao.selectById";
//3.执行SqlSession的方法,表示执行sql语句
Student student = session.selectOne(sqlId, id);
//4.关闭SqlSession对象
session.close();
return student;
}
@Override
public List<Student> selectStudents() {
//1.获取SqlSession对象
SqlSession session = MyBatisUtil.getSqlSession();
//2.指定sqlId
String sqlId = "com.bjpowernode.dao.StudentDao.selectStudents";
//3.执行SqlSession的方法,表示执行sql语句
List<Student> students = session.selectList(sqlId);
//4.关闭SqlSession对象
session.close();
return students;
}
@Override
public int insertStudent(Student student) {
//1.获取SqlSession对象
SqlSession session = MyBatisUtil.getSqlSession();
//2.指定sqlId
String sqlId = "com.bjpowernode.dao.StudentDao.insertStudent";
//3.执行SqlSession的方法,表示执行sql语句
int rows = session.insert(sqlId, student);
//4.关闭SqlSession对象
session.close();
return rows;
}
}
package com.bjpowernode;
import com.bjpowernode.dao.Impl.StudentDaoImpl;
import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import org.junit.Test;
import java.util.List;
public class MyTest02 {
@Test
public void testSelectOne(){
StudentDao dao = new StudentDaoImpl();
Student student = dao.selectById(1001);
System.out.println(student);
}
@Test
public void testSelectStudents(){
StudentDao dao = new StudentDaoImpl();
List<Student> students = dao.selectStudents();
students.forEach(stu-> System.out.println(stu));
}
@Test
public void testInsertStudent(){
StudentDao dao = new StudentDaoImpl();
Student student = new Student();
student.setId(1005);
student.setName("小红");
student.setEmail("[email protected]");
student.setAge(30);
int rows = dao.insertStudent(student);
System.out.println(rows);
}
}
003- MyBatis dao代理 (简化写法)
3.1 分析
传统 Dao 开发方式的分析:
对上述方法进行进一步优化
3.2 dao代理的使用
3.3 深入理解参数
(1)parameterType
(2)一个简单参数(掌握)
(3)多个参数——使用@Param (掌握)
(4)多个参数——使用对象 (掌握)
(5)多个参数——按位置 (了解)
(6)多个参数——使用Map (了解)
(7)#和$
用$占位符表示表名或者列名 才是它的正确用法:
用 #{}是不行的
#{} 和 ${} 组合使用
${} 用于表名
3.4 封装 MyBatis 输出结果
(1)resultType
(2)resultMap
(3)数据库表列名与java类的属性名不一致的解决方法
(4)模糊like