首页 > 其他 > 详细

9-28 三层架构 和 Mybatis框架

时间:2020-09-28 22:00:20      阅读:92      评论:0      收藏:0      [点我收藏+]

一、架构

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

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

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

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

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

三、分层设计思想
  分层的特点:
    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);
}
}
 
 
 

9-28 三层架构 和 Mybatis框架

原文:https://www.cnblogs.com/bhhh/p/13746693.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!