什么是框架
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;
另一种定义认为,框架是可被应用开发者定制的应用骨架。
前者是从应用方面而后者是从目的方面给出的定义。简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
软件开发的分层重要性
框架的重要性在于它实现了部分功能,并且能够很好的将底层应用平台和高层业务逻辑进行了缓和。为了实现软件工程中的”高内聚,低耦合“。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的MVC软件设计思想就是很好的分层思想。

分层开发下的常见框架
解决数据的持久化问题的框架
MyBatis
框架职责:作用在dao层,负责数据访问的框架
解决WEB层问题的MVC框架
spting MVC
框架职责:作用在web层,负责和客户端交互的框架。
解决技术整合问题的框架
spring框架
框架职责:不是作用在某一层,而是实现web层、Service层、Dao层之间解耦的框架,是三层之间的粘合剂
Mybatis入门案例
创建测试的数据库
#判断存在即删除数据库
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包
在项目中创建一个lib文件夹放入mybatis框架的jar包,并导入项目中。

创建跟表对应的实体类
在src中创建com.chen.bean包,然后创建User实体类。
package com.kong.bean;
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", address='" + 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;
}
}
创建针对表操作的接口类
在src中创建com.chen.dao包,然后创建UserDao的接口,然后在接口中定义针对数据库的增删
改查等操作。

在接口的包中创建对应的mapper映射配置文件
在dao接口的同目录下创建跟接口名字一样的配置文件

在src目录中创建mybatis框架的核心配置文件
在src中创建一个文件,命名为SqlMapConfig.xml,在该配置文件中配置连接数据库的参数

在测试类中进行测试
import com.kong.bean.User;
import com.kong.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 a() throws IOException{
//1.加载核心配置文件的字节输入流
stream= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder=new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionGactory
factory=builder.build(stream);
//4.通过工厂对象获取SqlSession对象---执行JDBC操作的
sqlSession=factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
userDao=sqlSession.getMapper(UserDao.class);
}
@Test
public void testSelectAll(){
//6.通过代理对象执行查询方法
List<User> userList=userDao.selectAll();
//7.遍历集合
for(User user : userList){
System.out.println(user);
}
}
@Test
public void testAdd() throws IOException{
a();
User user=new User();
user.setUsername("mybatis");
user.setPassword("333");
user.setPhone("111");
user.setAddress("github");
int n=userDao.add(user);
if(n>0){
System.out.println("success");
}
}
@Test
public void testDelete() {
int n=userDao.delete(1);
if(n>0){
System.out.println("delete success");
}
}
@Test
public void testUpdate(){
//1.数据库回显
User oldUser=userDao.selectByUid(5);
System.out.println("修改前:"+oldUser);
//2.根据需要修改字段值
oldUser.setUsername("修改测试");
oldUser.setAddress("河南郑州");
//3.执行数据库更新
userDao.update(oldUser);
//4.再次查询
User newUser=userDao.selectByUid(5);
System.out.println("修改后:"+newUser);
}
@Test
public void testSelectByuid(){
User user=userDao.selectByUid(1);
System.out.println(user);
}
@After
public void distory() throws IOException{
//增删改是数据库慎重的操作,增删改会把数据更新到缓存中,需要显示的执行提交操作,才会真正更新到数据库中
sqlSession.commit();
sqlSession.close();
stream.close();
}
}