一、架构
架构是对大型软件系统最高级别的设计
特点:
架构是从整体到部分的最高层次的划分
架构一旦选定就难以更改
二、模式
模式是在软件实践活动中总结的有效、通用且能解决重复出现问题的解决方案。
每个模式描述了一个在某种场景下不断重复发生的问题,以及该问题解决方案的核心。
模式的关键点是源于软件实践
架构模式
架构模式(也叫架构风格)是通用的、可重用的解决方案,用于在给定的上下文的软件体系中经常出现的问题。
三、分层设计思想
分层的特点:
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);
}
}
原文:https://www.cnblogs.com/bhhh/p/13746693.html