JavaWeb-Mybatis框架(1)

MVC模式

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

b03533fa828ba61edbddc04d4034970a304e59a4.jpg

三层架构概述:

  • 表现层UL:主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。 SpringMVC
  • 业务层BLL:UI层和DAL层之间的桥梁。实现业务逻辑,处理业务需求。 Spring
  • 持久层DAL:与数据库交互,主要实现对数据的增、删、改、查。 Mybatis

01三层架构.png

MyBatis框架概述

  1. Mybatis是一个基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
  2. Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
  3. 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

Mybatis简单入门

搭建Mybatis开发环境:

1.创建Maven工程并在pom.xml文件中添加Mybatis的坐标

2.创建实体类和dao接口

  • 首先在数据库中创建爱你user表,信息如下:
    1.JPG

  • 创建User类和UserDao(也可叫UserMapper)接口

    // User类
    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 + '\'' +
                    '}';
        }
    }
    
    // UserDao 接口
    public interface UserDao {
        /*
        查询所有操作
         */
        List<user> findAll();
    }
    

3.创建Mybatis的主配置文件: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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="bjtu/dao/UserDao.xml"/>
    </mappers>
</configuration>

4.创建映射配置文件:UserDao.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="bjtu.dao.UserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="bjtu.domain.User">
        select * from user
    </select>
</mapper>

注:
1)Mybatis的映射配置文件结构必须和dao接口的文件结构相同;
2)映射配置文件的mapper标签namespace必须是dao接口的全限定类名;
3)映射配置文件的操作配置,id属性的取值必须是dao接口的方法名;
满足以上几个配置,在开发中无需再写dao的实现类。

5.创建测试代码

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接口的代理对象
        UserDao userDao = session.getMapper(UserDao.class);

        //5.使用代理对象执行方法
        List<user> users = userDao.findAll();
        for(user u : users){
            System.out.println(u);
        }

        //6.释放资源
        session.close();
        in.close();
    }
}

入门案例的分析.png

使用配置注解的方式

删除UserDao.xml文件,在UserDao接口文件的方法上添加 @Select(“SQL语句”)

// UserDao 接口
    public interface UserDao {
        /*
        查询所有操作
         */        
        @Select("select * from user")
        List<user> findAll();
    }

并改变SqlMapconfig.xml中 mappers配置

 <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<!--<mappers>-->
    <!--<mapper resource="bjtu/dao/UserDao.xml"/>-->
<!--</mappers>-->
<!--如果使用注解的方式配置,此处应使用class属性指定被注解的dao的全限定类名-->
<mappers>
    <mapper class="bjtu.dao.UserDao"/>
</mappers>