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();
}
}
}
分享到:
相关推荐
不借助其他任何框架,从最底层开始着手,用最简单的代码,将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...
手写实现mybatis,mybatis处理流程图,mybatis实现需要的几个函数,各个函数的调用。
SpringBoot mybatis 乐观锁重试机制代码实现 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。...
Mybatis读写分离,支持n多的从库,简单的负载均衡。数据库是mysql,采用druid连接池。...如果只有主库的话,那么会创建两个地址相同的连接池,写主库,读从库。 注意:没有使用Spring,只用到了Mybatis。
标题“mybatis demo mybatis 实例”指的是一个MyBatis的学习示例项目,这个项目可能是为了演示如何在实际开发中运用MyBatis框架。通过这个示例,开发者可以了解MyBatis的基本用法,包括配置文件的编写、Mapper接口的...
MyBatis是一个流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码绑定,提供了一种动态SQL的功能。在深入理解MyBatis之前,我们先来了解一下`mybatis-3-mybatis-3.4.6`和`mybatisTest`...
手写迷你mybatis框架,里面使用了mybatis设计模式和框架
本篇文章将详细介绍两个针对MyBatis框架的IntelliJ IDEA插件——MyBatisCodeHelper-Pro和MybatisX,它们都是为了提升MyBatis开发体验而设计的。 首先,我们来看MyBatisCodeHelper-Pro。这款插件是专为MyBatis开发者...
标题中的“mybatis与spring融合时使用的两个包”指的是在集成MyBatis和Spring框架时,需要引入的两个关键依赖库:mybatis-3.2.2.jar和mybatis-spring-1.2.1.jar。这两个库是实现MyBatis与Spring无缝协作的核心组件,...
手写mybatis实现,剖析mybatis底层原理
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增 强不做改变,为简化开发、提高效率而生。 特性:无侵入、损耗小、强大的CRUD操作,支持lambda 形势调用、支持多种数据库,支持主键...
使用MyBatis访问数据库需要首先创建一个SqlSessionFactory,然后使用SqlSessionFactory创建一个SqlSession,最后使用SqlSession执行数据库访问操作。MyBatis提供了多种数据库访问方式,包括INSERT、UPDATE、DELETE、...
4. **注解方式**:除了XML配置,MyBatis也支持注解方式进行映射,可以直接在DAO接口的方法上使用@Select、@Insert、@Update、@Delete等注解来写SQL。 5. **实体类(POJO)**:在项目中,我们通常会为每张数据库表...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、...
springboot+mybatis+mysql实现读写分离 先在建好mysql主从数据库的配置,然后在代码中根据读写分离或强制读取master数据库中的数据 mysql数据库设置主从,参考: ...
MyBatis和MyBatis-Spring是两个在Java开发中常用的框架,主要用于简化数据库操作和实现Spring框架的无缝集成。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和...
每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration...
"mybatis_plugin 2.92" 提供的可能是对 MyBatis 插件框架的一个特定版本的实现或增强,版本号 2.9.2 暗示这是一个相对成熟的发布,可能修复了之前版本的若干问题并引入了一些新特性。 在 MyBatis 中,插件主要通过...
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 ...