最近马上要开动项目了,后台是用mybatis,开始研究mybatis,发现
public interface SqlInterface { @MySelect("select * from t_user where id = 1") public UserPO select(); }
这种实现,感觉蛮有意思的。于是自己模拟写了一个,这里要求读者要有java注解,java反射,代理,java对数据库的操作等要求。如果看不懂代码的话,可以先了解下上面提到的java基础。
首先在mysql的test建个表t_user,字段id,username,password,插入一条数据1,123,123。
一个PO对象UserPO
public class UserPO { public long id; public String userName; public String password;
一个select的注解接口
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface MySelect { public String value(); }
一个sql的接口
public interface SqlInterface { @MySelect("select * from t_user where id = 1") public UserPO select(); }
由于比较懒,就直接把代理和test类写在一起
public class TestMain { public static void main(String[] args) { try { //代理 SqlInterface sqlInterface = (SqlInterface) Proxy.newProxyInstance(SqlInterface.class.getClassLoader(), new Class[] { SqlInterface.class }, new InvocationHandler() { public Object invoke(Object arg0, Method method, Object[] arg2) throws Throwable { // TODO Auto-generated method stub //获取注解的sql语句 String sqlString = null; if (method.getAnnotation(MySelect.class) != null) { sqlString = method.getAnnotation(MySelect.class).value(); System.out.println(sqlString); } String databaseDriver = "com.mysql.jdbc.Driver"; Connection conn = null; ResultSet rs = null; try { Class.forName(databaseDriver); conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8", "root", "root"); PreparedStatement stmt = conn.prepareStatement(sqlString); rs = stmt.executeQuery(); } catch (Exception e) { e.printStackTrace(); } // 获取数据库字段名称 ResultSetMetaData rsmd = rs.getMetaData(); String[] dataMetas = new String[rsmd.getColumnCount()]; int colcount = rsmd.getColumnCount(); for (int i = 1; i <= colcount; i++) { //dataMetas没有index为0的,从1开始 System.out.println(rsmd.getColumnClassName(i)); dataMetas[i-1] = rsmd.getColumnName(i); } // 获取返回值类型,就是userPO Object o = method.getReturnType().newInstance(); while (rs.next()) { Field[] fields = o.getClass().getDeclaredFields(); for (Field field : fields) { String fieldname = field.getName(); for (String dateMeta : dataMetas) { if (fieldname.toLowerCase().equals(dateMeta)) { field.set(o, rs.getObject(dateMeta)); break; } } } } try { rs.close(); conn.close(); } catch (Exception e) { } return o; } }); UserPO po = sqlInterface.select(); System.out.println(po.getUserName()); } catch (Exception e) { e.printStackTrace(); } } }
这里还是有很多问题的,比如查询带参数,如果返回对象是null或者List,如何处理。
由于只是自己写的一个demo,比较烂,特别是命名和结构,大家了解下原理就好了。
注意run的时候需要mysql-connector-java-5.1.25.jar
相关推荐
总结来说,MyBatis注解配置提供了一种简洁的SQL映射方式,而动态SQL功能则极大地增强了查询的灵活性。在开发过程中,熟练掌握这两点,可以提升开发效率,同时使代码更加易于理解和维护。通过实践项目"MyBatisPro12...
下面我们将详细介绍如何使用注解实现MyBatis的CRUD。 1. **注解简介** MyBatis 的注解主要包括 `@Select`、`@Insert`、`@Update` 和 `@Delete`,它们分别用于定义查询、插入、更新和删除操作的SQL语句。此外,还有...
总结来说,Spring MVC与MyBatis的整合使得我们能够充分利用两者的优势:Spring MVC提供了强大的MVC架构和依赖注入,而MyBatis的注解模式则简化了SQL映射。通过这种方式,开发者可以更专注于业务逻辑,提高开发效率和...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。本资料包含MyBatis的基本配置和实例,适合初学者学习,特别关注与SQL ...
在Mybatis中,使用注解形式可以将sql语句与java代码紧密耦合,实现了sql语句的动态生成,从而提高了开发效率和代码可读性。这种方式主要通过使用Java注解来描述sql语句的结构和内容,然后使用Mybatis框架提供的...
通过`@Select`等MyBatis注解,我们可以在接口方法上直接编写SQL语句,实现数据库操作。 在实际项目中,还可以通过`@MapperScan`注解扫描多个Mapper接口包,以及使用`@Transactional`注解实现事务管理。同时,...
本文主要讲解如何使用注解实现动态SQL和参数传递等常见功能。 首先,Spring Boot与Mybatis的整合通常通过添加相关依赖、配置Mybatis的配置文件(如`application.yml`或`application.properties`)以及创建Mapper...
在本项目"spring_struts2_mybatis_注解的小实例"中,我们将深入探讨如何使用SSM(Spring、Struts2、MyBatis)框架来实现一个基础的增删改查(CRUD)功能。SSM是Java Web开发中常用的三大组件,它们各自负责不同的...
在Mybatis3中,`@Select`、`@Insert`、`@Update`和`@Delete`等注解可以直接在接口方法上声明SQL语句,简化了Mapper接口的实现。同时,`@Results`和`@ResultMap`可以定义结果映射,方便地将查询结果转化为Java对象。 ...
MyBatis中注解映射SQL示例代码 MyBatis是一款流行的持久层框架,它提供了多种方式来映射SQL语句,其中之一便是使用注解的方式。下面我们将通过示例代码来介绍MyBatis中注解映射SQL的相关知识点。 结果集分页 在...
总结来说,SpringMVC和MyBatis结合使用,通过注解方式实现的增删改查操作既简单又高效。这种方式极大地降低了开发复杂性,提高了代码的可读性和可维护性。在实际项目中,我们还可以结合Spring Boot,进一步简化配置...
MyBatis注解简化了传统的XML配置,可以在Mapper接口和实现类中直接定义SQL语句。主要的注解有: 1. `@Select`:用于查询操作,可以包含一个SQL查询语句。 2. `@Insert`:插入数据,可以包含一个INSERT语句,支持...
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 Spring与MyBatis的整合,一方面利用Spring管理MyBatis的...
SSM框架的学习与应用-MyBatis的注解开发实例 1.包含以下项目所需要的架包,junit-4.7 log4j-1.2.16 mybatis-3.2.2-sources mybatis-3.3.0 mysql-connector-java-5.1.0-bin mysql-connector-java-8.0.26 2.使用了Dao....
这个“SpringMVC+MyBatis+MySql注解示例”项目提供了一个完整的SSM整合实例,你可以下载并研究其代码结构和配置文件,从而深入理解这三个框架如何协同工作,为你的开发工作提供便利。通过这个示例,你可以学习到如何...
本项目涵盖了 Mybatis 基于注解和 XML 的两种方式,来实现对单表和多表的操作,特别适合初学者进行学习和实践。 首先,我们来探讨基于注解的单表操作。在 Mybatis 中,我们可以使用 @Mapper 和 @Select、@Insert、@...
在本示例中,我们将探讨如何结合注解和配置文件使用MyBatis,包括数据库的SQL文件、方法的注解等关键部分。 首先,我们需要在项目中引入MyBatis的依赖库。通常,这可以通过在`pom.xml`或`build.gradle`文件中添加...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在这个"springmvc+mybatis+sqlserver小例子"中,开发者可能会遇到以下几...
接下来,Mybatis允许开发者直接编写SQL语句,通过XML配置文件或注解将SQL与Java代码分离,提高了代码的可读性和可维护性。Mybatis的主要组件包括SqlSessionFactory、SqlSession和Mapper接口。SqlSessionFactory是...