`
dragonhunter
  • 浏览: 33420 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mybatis如何实现注解sql的简单例子

    博客分类:
  • java
阅读更多

最近马上要开动项目了,后台是用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的实现

    总结来说,MyBatis注解配置提供了一种简洁的SQL映射方式,而动态SQL功能则极大地增强了查询的灵活性。在开发过程中,熟练掌握这两点,可以提升开发效率,同时使代码更加易于理解和维护。通过实践项目"MyBatisPro12...

    MyBatis 采用注解方式实现CRUD

    下面我们将详细介绍如何使用注解实现MyBatis的CRUD。 1. **注解简介** MyBatis 的注解主要包括 `@Select`、`@Insert`、`@Update` 和 `@Delete`,它们分别用于定义查询、插入、更新和删除操作的SQL语句。此外,还有...

    Spring mvc 和 mybatis 整合,mybatis使用注解模式

    总结来说,Spring MVC与MyBatis的整合使得我们能够充分利用两者的优势:Spring MVC提供了强大的MVC架构和依赖注入,而MyBatis的注解模式则简化了SQL映射。通过这种方式,开发者可以更专注于业务逻辑,提高开发效率和...

    mybatis基本配置及例子.zip_mybatis_mybatis sql server_mybatis 实例_mybati

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。本资料包含MyBatis的基本配置和实例,适合初学者学习,特别关注与SQL ...

    Mybatis基于注解形式的sql语句生成实例代码

    在Mybatis中,使用注解形式可以将sql语句与java代码紧密耦合,实现了sql语句的动态生成,从而提高了开发效率和代码可读性。这种方式主要通过使用Java注解来描述sql语句的结构和内容,然后使用Mybatis框架提供的...

    springboot集成mybatis的注解方式完整例子

    通过`@Select`等MyBatis注解,我们可以在接口方法上直接编写SQL语句,实现数据库操作。 在实际项目中,还可以通过`@MapperScan`注解扫描多个Mapper接口包,以及使用`@Transactional`注解实现事务管理。同时,...

    Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    本文主要讲解如何使用注解实现动态SQL和参数传递等常见功能。 首先,Spring Boot与Mybatis的整合通常通过添加相关依赖、配置Mybatis的配置文件(如`application.yml`或`application.properties`)以及创建Mapper...

    spring_struts2_mybatis_注解的小实例

    在本项目"spring_struts2_mybatis_注解的小实例"中,我们将深入探讨如何使用SSM(Spring、Struts2、MyBatis)框架来实现一个基础的增删改查(CRUD)功能。SSM是Java Web开发中常用的三大组件,它们各自负责不同的...

    Spring3Struts2Mybatis3注解开发实例

    在Mybatis3中,`@Select`、`@Insert`、`@Update`和`@Delete`等注解可以直接在接口方法上声明SQL语句,简化了Mapper接口的实现。同时,`@Results`和`@ResultMap`可以定义结果映射,方便地将查询结果转化为Java对象。 ...

    mybatis中注解映射SQL示例代码

    MyBatis中注解映射SQL示例代码 MyBatis是一款流行的持久层框架,它提供了多种方式来映射SQL语句,其中之一便是使用注解的方式。下面我们将通过示例代码来介绍MyBatis中注解映射SQL的相关知识点。 结果集分页 在...

    springMVC_mybatis_注解的小实例实现增删改查

    总结来说,SpringMVC和MyBatis结合使用,通过注解方式实现的增删改查操作既简单又高效。这种方式极大地降低了开发复杂性,提高了代码的可读性和可维护性。在实际项目中,我们还可以结合Spring Boot,进一步简化配置...

    spring mvc mybatis 注解版

    MyBatis注解简化了传统的XML配置,可以在Mapper接口和实现类中直接定义SQL语句。主要的注解有: 1. `@Select`:用于查询操作,可以包含一个SQL查询语句。 2. `@Insert`:插入数据,可以包含一个INSERT语句,支持...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 Spring与MyBatis的整合,一方面利用Spring管理MyBatis的...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录(第五天)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注解示例

    这个“SpringMVC+MyBatis+MySql注解示例”项目提供了一个完整的SSM整合实例,你可以下载并研究其代码结构和配置文件,从而深入理解这三个框架如何协同工作,为你的开发工作提供便利。通过这个示例,你可以学习到如何...

    Mybatis基于注解和XML两种方式的单(多)表操作 源码。(使用MySQL数据库)

    本项目涵盖了 Mybatis 基于注解和 XML 的两种方式,来实现对单表和多表的操作,特别适合初学者进行学习和实践。 首先,我们来探讨基于注解的单表操作。在 Mybatis 中,我们可以使用 @Mapper 和 @Select、@Insert、@...

    mybatis 注解+配置文件方式完整例子

    在本示例中,我们将探讨如何结合注解和配置文件使用MyBatis,包括数据库的SQL文件、方法的注解等关键部分。 首先,我们需要在项目中引入MyBatis的依赖库。通常,这可以通过在`pom.xml`或`build.gradle`文件中添加...

    springmvc+mybatis+sqlserver小例子

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在这个"springmvc+mybatis+sqlserver小例子"中,开发者可能会遇到以下几...

    SpringMVC+Mybatis+SQLServer整合源码 含数据库文件

    接下来,Mybatis允许开发者直接编写SQL语句,通过XML配置文件或注解将SQL与Java代码分离,提高了代码的可读性和可维护性。Mybatis的主要组件包括SqlSessionFactory、SqlSession和Mapper接口。SqlSessionFactory是...

Global site tag (gtag.js) - Google Analytics