Mybatis

一、什么是框架?

  框架顾名思义,他是一个架子,类似于人初期搭建的房基,是个半成品,需要我们后期为他添加些东西装饰。

  在系统开发中,框架是整个或者部分系统的可重用涉及,表现为一组抽象构架及构建实例间交互的方法;另一种定义认为,框架是可应用开发者定制的股价。前者是从应用方面而后是从目的方面给出的意义。

  框架就是某种应用的半成品,是一组组件,供你选用完成自己的系统。简单来说就是使用别人搭建好的舞台,你来做表演。框架一般是成熟的,不断升级的软件。

  因此应该将应用自身的设计和具体的实现技术解耦。这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。

二、框架解决什么问题?

  技术整合的问题,在将J2EE的框架中,有各种各样的技术,不同的软件企业需要从J2EE中选择不同的的技术,这样就使得企业最终依赖于这些技术,技术自身的复杂性和技术的风险性将会直接对应用造成冲击。而且应用是软件企业的核心,是竞争力的关键所在。

  因此应该将应用自身的设计和具体的实现技术解耦。这样,软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。

  在现在个个软件开发公司所用的框架基本不同,这样也就促进了技术的进步。在开发中,框架一般在底层应用平台和高层业务逻辑之间的中间层

三、为什么软件开发要分层?

  框架重要是实现了部分功能,并且能够很好的将底层应用平台和高级业务逻辑进行了缓和。

  为什么软件开发要分层,因为软件工程规定程序要“高内聚,低耦合”,分层的思想是将问题划分开来,单个解决,这样易于控制、易于延展、易于分配资源。

  在常见的MVC软件中就是应用分层的思想。

 通过分层更好的实现各个部分的职责,将每一层再细化出不同框架,分层解决问题。

四、分层开发常用框架

常见的 JavaEE 开发框架:

MyBatis

1、解决数据的持久化问题的框架

  目前使用 Spring Data 来实现数据持久化也是一种趋势。在从前使用比较多的是一个封装程度更高的框架就是 Hibernate,现在不流行了,具体原因可以百度。

2、解决 WEB 层问题的 MVC 框架

spring MVC

 3、解决技术整合问题的框架

spring框架

 五、MyBatis 框架详解

概念:

  mybatis是一个优秀的的基于Java的持久层框架,它内部封装了JDBC,开发者只需要关注sql语句本身,而不需要过多关注数据库驱动、创建链接、创建statement等复杂步骤。

  mybatis 是通过xml或者注解的方式将要执行的各种statement配置开来,并通过Java对象和statement中SQL的动态参数进行映射生成最终执行的 sql 语句,最后再通过mybatis框架执行SQL语句并将结果映射为 java 对象并返回。

  采用ORM思想解决了实体和数据库映射的问题,对JDBC进行封装,屏蔽了jdbc api的底层访问细节,我们不需要与jdbc api交流,就可以实现完成数据库持久化操作。

引入:

  为什么要使用mybatis框架?

  在以前,使用jdbc时,在开发人员使用中发现JDBC有以下问题:

  • 数据库连接创建、释放会造成系统资源浪费进而影响系统性能,如果使用数据库连接池可解决此类问题。
  • sql 语句在代码中硬解码,造成不宜维护,在实际开发中SQL语句变化很大,更改sql语句就要更改Java代码。
  • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
  • 对结果解析存在硬解码(查询列名),sql 变化导致解析代码发生变化,系统不宜维护,如果将数据库查询记录进行封装pojo对象,这样解析更方便。

下载

百度搜索mybatis download获取最新版本,

 

 搭建Mybatis开发环境

1、创建工程文件

2、添加 Mybatis 的坐标--在 pow.xml 添加Mybatis坐标

<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>

3、编写实体类

package com.itheima.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * @Company 
 */
public class User implements Serializable{

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    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 +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

4、编写持久层IUserDao

IUserDao 接口就是我们的持久层接口(也可以写成 UserDao 或者 UserMapper),具体代码如下:
/**
*
* <p>Title: IUserDao</p>
* <p>Description: 用户的持久层操作</p>
* <p>Company: http://www.itheima.com/ </p>
*/
public interface IUserDao {
/**
* 查询所有用户
* @return
*/
List<User> findAll();
}

5、编写持久层接口的映射文件IUserDao.xml

要求:
创建位置:必须和持久层接口在相同的包中。
名称:必须以持久层接口名称命名文件名,扩展名是.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">
<mapper namespace="com.itheima.dao.IUserDao">
<!-- 配置查询所有操作 -->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>

6、编写SqlMapConfig.xml配置文件

<?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">
<configuration>
<!-- 配置 mybatis 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ee50"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
</configuration>

7、编写测试类

/**
*
* <p>Title: MybatisTest</p>
* <p>Description: 测试 mybatis 的环境</p>
* <p>Company: http://www.itheima.com/ </p>
*/
public class MybatisTest {
public static void main(String[] args)throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//5.使用 SqlSession 创建 dao 接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//6.使用代理对象执行查询所有方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.释放资源
session.close();
in.close();
}
}

以上便是简单的mybatis入门,从中可以发现,我们需要改的地方不多,只需要编写Dao接口,并按照要求编写mybatis的两个配置文件,就可实现功能。

更为简单,使用注解,只需编写一个mybatis配置文件就可实现功能。

修改

在持久层接口中添加注解

/**
*
* <p>Title: IUserDao</p>
* <p>Description: 用户的持久层操作</p>
*/
public interface IUserDao {
/**
* 查询所有用户
* @return
*/
@Select("select * from user")
List<User> findAll();
}

修改 SqlMapConfig.xml

<!-- 告知 mybatis 映射配置的位置 -->
<mappers>
<mapper class="com.itheima.dao.IUserDao"/>
</mappers>
//在使用基于注解的 Mybatis 配置时,请移除 xml 的映射配置(IUserDao.xml)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值