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

网站建设领导小组新闻今天的最新新闻

网站建设领导小组,新闻今天的最新新闻,如何用两台电脑做服务器建网站,网站建设水上乐园一、绑定方式 1. XML文件方式 在Mybatis中,我们需要创建一个与实体类对应的Mapper接口,然后在该接口上添加方法,这些方法对应着SQL语句。然后,我们需要创建一个XML文件,这个文件中包含了SQL语句和映射关系。 例如&a…

一、绑定方式

1. XML文件方式

在Mybatis中,我们需要创建一个与实体类对应的Mapper接口,然后在该接口上添加方法,这些方法对应着SQL语句。然后,我们需要创建一个XML文件,这个文件中包含了SQL语句和映射关系。

例如,我们有一个User实体类和一个UserMapper接口:

public interface UserMapper {User getUserById(int id);
}

然后,我们可以创建一个名为UserMapper.xml的文件,内容如下:

<mapper namespace="com.example.dao.UserMapper"><select id="getUserById" resultType="com.example.entity.User">SELECT * 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映射文件的位置和命名空间

<configuration><mappers><mapper resource="com/example/mapper/UserMapper.xml"/> // 指定Mapper映射文件的位置和名称</mappers>
</configuration>

二、实现原理

1. 原理

Mybatis的Mapper接口和xml绑定的原理主要依赖于JDK动态代理技术

而Mybatis中MapperProxy代理类是mybatis实现Mapper接口和xml绑定的核心类之一。它实现了InvocationHandler接口,用于拦截Mapper接口方法的调用,并将方法名和参数传递给SqlSession对象执行相应的SQL语句。

2. MapperProxy代理类的实现过程

  1. 首先,通过JDK动态代理技术生成一个MapperProxy代理类实例。这个代理类实现了Mapper接口,并重写了接口中的方法。
  2. 在重写的方法中,MapperProxy会拦截方法调用,并将方法名和参数传递给SqlSession对象执行相应的SQL语句。
  3. SqlSession对象会根据Mapper接口的namespace值找到对应的mapper.xml文件,并根据id值找到对应的SQL语句。然后,根据返回值类型和参数类型等信息,生成相应的Java代码。这些Java代码会包含对SqlSession的操作,例如查询、更新等操作。最终,SqlSession对象会将这些Java代码编译成字节码,并加载到JVM中运行。
  4. 当SQL语句执行完毕后,SqlSession对象会将结果返回给MapperProxy代理类。然后,MapperProxy代理类会将结果映射为Java对象,并返回给调用者。

3. MapperProxy代理类源码

下面是MapperProxy代理class的核心方法实现:mybatis3.5.9

public class MapperProxy<T> 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.fp688.cn/news/145938.html

相关文章:

  • 东凤镇 网站建设最新网络推广平台
  • 个人简历word模板企业站seo外包
  • 在家做网站怎么赚钱百度竞价ocpc
  • 喀什住房和城乡建设局网站北京网络营销咨询公司
  • 镇江网站建设一般多少钱天津网络广告公司
  • 做美女网站挣钱如何建立网站平台的步骤
  • java直播网站怎么做网络工程师培训班要多少钱
  • 化工厂网站建设小姐关键词代发排名
  • mac做网站设计企业新闻营销
  • 闲置tp路由自己做网站现在怎么做网络推广
  • 网站建设经验大总结竞价托管公司
  • 做钓鱼网站判刑seo关键词优化服务
  • 四海网络网站建设幽默广告软文案例
  • 如何建设营销型网站搜索引擎优化包括
  • 网站怎么做搜索栏如何快速推广
  • 企业网站建设基本流程网站监测
  • 中山哪家建网站好360搜索推广
  • 洛阳网站制作哪家好深圳网站营销seo费用
  • 兰州官网排名推广企业新网站seo推广
  • 有了域名和空间怎么做网站内容什么是竞价
  • 网站与建设的字体间距小时seo
  • 网站建设专业客服接听术语优化关键词规则
  • 卖东西专业网站网上谷歌浏览器 免费下载
  • 怎么用织梦搭建网站大数据营销名词解释
  • 门户型网站建设方案网站关键词优化网站推广
  • 福建省建设厅考试网站网站查询系统
  • 苏州正规网站建设概况百度联盟是什么
  • 英文网站建设方案 ppt模板网站推广途径和推广要点
  • ps里怎么做网站腾讯广点通广告投放平台
  • 网络推广方法与技巧关键词怎么优化