网站每年需要续费吗,wordpress留学主题,微信小程序怎么解绑,上海服装设计公司排名框架概述1.1什么是框架框架#xff08;Framework#xff09;是整个或部分系统的可重用设计#xff0c;表现为一组抽象构件及构件实例间交与的方法#xff1b;另一种定义认为#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义…框架概述1.1什么是框架框架Framework是整个或部分系统的可重用设计表现为一组抽象构件及构件实例间交与的方法另一种定义认为框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。简而言之框架其实就是某种应用的半成品就是一组组件供你选用完成你自己的系统。简单说就是使用别人搭好的舞台你来做表演。而且框架一般是成熟的不断升级的软件。1.2框架要解决的问题框架要解决的最重要的一个问题是技术整合的问题在J2EE 的 架中有着各种各样的技术不同的软件企业需要从J2EE 中选择不同的技术这就使得软件企业最终的应用依赖于这些技术技术自身的复杂性和技术的风险性将会直接对应用造成冲击。而应用是软件企业的核心是竞争力的关键所在因此应该将应用自身的设计和具体的实现技术解耦。这样软件企业的研发将集中在应用的设计上而不是具体的技术实现技术实现是应用的底层支撑它不应该直接对应用产生影响。框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。1.3软件开发的分层重要性框架的重要性在于它实现了部分功能并且能够很好的将低层应用平台和高层业务逻辑进行了缓和。为了实现 软件工程中的“高内聚、低合。把问题划分开来各个解决易于控制易于延展易于分配资源。我们常见的 MVC 软件设计思想就是很好的分层思想。1.4分层开发下的常见框架常见的JavaEE开发框架:解决数据的持久化问题的框架MyBatisMyBatis本是apache的一个开源项目Batis,2010年这个项目由apache software foundation 迁移d到了googe code并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于intemer和“abatis的组合是一个基于Java的持久层框架。BATIS提供的持久层框架包括SQL Maps和DataAccess Objects (DAOs)作为持久层的框架还有一个封装程度更高的架就是Hibernate但这个框架因为各种原因目前在国内的流行程度下降大多现在公司开发也越来越少使用。目前使用SpringData来实现数据持久化也是一种趋势。2. 解决WEB层问题的MVC框架Spring MVCSpring MVC属于SpringFrameWork的后续产品已经融合在Spring Web Flow里面Spring 摇架提供了构建Web 应用程序的全功能MVC模块。使用 Spring 可插入的MVC架构从而在使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架如Struts仰扁挫蹦傍靶哀现在一般不用)Struts2等。3. 解决技术整合问题的框架spring框架Spnng挺架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松合性角度而言绝大部分Java应用都可以从Spring中受益。目的解决企业应用开发的复杂性功能:使用基本的JavaBean代智EJB并提供了更多的企业应用功能范围:任何Java应用Spring是一个轻量级控制反转loC和面向切面AOP的容器框架。2.MyBatis简介2.1什么是MyBatis?MyBatis是一个开源轻量级的数据持久化框架是JDBC和Hibernate的替代方案。MyBatis 前身为IBatis2002 年由 Clinton Begin 发布。2010 年从Apache 移到 Google并改名为 MyBatis2013 年又迁移到了Github。mybatis是一个优秀的基于java的持久层框架它内部封装了jdbc使开发者只需要关注sql 语句本身而不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement 配置起来并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句最后由mybatis框架执行sql并将结果映射为iava对象并返回。采用ORM思想解决了实体和数据库映射的问题对jdbc进行了封装屏蔽了jdbcapi底层访问细节使我们不用与jdbcapi打交道就可以完成对数据库的持久化操作。MyBatis支持定制化SQL、存储过程以及高级映射可以在实体类和SQL语句之间建立映射关系是一种半自动化的ORM实现。MyBatis 的中文官网:https://mybatis.org/mybatis-3/zh/index.html2.2为什么要使用MyBatis?MvBatis主要的目的就是简化]DBC操作并且满足高并发和高响应的要求.回顾一下DBC代码:public class GoodsDao {private String jdbcdrivercom.mysql.cj.jdbc.Driver;private String jdbcurljdbc:mysql://localhost:3306/mydb?useSSLfalseserverTimezoneUTC;private String jdbcuserroot;private String jdbcpasswordroot;private Connection connull;private PreparedStatement pstmnull;private ResultSet rsnull;private int row0;public Goods FindById(int gid){Goods goodsnew Goods();try {//1.加载驱动Class.forName(jdbcdriver);//2.获取数据库连接conDriverManager.getConnection(jdbcurl,jdbcuser,jdbcpassword);//3.编写sql语句String sqlselect * from t_goods where gid?;//4.预处理对象pstmcon.prepareStatement(sql);//传参pstm.setObject(1,gid);//5.执行sql语句rspstm.executeQuery();if (rs.next()){//把当前数据行中的数据取出来存储到Goods对象中goods.setGid(rs.getInt(gid));goods.setGname(rs.getString(gname));goods.setPrice(rs.getDouble(price));goods.setMark(rs.getString(mark));}} catch (Exception e) {e.printStackTrace();}finally {try {if (pstm!null){pstm.close();}if (con!null){con.close();}} catch (Exception e) {e.printStackTrace();}}return goods;}
}分析以上JDBC存在的问题:数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能如果使用数据库链接池可解决此问题.sql 语句在代码中硬编码造成代码不易维护实际应用sql变化的可能较大sql变动需要改变java代码。使用preparedStatement向占有位符号传参数存在硬编码因为sql语的where条件不一定可能多也可能少修改sql还要修改代码系统不易维护。对结果集解析存在硬编码(查询列名)sl 变化导致解析代码变化系统不易维护如果能将数据库记录封装成pojo对象解析比较方便。再次回顾mybatis特点: mybatis 内部封装了jdbc使开发者只需要关注 sql 语句本身而不需要花费精力去处理加载动、创建连接、创建 statement等繁杂的过程。mybatis 通过 ml或注解的方式将要执行的各种statement 配置起来并通过 ava对象和statement 中sal 的动态参数进行射生成最终执行的sql语句最后由mybatis框架执行sgl并将结果映射为java对象并返回。采用ORM 思想解决了实体和数据库映射的问题对 dbc 进行了封装屏蔽了jdbc api 底层访问细节使我们不用与jdbc api打交道就可以完成对数据库的持久化操作。3.MyBatis的入门案例下面我们来用一个入门的案例了解一下MyBatis的基本操作步骤和使用方法。查询、增加、删除案例3.1创建测试的数据库-- 判断存在即删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
-- 使用数据库
use mydb;drop table if exists t_user;
-- 创建表
create table t_user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);insert into t_user(username,password,phone,address) values(张三,666,18965423548,南阳);
insert into t_user(username,password,phone,address) values(李四,333,18754263548,许昌);
insert into t_user(username,password,phone,address) values(小美,123,18565234759,信阳);select * from t_user where username? and password?;
select * from t_user;3.2创建一个Java项目并导入mybatis框架的jar包在项目中创建一个lib文件夹放入mybatis框架的jar包并导入项目中。3.3创建跟表对应的实体类。在src中创建com.chen.bean包然后创建User实体类。package com.zhao.bean;public class User {private Integer uid;private String username;private String password;private String phone;private String address;public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username username;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address address;}Overridepublic String toString() {return User{ uid uid , username username \ , password password \ , phone phone \ , address address \ };}
}
3.4创建针对表操作的接口类。在src中创建com.chen.dao包然后创建UserDao的接口然后在接口中定义针对数据库的增删改查等操作。package com.zhao.dao;import com.zhao.bean.User;import java.util.List;public interface UserDao {/*** 查询所有用户信息*/ListUser selectAll();int add(User user);int delete(int uid);}
3.5在接口的包中创建对应的mapper映射配置文件。在dao接口的同目录下创建跟接口名字一样的配置文件。?xml version1.0 encodingUTF-8?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
!--namespace是映射的dao接口--
mapper namespacecom.zhao.dao.UserDao!--通过select标签进行查询id:映射接口的方法名parameterType:指定参数的类型如果集合类型只需指定集合元素的类型即可resultType:指定返回的类型--select idselectAll resultTypecom.zhao.bean.Userselect * from t_user;/selectinsert idadd parameterTypecom.zhao.bean.Userinsert into t_user(username,password,phone,address) values(#{username},#{password},#{phone},#{address});/insert
/mapper3.6在src目录中创建mybatis框架的核心配置文件。在src中创建一个文件命名为SqlMapConfig.xml在该配置文件中配置连接数据库的参数。?xml version1.0 encodingUTF-8?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--配置环境信息就是配置连接数据库的参数default指定配置的环境信息的ID表示默认连接该环境--environments defaultmysqlenvironment idmysql!-- 配置事务的处理方式模式使用JDBC的事务处理--transactionManager typejdbc/transactionManager!-- 数据源的默认type设置pooled表示使用连接池--dataSource typepooledproperty namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/mydb/property nameusername valueroot/property namepassword valueroot//dataSource/environmentenvironment idoracletransactionManager type/transactionManagerdataSource type/dataSource/environment/environments!--mapper配置文件--mappersmapper classcom.zhao.dao.UserDao//mappers
/configuration3.7在测试类中进行测试使用mybatis框架需要按照框架的步骤进行。package com.zhao.test;import com.zhao.bean.User;
import com.zhao.dao.UserDao;
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 org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class UserTest {//1.加载核心配置文件的字节输入流InputStream stream null;//2.创建SalSessionFactory的构建对象--框架使用的是构建者模式SqlSessionFactoryBuilder builder null;//3.通过构建对象加载配置文件的输入流获取SqlSessionFactorySqlSessionFactory factory null;//4.通过工厂对象获取SqlSession对象--执行jabc的SqlSession sqlSession null;//5.通过SqlSession对象获取接口对应的代理对象UserDao userDao null;Beforepublic void init() throws IOException {//1.加载核心配置文件的字节输入流stream Resources.getResourceAsStream(mybatis.xml);//2.创建SalSessionFactory的构建对象--框架使用的是构建者模式builder new SqlSessionFactoryBuilder();//3.通过构建对象加载配置文件的输入流获取SqlSessionFactoryfactory builder.build(stream);//4.通过工厂对象获取SqlSession对象--执行jabc的sqlSession factory.openSession();//5.通过SqlSession对象获取接口对应的代理对象userDao sqlSession.getMapper(UserDao.class);}Afterpublic void distroy() throws IOException {sqlSession.commit();sqlSession.close();stream.close();}
}
查询 Testpublic void testSelectAll() throws IOException {//6.通过代理对象执行查询方法ListUser userList userDao.selectAll();//7.遍历集合for (User user : userList) {System.out.println(user);}}查询运行结果如下log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.User{uid1, username张三, password666, phone18965423548, address南阳}User{uid2, username李四, password333, phone18754263548, address许昌}User{uid3, username小美, password123, phone18565234759, address信阳}User{uid4, usernamemybatis, password333, phone111, address来来来}User{uid5, usernamemybatis, password333, phone111, address来来来}Process finished with exit code 0增加Testpublic void testAdd() throws IOException {//定义user对象封装数据User user new User();user.setUsername(mybatis);user.setPassword(333);user.setPhone(111);user.setAddress(来来来);int n userDao.add(user);if (n 0) {System.out.println(success);} else {System.out.println(error);}}增加运行结果log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.successProcess finished with exit code 0数据库添加成功删除Testpublic void testDelete() throws IOException {int n userDao.delete(4);if (n 0) {System.out.println(删除成功);}}删除运行结果log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.删除成功Process finished with exit code 0数据库删除成功