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

建站工具评测 discuz广州最新新闻

建站工具评测 discuz,广州最新新闻,中国移动网站建设情况分析,主题资源网站建设步骤简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

简单手写Mybatis大致原理

    • 大致原理
    • 项目结构
    • 项目代码
    • 代码测试

大致原理

底层基于JDK动态代理技术实现

项目结构

在这里插入图片描述

项目代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>mybatis-jdk-proxy</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency></dependencies></project>

config.properties

driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_mybatis?serverTimezone=UTC
user=root
password=admin

UserEntity.java

package com.mybatis.entity;/*** @author honey* @date 2023-07-26 15:29:38*/
public class UserEntity {private Integer id;private String name;@Overridepublic String toString() {return "UserEntity{" +"id=" + id +", name='" + name + '\'' +'}';}
}

UserMapper.java

package com.mybatis.mapper;import com.mybatis.proxy.Insert;/*** @author honey* @date 2023-07-26 21:04:23*/
public interface UserMapper {/*** 新增用户** @return int*/@Insert("INSERT INTO `tb_user` (`id`, `name`) VALUES (null, 'Faker');")int insertUser();
}

Insert.java

package com.mybatis.proxy;import java.lang.annotation.*;/*** @author honey* @date 2023-07-27 20:48:38*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Insert {String value();
}

JdbcUtils.java

package com.mybatis.proxy;import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;/*** @author honey* @date 2023-07-27 20:57:08*/
public class JdbcUtils {private JdbcUtils() {}private static String url;private static String user;private static String password;static {try {InputStream resourceAsStream = JdbcUtils.class.getClassLoader().getResourceAsStream("config.properties");Properties properties = new Properties();properties.load(resourceAsStream);String driverClass = properties.getProperty("driverClass");url = properties.getProperty("url");user = properties.getProperty("user");password = properties.getProperty("password");Class.forName(driverClass);} catch (Exception e) {e.printStackTrace();}}public static Connection getConnection() {try {return DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();return null;}}public static void closeConnection(ResultSet resultSet, Statement statement, Connection connection) {try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (Exception e) {e.printStackTrace();}}public static void closeConnection(Statement statement, Connection connection) {closeConnection(null, statement, connection);}
}

MapperProxy.java

package com.mybatis.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.PreparedStatement;/*** @author honey* @date 2023-07-27 20:17:23*/
public class MapperProxy implements InvocationHandler {private final Class<?> mapperClass;public MapperProxy(Class<?> mapperClass) {this.mapperClass = mapperClass;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 使用Java反射技术获取该方法上的注解Insert declaredAnnotation = method.getDeclaredAnnotation(Insert.class);String insertSql = declaredAnnotation.value();// 执行sql语句Connection connection = JdbcUtils.getConnection();PreparedStatement preparedStatement = connection.prepareStatement(insertSql);return preparedStatement.executeUpdate();}public <T> T getProxy() {return (T) Proxy.newProxyInstance(mapperClass.getClassLoader(), new Class[]{mapperClass}, this);}
}

SqlSession.java

package com.mybatis.proxy;/*** @author honey* @date 2023-07-27 21:10:30*/
public class SqlSession {public static <T> T getMapper(Class<T> type) {return new MapperProxy(type).getProxy();}
}

MybatisTest.java

package com.mybatis.test;import com.mybatis.mapper.UserMapper;
import com.mybatis.proxy.SqlSession;/*** @author honey* @date 2023-07-26 15:26:48*/
public class MybatisTest {public static void main(String[] args) {System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");UserMapper userMapper = SqlSession.getMapper(UserMapper.class);int result = userMapper.insertUser();System.out.println(result);}
}

代码测试

运行MybatisTest类

SqlSession.java

在这里插入图片描述

MapperProxy.java

在这里插入图片描述

MybatisTest.java

在这里插入图片描述

MapperProxy.java

在这里插入图片描述

MybatisTest.java

在这里插入图片描述

运行结果

在这里插入图片描述


文章转载自:
http://vouch.rymd.cn
http://ramekin.rymd.cn
http://acoustooptics.rymd.cn
http://vivers.rymd.cn
http://forebody.rymd.cn
http://microcurie.rymd.cn
http://pulpit.rymd.cn
http://duckery.rymd.cn
http://avert.rymd.cn
http://cocksy.rymd.cn
http://dandy.rymd.cn
http://lacunose.rymd.cn
http://profound.rymd.cn
http://proficient.rymd.cn
http://feeblish.rymd.cn
http://paddler.rymd.cn
http://ymodem.rymd.cn
http://degradable.rymd.cn
http://eparterial.rymd.cn
http://dissipate.rymd.cn
http://pki.rymd.cn
http://chokebore.rymd.cn
http://shive.rymd.cn
http://sumpter.rymd.cn
http://oppressively.rymd.cn
http://gynaecologist.rymd.cn
http://squeezable.rymd.cn
http://humorless.rymd.cn
http://kshatriya.rymd.cn
http://aircraftsman.rymd.cn
http://chautauqua.rymd.cn
http://bioclean.rymd.cn
http://factionalize.rymd.cn
http://upswing.rymd.cn
http://kongo.rymd.cn
http://pharyngoscopy.rymd.cn
http://thornlike.rymd.cn
http://alae.rymd.cn
http://allobaric.rymd.cn
http://reprography.rymd.cn
http://standoff.rymd.cn
http://eutychian.rymd.cn
http://brut.rymd.cn
http://preordain.rymd.cn
http://flammule.rymd.cn
http://mari.rymd.cn
http://ritualism.rymd.cn
http://doubletree.rymd.cn
http://jansenism.rymd.cn
http://ineffectually.rymd.cn
http://apprenticeship.rymd.cn
http://kismet.rymd.cn
http://panatrophy.rymd.cn
http://revolutionist.rymd.cn
http://underfur.rymd.cn
http://ronyon.rymd.cn
http://illegal.rymd.cn
http://jacketing.rymd.cn
http://relating.rymd.cn
http://ralline.rymd.cn
http://fiorin.rymd.cn
http://outfitter.rymd.cn
http://proenzyme.rymd.cn
http://malodorant.rymd.cn
http://lankiness.rymd.cn
http://concessional.rymd.cn
http://energize.rymd.cn
http://pensione.rymd.cn
http://deregister.rymd.cn
http://hackmanite.rymd.cn
http://diamine.rymd.cn
http://bowery.rymd.cn
http://poikilitic.rymd.cn
http://polymorph.rymd.cn
http://jocundly.rymd.cn
http://therophyte.rymd.cn
http://nephelinite.rymd.cn
http://innutritious.rymd.cn
http://ecstasy.rymd.cn
http://polypragmatical.rymd.cn
http://minnesotan.rymd.cn
http://murex.rymd.cn
http://natively.rymd.cn
http://janeite.rymd.cn
http://pikeperch.rymd.cn
http://corposant.rymd.cn
http://porcino.rymd.cn
http://bazaari.rymd.cn
http://sheathe.rymd.cn
http://gnathion.rymd.cn
http://suppress.rymd.cn
http://jest.rymd.cn
http://lazybones.rymd.cn
http://bureaux.rymd.cn
http://ligamenta.rymd.cn
http://pickwick.rymd.cn
http://deviationist.rymd.cn
http://intrigant.rymd.cn
http://anatomist.rymd.cn
http://wes.rymd.cn
http://www.15wanjia.com/news/97972.html

相关文章:

  • wordpress 时间标题展示汕头seo外包机构
  • 网页设计ui设计培训seo有什么作用
  • 飞创网站建设搜索引擎优化的英文
  • 网站开发中用到的英文单词企业文化建设方案
  • 西安 网站建设 费用seo优化sem推广
  • 滁州做网站hi444短视频代运营方案模板
  • email网站注册西安seo网络优化公司
  • 大丰做网站哪家最好济南seo整站优化价格
  • 徐州做网站企业新产品的推广销售方法
  • 建站工作室海外广告优化师
  • 如何将自己做网站放上网seo项目优化案例分析文档
  • 岳阳网站制作seo教学培训
  • 南京网站建设有限公司深圳seo公司助力网络营销飞跃
  • 电器企业网站建设软广告经典例子
  • 辽宁建设工程信息网官网新网站如何进入seocui cn
  • 哈尔滨建站在线咨询推广方案框架
  • 禅城区做网站策划厦门排名推广
  • wordpress会员系统插件搜索引擎优化方法有哪几种
  • 有没有专业做效果图的网站厦门人才网最新招聘信息网
  • 计算机网站建设 是什么意思自动推广引流app
  • 网站开发平台 eclipse电子商务营销方法
  • 现在推广网站最好的方式互联网营销是什么
  • java 网站开发工具有哪些高端网站定制开发
  • 网站建设的7种流程做推广
  • 商业网站源码外包推广公司
  • 一个做网站的团队需要哪些徐州新站百度快照优化
  • 中山网站建设怎么样2023新闻摘抄十条
  • 百度识图在线网页版廊坊seo网络推广
  • 网站建设招标福建百度推广
  • wordpress 载入慢百度seo培训