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

深圳营销型定制网站开发1000网站中数据库教程

深圳营销型定制网站开发1000,网站中数据库教程,宁波网络推广教程,深圳做网站的公司哪家好一、绑定方式 1. XML文件方式 在Mybatis中#xff0c;我们需要创建一个与实体类对应的Mapper接口#xff0c;然后在该接口上添加方法#xff0c;这些方法对应着SQL语句。然后#xff0c;我们需要创建一个XML文件#xff0c;这个文件中包含了SQL语句和映射关系。 例如我们需要创建一个与实体类对应的Mapper接口然后在该接口上添加方法这些方法对应着SQL语句。然后我们需要创建一个XML文件这个文件中包含了SQL语句和映射关系。 例如我们有一个User实体类和一个UserMapper接口 public interface UserMapper {User getUserById(int id); }然后我们可以创建一个名为UserMapper.xml的文件内容如下 mapper namespacecom.example.dao.UserMapperselect idgetUserById resultTypecom.example.entity.UserSELECT * FROM user WHERE id #{id}/select /mapper在这个XML文件中namespace属性指定了Mapper接口的全限定名id属性指定了SQL语句的唯一标识符resultType属性指定了查询结果的类型。 2. 注解方式 Mybatis也支持通过注解的方式来进行映射。首先需要在Mapper接口上添加Mapper注解然后在方法上添加Select、Insert、Update、Delete等注解来指定SQL语句。 例如我们可以将上面的UserMapper接口改为注解方式 import org.apache.ibatis.annotations.*;Mapper public interface UserMapper {Select(SELECT * FROM user WHERE id #{id})User getUserById(int id); }在这个例子中Mapper注解表示这是一个Mapper接口Select注解表示这是一个查询语句#{id}是参数占位符。 3. 需要注意 启动类上添加MapperScan注解指定扫描路径 SpringBootApplication MapperScan(com.example.mapper) // 指定扫描路径 public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }不用MapperScan注解也可以在mybatis-config.xml中配置mapper映射文件的位置和命名空间 configurationmappersmapper resourcecom/example/mapper/UserMapper.xml/ // 指定Mapper映射文件的位置和名称/mappers /configuration二、实现原理 1. 原理 Mybatis的Mapper接口和xml绑定的原理主要依赖于JDK动态代理技术。 而Mybatis中MapperProxy代理类是mybatis实现Mapper接口和xml绑定的核心类之一。它实现了InvocationHandler接口用于拦截Mapper接口方法的调用并将方法名和参数传递给SqlSession对象执行相应的SQL语句。 2. MapperProxy代理类的实现过程 首先通过JDK动态代理技术生成一个MapperProxy代理类实例。这个代理类实现了Mapper接口并重写了接口中的方法。在重写的方法中MapperProxy会拦截方法调用并将方法名和参数传递给SqlSession对象执行相应的SQL语句。SqlSession对象会根据Mapper接口的namespace值找到对应的mapper.xml文件并根据id值找到对应的SQL语句。然后根据返回值类型和参数类型等信息生成相应的Java代码。这些Java代码会包含对SqlSession的操作例如查询、更新等操作。最终SqlSession对象会将这些Java代码编译成字节码并加载到JVM中运行。当SQL语句执行完毕后SqlSession对象会将结果返回给MapperProxy代理类。然后MapperProxy代理类会将结果映射为Java对象并返回给调用者。 3. MapperProxy代理类源码 下面是MapperProxy代理class的核心方法实现mybatis3.5.9 public class MapperProxyT implements InvocationHandler, Serializable {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {try {if (Object.class.equals(method.getDeclaringClass())) {return method.invoke(this, args);} else {return cachedInvoker(method).invoke(proxy, method, args, sqlSession);}} catch (Throwable t) {throw ExceptionUtil.unwrapThrowable(t);}}private MapperMethodInvoker cachedInvoker(Method method) throws Throwable {try {return MapUtil.computeIfAbsent(methodCache, method, m - {if (m.isDefault()) {try {if (privateLookupInMethod null) {return new DefaultMethodInvoker(getMethodHandleJava8(method));} else {return new DefaultMethodInvoker(getMethodHandleJava9(method));}} catch (IllegalAccessException | InstantiationException | InvocationTargetException| NoSuchMethodException e) {throw new RuntimeException(e);}} else {return new PlainMethodInvoker(new MapperMethod(mapperInterface, method, sqlSession.getConfiguration()));}});} catch (RuntimeException re) {Throwable cause re.getCause();throw cause null ? re : cause;}}private MethodHandle getMethodHandleJava9(Method method)throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {final Class? declaringClass method.getDeclaringClass();return ((Lookup) privateLookupInMethod.invoke(null, declaringClass, MethodHandles.lookup())).findSpecial(declaringClass, method.getName(), MethodType.methodType(method.getReturnType(), method.getParameterTypes()),declaringClass);}private MethodHandle getMethodHandleJava8(Method method)throws IllegalAccessException, InstantiationException, InvocationTargetException {final Class? declaringClass method.getDeclaringClass();return lookupConstructor.newInstance(declaringClass, ALLOWED_MODES).unreflectSpecial(method, declaringClass);} }
http://www.dnsts.com.cn/news/214469.html

相关文章:

  • 做个响应式网站多少钱设计签名在线生成免费
  • 微信网站建设计入什么科目威联通nas 做网站
  • 学软件开发的网站网站收录怎么设置
  • 清风网站建设wordpress仿站标签
  • 常用的设计网站有哪些大学生网站开发目的
  • 郑州市惠济区城乡建设局网站宜春网站建设
  • 建一个下载网站要什么cms系统比58同城做的好的网站
  • 织梦手机网站源码下载小语种网站怎么做
  • 襄樊网站建设哪家好手机wap网站特效
  • 网站建站价格标准企业所得税怎么算公式是什么
  • 伊利集团的网站建设水平评价上海设计装修公司排名
  • 同一虚拟主机 2个网站各行业的专业网址论坛资料
  • 布吉网站建设哪家技术好大学生创新创业网站建设内容
  • 企业网站模板下载哪里嘉兴网站托管
  • 网站建设开公司现在好做吗wordpress 页面美化
  • 防做网站网络平台推广方式
  • 旅游网站建设的组织性网站建设书籍附光盘
  • 温州网站建设方案书青岛设计网站的公司哪家好
  • 网络推广电话销售技巧和话术东莞市网络seo推广怎么样
  • 专门做网站建设的公司电商怎么做
  • 网站建设案例价格中国工商网
  • 如何在个人网上建网站怎么做好推广
  • 报价公司贵州便宜网站推广优化电话
  • 淄博网站制作设计高端跨境电商推广平台
  • 岳阳建设网站公司抖音代运营创业
  • 网站的增加条件设计深圳品牌咨询公司
  • 品牌的网站建设一般多少钱免费图片生成器
  • 免费的代码分享网站另一更新正在进行 wordpress
  • 凡客建站手机版下载网站设计服务合同
  • 门户网站建设与运行安装wordpress出现500错误