当前位置: 首页 > news >正文

网站建设及推广服务的合同范本wordpress主题zhixina

网站建设及推广服务的合同范本,wordpress主题zhixina,湖南必去十大景点排名,网站推送目录 1、目的:梳理一下MyBatis运行时的几个对象,我们需要搞清楚他们的作用,进而需要理解mybatis的整个工作流程和执行原理。 2、简要概括各个类 2.1 Resources 作用:编写资源加载类,使用类加载器加载 配置文件(myb…

目录

1、目的:梳理一下MyBatis运行时的几个对象,我们需要搞清楚他们的作用,进而需要理解mybatis的整个工作流程和执行原理。

2、简要概括各个类

2.1 Resources

作用:编写资源加载类,使用类加载器加载 配置文件(mybatis-config.xml ),即:读取mybatis-config.xml

2.2 SqlSessionFactoryBuilder

作用:将配置资源封装成Configuration对象,并且将该资源对象传到工厂对象中

2.2.1 Configuration

作用:配置类 --> 把所有的配置信息 都装进去

2.2.2 MappedStatement

作用:用来封装 sql语句 和 查询结果集(即:返回值类型)

2.3 SqlSessionFactory

2.4 SqlSession

2.5 ProxyFactory

3、测试


1、目的:梳理一下MyBatis运行时的几个对象,我们需要搞清楚他们的作用,进而需要理解mybatis的整个工作流程和执行原理。

mybatis-config.xml

mapper.xml mapper.xml mapper.xml...

|

|

Resources

|

|---->InputStream

|

SqlSessionFactoryBuilder

|

|---->Configuration(conn, Map<namespace+"."+id, MappedStatement(sql, resultType)>)

|

SqlSessionFactory

|

|---->Configuration(conn, Map<namespace+"."+id, MappedStatement(sql, resultType)>)

|

SqlSession

|

|---->conn, Map<namespace+"."+id, MappedStatement(sql, resultType)>

|

ProxyFactory

|

|---->MappedStatement(sql, resultType), conn

|

Executor

| |

| |

| |

输入出映射

2、简要概括各个类

2.1 Resources

作用:编写资源加载类,使用类加载器加载 配置文件(mybatis-config.xml ),即:读取mybatis-config.xml

package com.by.io;import java.io.InputStream;public class Resources {//根据文件名称,加载类路径下面的配置文件public static InputStream getResourceAsStream(String filePath){return Resources.class.getClassLoader().getResourceAsStream(filePath);}
}

2.2 SqlSessionFactoryBuilder

作用:将配置资源封装成Configuration对象,并且将该资源对象传到工厂对象中

package com.by.builder;import com.by.cfg.Configuration;
import com.by.factory.DefaultSqlSessionFactory;
import com.by.factory.SqlSessionFactory;
import com.by.utils.XMLConfigBuilder;import java.io.InputStream;public class SqlSessionFactoryBuilder {/*** 构建SqlSessionFactory对象* @param in* @return*/public SqlSessionFactory build(InputStream in){Configuration configuration = XMLConfigBuilder.loadConfiguration(in);return  new DefaultSqlSessionFactory(configuration);}
}

2.2.1 Configuration

作用:配置类 --> 把所有的配置信息 都装进去

package com.by.cfg;import com.by.mapping.MappedStatement;import java.util.HashMap;
import java.util.Map;public class Configuration {private String driver;private String url;private String username;private String password;/**Map<"com.by.dao.UserDao.findAll", MappedStatement>     */private Map<String, MappedStatement> mappers = new HashMap<String,MappedStatement>();public Map<String, MappedStatement> getMappers() {return mappers;}public void setMappers(Map<String, MappedStatement> mappers) {this.mappers.putAll(mappers);//此处需要使用追加的方式}public String getDriver() {return driver;}public void setDriver(String driver) {this.driver = driver;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}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;}
}

2.2.2 MappedStatement

作用:用来封装 sql语句 和 查询结果集(即:返回值类型)

package com.by.mapping;public class MappedStatement {private String queryString;//SQLprivate String resultType;//实体类的全限定类名public String getQueryString() {return queryString;}public void setQueryString(String queryString) {this.queryString = queryString;}public String getResultType() {return resultType;}public void setResultType(String resultType) {this.resultType = resultType;}
}

2.3 SqlSessionFactory

package com.by.factory;
public interface SqlSessionFactory {//获取SQLSession对象public SqlSession openSession();
}
package com.by.factory;import com.by.cfg.Configuration;
import com.by.session.DefaultSqlSession;
import com.by.session.SqlSession;public class DefaultSqlSessionFactory implements SqlSessionFactory {private Configuration cfg;public DefaultSqlSessionFactory(Configuration cfg) {this.cfg = cfg;}/*** 获取一个SqlSession对象* @return*/@Overridepublic SqlSession openSession() {return new DefaultSqlSession(cfg);}
}

2.4 SqlSession

public interface SqlSession {//获取代理对象public <T> T getMapper(Class<T> tClass);//释放资源void close();
}
package com.by.session;import com.by.utils.DataSourceUtil;
import com.by.cfg.Configuration;import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.SQLException;public class DefaultSqlSession implements SqlSession {private Configuration cfg;private Connection conn;public DefaultSqlSession(Configuration cgf){this.cfg = cgf;this.conn = DataSourceUtil.getConnection(cfg);}/** 创建代理对象*/@Overridepublic <T> T getMapper(Class<T> tClass) {/*** tClass.getClassLoader():类加载器* new Class[]{tClass}:Class数组,让代理对象和被代理对象有相同的行为*  new ProxyFactory:调用真实角色,附加自己的操作*/return (T) Proxy.newProxyInstance(tClass.getClassLoader(),new Class[]{tClass},new ProxyFactory(cfg.getMappers(),conn));}@Overridepublic void close() {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

2.5 ProxyFactory

package com.by.session;import com.by.mapping.MappedStatement;
import com.by.utils.Executor;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Map;public class ProxyFactory implements InvocationHandler {private Map<String, MappedStatement> mappers;private Connection conn;public ProxyFactory(Map<String, MappedStatement> mappers, Connection conn){this.mappers = mappers;this.conn = conn;}//调用代理对象的任何方法,都会在这执行public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//1.获取方法名String methodName = method.getName();//2.获取方法所在类的名称String className = method.getDeclaringClass().getName();//3.组合keyString key = className+"."+methodName;//4.获取mappers中的Mapper对象MappedStatement mappedStatement = mappers.get(key);//5.判断是否有mapperif(mappedStatement == null){throw new IllegalArgumentException("传入的参数有误");}//6.调用工具类执行查询所有return new Executor().selectList(mappedStatement,conn);}
}

3、测试

//1.读取配置文件InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");//2.创建SqlSessionFactory工厂SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(in);System.out.println("-----" + factory);//3.使用工厂生产SqlSession对象SqlSession session = factory.openSession();//4.使用SqlSession创建Dao接口的代理对象UserDao userDao = session.getMapper(UserDao.class);//5.使用代理对象执行方法List<User> users = userDao.findAll();for(User user : users){System.out.println(user);}//6.释放资源session.close();in.close();
http://www.yayakq.cn/news/895601/

相关文章:

  • 邢台哪里可以做网站莲都区建设分局网站
  • 做视频网站的方法外贸企业建站公司
  • 专科网站建设论文合肥seo建站
  • 建立网站要准备多少钱制作网站公司谁家好
  • 湛江免费网站建站模板wordpress鼠标特效主题
  • 建设部安全员证书查询网站商水县住房城乡建设网站
  • 域名转移影响网站访问吗哪个网站可以做砍价
  • 网站制作二维码如何进入网站后台管理系统
  • 上海龙华医院的网站建设建站主机
  • 顺德定制网站建设深圳公司社保网站
  • 电视网站后台管理系统漏洞软件开发工程师报考条件
  • 建站seo赚钱ui设计培训学费多少
  • 深圳专业建站公司有哪些那个网站的详情做的好
  • 有备案号的网站是公司的吗医院网站建设论证报告
  • 鞍山建设局的网站网站建设公司电话销售话术
  • e时代网站制作陕西富通建设有限公司网站
  • 大团企业网站制作什么网站可以做私房菜外卖
  • 网站制作怎么做搜索栏网站开发摊销期
  • 色一把做最好的网站石家庄定制网站建设服务
  • 无锡网站建设企业排名怎样建设游戏网站
  • 食品公司名字大全宁波网站seo诊断工具
  • 贵阳网站制作计划网站移动页面怎么做
  • 甘肃省水利厅引洮工程建设管理局网站网站毕业设计任务书
  • 贵阳建站推广公司网站定制开发上海
  • 手机网站 宽度在线生成印章
  • 网站二级页面模板网络运营商无服务
  • 手机端网站欣赏大型门户网站建设哪专业
  • 六安做网站的静态网页制作实训报告
  • 网站首页布局有哪些策划书的推广与运营
  • 网站seo工作南庄九江网站建设