`
xlaohe1
  • 浏览: 128963 次
  • 性别: Icon_minigender_1
  • 来自: 来处
社区版块
存档分类
最新评论

试着写了个MyBatis的GenericDao

阅读更多
Interface:
package com.xlaohe1.example.dao;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, PK extends Serializable> {
	
	public List<T> findAll();
	
	public void add(T t);
	
	public void delete(PK id);
	
	public T findById(PK id);

	public void update(T t);
	
}


Implments:
package com.xlaohe1.example.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.xlaohe1.example.dao.GenericDao;
import com.xlaohe1.example.util.Util;

public class GenericDaoImpl<T, PK extends Serializable> implements GenericDao<T, PK> {
	/*private static SqlSession session;
	static {
		session = Util.getSqlSessionFactory().openSession();
	}*/
	Class<T> clazz;
	@SuppressWarnings("unchecked")
	public GenericDaoImpl() {
		clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}
	@SuppressWarnings("unchecked")
	public List<T> findAll() {
		SqlSession session = Util.getSqlSessionFactory().openSession();
		List<T> lists = null;
		try {
			StringBuffer sb = new StringBuffer(clazz.getName());
			sb.append("Mapper").append(".find");
			lists = session.selectList(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
		return lists;
	}

	public void add(T t) {
		SqlSession session = Util.getSqlSessionFactory().openSession();
		try {
			StringBuffer sb = new StringBuffer(clazz.getName());
			sb.append("Mapper").append(".insertOne");
			session.insert(sb.toString(), t);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}

	
	public void delete(PK id) {
		SqlSession session = Util.getSqlSessionFactory().openSession();
		try {
			StringBuffer sb = new StringBuffer(clazz.getName());
			sb.append("Mapper").append(".del");
			session.insert(sb.toString(), id);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}

	
	@SuppressWarnings("unchecked")
	public T findById(PK id) {
		SqlSession session = Util.getSqlSessionFactory().openSession();
		T t = null;
		try {
			StringBuffer sb = new StringBuffer(clazz.getName());
			sb.append("Mapper").append(".selectOne");
			t = (T)session.selectOne(sb.toString(), id);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
		return t;
	}

	public void update(T t) {
		SqlSession session = Util.getSqlSessionFactory().openSession();
		try {
			StringBuffer sb = new StringBuffer(clazz.getName());
			sb.append("Mapper").append(".update");
			session.update(sb.toString(), t);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}


}



分享到:
评论
2 楼 小小诺 2013-08-02  
提供一下代码下载呢?
1 楼 小小诺 2013-08-02  
最好提供一下代码呀??

相关推荐

    手写mybatis框架源码由浅入深

    不借助其他任何框架,从最底层开始着手,用最简单的代码,将mybatis的底层框架,手写出来,让你对mybatis有一个更加深刻和直观的理解 详见:https://blog.csdn.net/weixin_43860634/article/details/127177579

    手写mybatis核心流程代码demo

    手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis...

    手写mybatis单表查询实现-cnblog.md

    手写实现mybatis,mybatis处理流程图,mybatis实现需要的几个函数,各个函数的调用。

    SpringBoot mybatis 乐观锁重试机制代码实现

    SpringBoot mybatis 乐观锁重试机制代码实现 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。...

    Mybatis读写分离 mysql数据库 Druid连接池

    Mybatis读写分离,支持n多的从库,简单的负载均衡。数据库是mysql,采用druid连接池。...如果只有主库的话,那么会创建两个地址相同的连接池,写主库,读从库。 注意:没有使用Spring,只用到了Mybatis。

    mybatis demo mybatis 实例

    标题“mybatis demo mybatis 实例”指的是一个MyBatis的学习示例项目,这个项目可能是为了演示如何在实际开发中运用MyBatis框架。通过这个示例,开发者可以了解MyBatis的基本用法,包括配置文件的编写、Mapper接口的...

    mybatis源码+练习代码+手写练习

    MyBatis是一个流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码绑定,提供了一种动态SQL的功能。在深入理解MyBatis之前,我们先来了解一下`mybatis-3-mybatis-3.4.6`和`mybatisTest`...

    手写迷你mybatis框架,里面使用了mybatis设计模式和框架.zip

    手写迷你mybatis框架,里面使用了mybatis设计模式和框架

    IDEA的MyBatis插件两个

    本篇文章将详细介绍两个针对MyBatis框架的IntelliJ IDEA插件——MyBatisCodeHelper-Pro和MybatisX,它们都是为了提升MyBatis开发体验而设计的。 首先,我们来看MyBatisCodeHelper-Pro。这款插件是专为MyBatis开发者...

    mybatis与spring融合时使用的两个包

    标题中的“mybatis与spring融合时使用的两个包”指的是在集成MyBatis和Spring框架时,需要引入的两个关键依赖库:mybatis-3.2.2.jar和mybatis-spring-1.2.1.jar。这两个库是实现MyBatis与Spring无缝协作的核心组件,...

    手写mybatis实现,剖析mybatis底层原理

    手写mybatis实现,剖析mybatis底层原理

    MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar

    MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增 强不做改变,为简化开发、提高效率而生。 特性:无侵入、损耗小、强大的CRUD操作,支持lambda 形势调用、支持多种数据库,支持主键...

    MyBatis源码分析.pdf

    使用MyBatis访问数据库需要首先创建一个SqlSessionFactory,然后使用SqlSessionFactory创建一个SqlSession,最后使用SqlSession执行数据库访问操作。MyBatis提供了多种数据库访问方式,包括INSERT、UPDATE、DELETE、...

    MyBatis入门实例源码

    4. **注解方式**:除了XML配置,MyBatis也支持注解方式进行映射,可以直接在DAO接口的方法上使用@Select、@Insert、@Update、@Delete等注解来写SQL。 5. **实体类(POJO)**:在项目中,我们通常会为每张数据库表...

    mybatis-3-mybatis-3.2.6

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、...

    springboot+mybatis+mysql实现读写分离.zip

    springboot+mybatis+mysql实现读写分离 先在建好mysql主从数据库的配置,然后在代码中根据读写分离或强制读取master数据库中的数据 mysql数据库设置主从,参考: ...

    mybatis,mybatis-spring

    MyBatis和MyBatis-Spring是两个在Java开发中常用的框架,主要用于简化数据库操作和实现Spring框架的无缝集成。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和...

    mybatis的中文api文档

    每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration...

    mybatis_plugin 2.92

    "mybatis_plugin 2.92" 提供的可能是对 MyBatis 插件框架的一个特定版本的实现或增强,版本号 2.9.2 暗示这是一个相对成熟的发布,可能修复了之前版本的若干问题并引入了一些新特性。 在 MyBatis 中,插件主要通过...

    MyBatis 官方笔记 + MyBatis 3.5.10 官方英文文档

    MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 ...

Global site tag (gtag.js) - Google Analytics