9-28 三层架构 和 Mybatis框架

一、架构

  架构是对大型软件系统最高级别的设计

  特点:
    架构是从整体到部分的最高层次的划分
    架构一旦选定就难以更改
二、模式

  模式是在软件实践活动中总结的有效、通用且能解决重复出现问题的解决方案。

  每个模式描述了一个在某种场景下不断重复发生的问题,以及该问题解决方案的核心。

    模式的关键点是源于软件实践
架构模式
  架构模式(也叫架构风格)是通用的、可重用的解决方案,用于在给定的上下文的软件体系中经常出现的问题。

三、分层设计思想
  分层的特点:
    1.上层使用下层定义的服务;
    2.下层不能使用上层定义的服务;
    3.每一层对自己的上层隐藏其下层的实现细节
  优点:
    1.降低软件系统构件之间的耦合度,实现“低耦合,高内聚”原则
    2.提升系统灵活性,可以在接口相同的情况下替换某层具体实现
    3.可以增强复用度,下层可以为多个上层服务
  缺点
    过多的分层会影响系统性能
    分层可能会带来级联修改

四、三层架构模式
  表现层(UI): 直接和前端打交道(一是 接受前端ajax请求,二是返回json数据给前端)

  业务逻辑层(BLL):一是 处理表现层转发过来的前端请求(也就是具体业务),二是将数据从访问层或持久层返回到表现层。

  数据层访问层(DAL): 直接操作数据库(针对数据继续增添、删除、修改、查找),并将获得的数据返回给上一层(也就是业务逻辑层)。

                  

 

 

五、jdbc流程
  1.加载数据库驱动
  2.获取数据库的连接
  3.编写sql语句
  4.执行查询
  5.设计传参
  6.结果集处理
  7.关闭数据库连接

win键+r services.msc 打开电脑服务,查看mysql服务是否开启

  jdbc的缺点

  结果集的数据类型需要手动判断、列名需要手动填写
  获取的字段值需要逐个手动设置到实体类中

六、Mybatis框架
  MyBatis是一个三层架构中的持久层框架,它提供一种半自动的ORM实现,能够简化JDBC操作流程,帮助提升程序员的开发效率。MyBatis本质是基于JDBC进行简单的映射封装,所以运行效率(性能)低于JDBC。

  ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。

  ORM作用是为对象和关系数据库之间搭接桥梁,以解决对象与关系数据库之间不协调的问题。

  ORM映射规则:
    1.类与表相对应(基本规则)
    2.类的属性(或成员变量)与表的字段相对应(基本规则)
    3.类的实例与表中具体的一条记录相对应(基本规则)
    4.一个类可以对应多个表,一个表可以对应多个类;
    5.数据库中表可以没有主键,但类中必须有主键;
    6.数据库中表与表之间的关系对应类与类之间的关系;
    7.数据库中表的字段个数和名称可以和类的属性个数、名称不一样;

七、Mybatis举例

    1.导入MyBatis架构包 

      创建初始数据库表单供查询  

    2.创建UserEntity类(以保存对象)

/* *
 * <一句话功能简述>
 * <用户实体类>
 * @Author  on 2020/9/28 0028 下午 2:12
 * @Param
 * @return
 **/
public class UserEntity
{
    private int id;
    private  String  name;
    private  String  password;
    private  int age;
    private  int sex;
    private String email;

    public UserEntity()
    {
    }

    public UserEntity(int id, String name, String password, int age, int sex, String email)
    {
        this.id = id;
        this.name = name;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

    public int getSex()
    {
        return sex;
    }

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

    public String getEmail()
    {
        return email;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    @Override
    public String toString()
    {
        return "UserEntity{" +
            "id=" + id +
            ", name='" + name + '\'' +
            ", password='" + password + '\'' +
            ", age=" + age +
            ", sex=" + sex +
            ", email='" + email + '\'' +
            '}';
    }
}
  3.创建全局变量(配置数据库信息)
<?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>

    <!-- 数据库配置 -->
    <environments default="development">
        <environment id="development">
            <!-- 事务管理器,JDBC类型的事务管理器 -->
            <transactionManager type="JDBC" />
            <!-- 数据源,池类型的数据源 -->
            <dataSource type="POOLED">
                <!--设置数据库驱动 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--设置数据库url地址-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?serverTimezone=GMT"/>
                <!--设置数据库用户名-->
                <property name="username" value="root"/>
                <!--设置数据库密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--配置映射文件路径-->
    <mappers>
        <mapper resource="dao/IUserDao.xml"/>
    </mappers>
</configuration>  
  4.创建接口(定义访问数据库的方法
import entity.UserEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/* *
 * <dao层接口>
 * <定义访问数据库的方法>
 * @Author Administrator on 2020/9/28 0028 下午 4:33
 * @Param
 * @return
 **/
public interface IUserDao
{
//    查询用户
    public List<UserEntity> selectUSerByAge(int age);
//    添加
    public int insertUser(UserEntity user);
//    修改(注解@Param用于定义参数名)
    public int updateUser(@Param("name") String name,@Param("id") int id);
//    删除
    public int deleteUser(int id);
}

 

  5.配置映射文件(定义映射方式
<?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">
<!--namespace表示命名空间,填写Mapper映射器接口全路径-->
<mapper namespace="dao.IUserDao">
<!--    结果集进行映射为实体类(type是实体类路径)-->
    <resultMap id="userResultMap" type="entity.UserEntity">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="password" column="password"/><!-- 对象的属性名于数据库的列名对应  -->
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
        <result property="email" column="email"/>
    </resultMap>

<!--    查询语句(id 为接口方法名,resultMap设置结果集映射)-->
    <select id="selectUSerByAge" resultMap="userResultMap">
       select * from tb_user where age > #{age}
    </select>
<!--    insert 插入-->
    <insert id="insertUser">
        insert into tb_user (id,name,password,age,sex,email) values (#{id},#{name}
         ,#{password},#{age},#{sex},#{email})
    </insert>

<!--    Update 修改-->
    <update id="updateUser">
        update tb_user set name = #{name} where id =#{id}
    </update>

<!--    delete 删除-->
    <delete id="deleteUser">
        delete from tb_user where id=#{id}
    </delete>

</mapper>

 


  6.进行Mybatis测试
 
import dao.IUserDao;
import entity.UserEntity;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionException;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/* *
 * <一句话功能简述>
 * <测试类>
 * @Author Administrator on 2020/9/28 0028 下午 4:18
 * @Param
 * @return
 **/
public class MyBatisTest
{
    public static void main(String[] args)
        throws IOException

    {
        //设置指定框架MyBatis全局配置文件
        String resource = "mybatis-config.xml";
        //加载全局配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);

//      创建SqlSessionFactory实例
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取一个数据库连接sqlsession(相对于 jdbc connection 连接对象)
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取Dao接口实例
        IUserDao userDao = sqlSession.getMapper(IUserDao.class);
        //执行查询方法
        List<UserEntity> userEntities = userDao.selectUSerByAge(20);
        System.out.println(userEntities);

        //执行插入方法
       UserEntity userEntity = new UserEntity(3, "小李", "5522", 23, 1, "551@qq.com");
        int result = userDao.insertUser(userEntity);
       sqlSession.commit();//提交事务,修改数据库的时候

        System.out.println(result);

//        修改
        int res = userDao.updateUser("大华",3);
        sqlSession.commit();
        System.out.println(res);

//        执行删除
       int de =  userDao.deleteUser(3);
        System.out.println(de);
    }
}

 


 
 
posted @ 2020-09-28 20:23  随时随地的  阅读(550)  评论(0编辑  收藏  举报