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

网页设计制作网站教程广告片宣传片拍摄公司

网页设计制作网站教程,广告片宣传片拍摄公司,最好的淘宝网站建设,简单的个人主页网站制作简单手写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://www.yayakq.cn/news/836838/

相关文章:

  • 专做海岛游的网站铁路建设监理协会官方网站
  • 北京城建集团官网谷歌seo网站推广
  • 个人网站推广平台大全网站推广优化
  • 洛阳做网站公司在哪网站怎么做能快速有排名
  • 网站建设前端需要看什么书孝感建设银行网站
  • 怎么新建自己的网站施工企业管理协会
  • 为什么有的网站点不开镇江网站排名优化费用
  • 外包公司做网站怎么样网站程序源码上传到空间打开网站首页还是显示的程序原源代码
  • 我先做个网站怎么做的电商网站的建设与安全
  • 同ip怎么做不同的网站义乌小商品市场网
  • 福田做网站需要多少钱济南智能网站建设费用
  • 扬州广陵区城乡建设局网站互联网巨头是哪几家
  • iis5.1怎么发布网站网站开发语言包括哪些
  • 如何用VS2017做网站株洲在线论坛伴你生活每一天
  • 湖北省和城乡建设厅官方网站石家庄教育学会网站建设
  • 怎么做好网站营销山西网站开发建设
  • 旅游主题网站模板郑州郑东新区
  • 登封做网站优化网络外贸推广
  • 建设mylove卡网站望野眼上海话
  • 可以做行程的网站浙浙江省建设信息港
  • 给客户建完美网站wordpress做什么网站好
  • 数据型网站 建设方案会计证初级报考时间2023年报名
  • 网站开发与软件开发区别业务员客户管理软件
  • 做网站工资高吗centos网站开发
  • 网站和浏览器不兼容网络考试
  • 如何做网站平台关注济南 网站开发
  • 网站开发及建设赔偿条款怎么样自己开网站
  • 网站维护的意义企业网站源码去一品资源网
  • 太原网站优化怎么做网站建设与管理 十四五国规教材
  • 上海高端网站建设定制有什么网站可以做ppt