一、什么是框架:
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。另一种定义认为,框架是可被应用开发者定制的应用骨架
前者是从应用方面而后者是从目的方面给出的定义。简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一股是成熟的,不断升级的软件。
框架要解决的问题:
框架要解决的最重要的一个问题是技术整合的问题,在J2EE的 框架中,有着各种各样的技术,不同的软件企业需要从12EE 中洗择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技术的风险性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。
这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响
框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层
2.3软件开发的分层重要性
框架的重要性在于它实现了部分功能,并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现 软件工程中的“高内聚、低合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源。我们常见的 MVC 软件设计思想就是很好的分层思想
1、解决数据的持久化问题的框架
MyBatis本是apache的一个开源项目Batis,2010年这个项目由apache software foundation 迁移到了googe code,并且改名为MyBatis。2013年11月迁移到Github。
iBATIS一词来源于"intemer和“abatis的组合,是一个基于Java的持久层框架。BATIS提供的持久层框架包括SQL Maps和DataAccess Objects (DAOs)
3.1什么是MyBatis?
MyBatis是一个开源轻量级的数据持久化框架,是JDBC和Hibernate的替代方案
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注 sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。
mybatis 通过xml或注解的方式将要执行的各种statement 配置起来,并通过ava对象和statement 中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为iava对象并返回。
采用ORM 思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏了jdbc api底层访问细节,使我们不用与dbcapi打交道,就可以完成对数据库的持久化操作。
MBatis支持定制化SOL、存储过程以及高级映射,可以在实体类和SOL语句之间建立映射关系,是一种半自动化的ORM实现
MyBatis主要的目的就是简化IDBC操作,并且满足高并发和高响应的要求
二、使用mybatis
1.创建数据库
2.创建一个Java项目
创建module,创建一个lib文件夹导入mybatis框架所需要的jar包
右击ass library
3.创建对应的实体类:
在src中创建com.shi.bean包,然后创建User实体类
4.创建针对表操作的接口类
在src中创建com.shi.dao包,然后创建UserDao的接口,然后在接口中定义针对数据库的增删该查等操作。
5.在接口包中创建对应的mapper映射配置文件
在dao接口的同目录下创建跟接口名一样的配置文件。
6.在src目录中创建mybatis框架的核心配置文件。
在src中创建一个文件,命名为SqlMapConfig.xml(在此我命名为mybatis.xml),在该配置文件中配置连接数据库的参数。
7.在测试类中进行测试
抽取公共代码:
public class EmpTest {
//1.加载核心配置文件的字节输入流
InputStream stream=null;
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
SqlSessionFactoryBuilder builder=null;
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
SqlSessionFactory factory=null;
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
SqlSession sqlSession=null;
//5.通过SqlSession对象获取接口对应的代理对象
EmpDao empDao=null;
}
@Before
public void init() throws IOException {
stream = Resources.getResourceAsStream("Mybatis.xml");
builder=new SqlSessionFactoryBuilder();
factory = builder.build(stream);
sqlSession = factory.openSession();
userDao = sqlSession.getMapper(UserDao.class);
}
@After
public void destory() throws IOException {
sqlSession.commit();
sqlSession.close();
stream.close();
}
全查:
运行结果
新增一个小美女:@李文彬
@Test
public void testAdd() {
//定义User对象,封装数据
User user=new User();
user.setUsername("李文彬");
user.setPassword("666");
user.setPhone("111");
user.setAddress("开封西姜寨");
int n=userDao.add(user);
if (n>0){
System.out.println("succss");
}
}
运行结果:新增成功啦
删除:
@Test
public void delete(){
int n = userDao.delete(6);
if (n>0){
System.out.println("del....success");
}
}
运行结果:
单查(根据数据库中的id查询)
/**
* 根据id查询(单查)
*/
@Test
public void selectById(){
User user = userDao.selectById(1);
System.out.println(user);
}
运行结果:
修改:
@Test
public void update(){
//数据库回显
User olduser = userDao.selectById(10);
System.out.println("修改前:"+olduser);
//根据需要修改字段值
olduser.setUsername("欧豪");
olduser.setAddress("河南开封");
//执行数据库
userDao.update(olduser);
//再次查询
User newuser= userDao.selectById(10);
System.out.println("修改后"+newuser);
}
运行结果:
模糊查询:
@Test
public void testSelectLike(){
List<User> userList = userDao.selectLike("张");
for(User user:userList){
System.out.println(user);
}
}
运行结果: