1、什么是框架?

  它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。
使用框架的好处:
  框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。

2、三层架构

表现层:
  是用于展示数据的
业务层:
  是处理业务需求
持久层:
  是和数据库交互的

3、持久层技术解决方案

JDBC技术:
  Connection
  PreparedStatement
  ResultSet
Spring的JdbcTemplate:
  Spring中对jdbc的简单封装
Apache的DBUtils:
  它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装

以上这些都不是框架
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils都只是工具类

4、mybatis的概述

mybatis是一个持久层框架,用java编写的。
它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
它使用了ORM思想实现了结果集的封装。

ORM:
  Object Relational Mappging 对象关系映射
简单的说:
  就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表。

  user User
  id userId
  user_name userName
今天我们需要做到
  实体类中的属性和数据库表的字段名称保持一致。
  user User
  id id
  user_name user_name

5、mybatis的入门

5.1mybatis的环境搭建

  第一步:创建maven工程并导入坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.itcast</groupId>
<artifactId>day01_easy_01mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies> </project>

  第二步:创建实体类和dao的接口

package com.itcastheima.domain;

import java.io.Serializable;
import java.util.Date; 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 + '\'' +
'}';
}
}
package com.itcastheima.dao;

import com.itcastheima.domain.User;

import java.util.List;

public interface IUserDao {
List<User> findAll();
}

  第三步:创建Mybatis的主配置文件

<?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"> <!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<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/eesy_mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是dao独立的配置文件-->
<mappers>
<mapper resource="com/itcastheima/dao/IUserDao.xml"/>
</mappers>
</configuration>

  第四步:创建映射配置文件

<?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.itcastheima.dao.IUserDao"> <!-- 配置查询说有 -->
<select id="findAll" resultType="com.itcastheima.domain.User">
select * from user;
</select>
</mapper>

环境搭建的注意事项:
  第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
      在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
      所以:IUserDao 和 IUserMapper是一样的
  第二个:在idea中创建目录的时候,它和包是不一样的
      包在创建时:com.itheima.dao它是三级结构
      目录在创建时:com.itheima.dao是一级目录
  第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同
  第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。

5.2mybatis的入门案例

package com.itcastheima.test;

import com.itcastheima.dao.IUserDao;
import com.itcastheima.domain.User;
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;
import java.util.List; /**
* 入门案例
*/
public class MybatisTest {
public static void main(String[] args) throws IOException {
// 1.读取文件
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3.使用工厂生产SQLSession对象
SqlSession session = factory.openSession();
// 4.使用SQLSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> list = userDao.findAll();
for (User user : list) {
System.out.println(user); }
//6.释放资源
session.close();
in.close();
}
}

注意事项:
  不要忘记在映射配置中告知mybatis要封装到哪个实体类中
  配置的方式:指定实体类的全限定类名

mybatis基于注解的入门案例
  把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句

package com.itcastheima.dao;

import com.itcastheima.domain.User;
import org.apache.ibatis.annotations.Select; import java.util.List; public interface IUserDao {
@Select("select * from user")
List<User> findAll();
}

  

同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。

<?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"> <!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<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/eesy_mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments> <!-- 用注解的方式配置,此处应该用class属性指定被注解的dao全限定类名-->
<mappers>
<mapper class="com.itcastheima.dao.IUserDao"/>
</mappers>
</configuration>

明确:
  我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
  不管是用XML还是注解配置。
  但是Mybatis它是支持写dao实现类的。

6、自定义Mybatis的分析

6.1查询所有的分析

6.2自定义代理对象的分析

22_1mybaits入门的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  4. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  5. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  6. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. 评【TED】陆克文:中美注定要冲突吗?

    陆克文TED演讲地址:https://www.bilibili.com/video/av2196100?from=search&seid=6953438337852168205 实话说,这篇材 ...

  2. React组件库集锦及学习视频

    [转载]https://www.rails365.net/articles/react-zui-hao-de-ui-zu-jian-ku-ji-jin 这里有一篇讨论,说了哪个才是 React 最好的 ...

  3. Fragment 的 replace 和 add 方法的区别?

    Fragment 本身并没有 replace 和 add 方法,这里的理解应该为使用 FragmentManager 的 replace 和 add 两种方法切换 Fragment 时有什么不同.我们 ...

  4. 代码代码:输入两个正整数m和n,求其最大公约数和最小公倍数。15 20 5

    import java.util.Scanner; //输入两个正整数m和n,求其最大公约数和最小公倍数.15 20 5 public class Test { public static void ...

  5. WireShark简单使用以及TCP三次握手

    最近一直在用C#编写服务器端的程序,苦于一直找不到合适的方法来测试网络程序,这篇文章很好的解释了网络程序的底层实现. WireShark是最好的学习网络协议最好的工具. wireshark介绍 wir ...

  6. springboot之RocketMq实现

    环境:win10 1.下载安装包 http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-re ...

  7. nmon服务器监控工具的使用安装

    nmon是一个监控服务器性能的工具 目录 1.安装nmon 2.数据采集 1.安装nmon nmon是一种linux服务器性能监控工具,他还提供了很好的图表结果展示功能.本篇以centos6.5系统为 ...

  8. zabbix使用脚本监控

    参照:http://www.cnblogs.com/zhongkai-27/p/9984597.html

  9. Unity中的动画系统和Timeline(5) Timeline

    在前面的动画,都是控制单独的物体,比如说控制一个角色的运动.而Timeline,可以对多个物体实施动画,形成过场动画,或者电影效果.比如,很多赛车游戏比赛开始前都会播放一段开场动画,围绕自己车的几个方 ...

  10. P1141 01迷宫(连通块模板)

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...