# MiniJdbc **Repository Path**: handong890/MiniJdbc ## Basic Information - **Project Name**: MiniJdbc - **Description**: 基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 65 - **Created**: 2016-01-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## MiniJdbc - 介绍&使用说明 ## sxjun @2016-01-15 ## 一、MiniJdbc介绍 **1、MiniJdbc**只是针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的开发工作。 基于spring jdbc的RowMapper自动实现对象映射,大部分功能已经由spring jdbc实现了。 **2、BaseEntity的设计:**集成了JFinal的Record的优点,对字段的大小写不敏感。 **3、RowMapper的改造:**集成了SBORM的优点,对BaseEntityRowMapper做了些修改。 **4、数据库的支持:**目前已经支持MySql、SqlServer、Oracle数据库,屏蔽了数据库的语法差异。 **5.强弱类型完美结合:**例如,在数据库插入一个用户: ```java //强类型编程 User user = new User();//新建User对象,表名和主键在实体注解中定义 user.setName("admin").setPassword("000000");//设置数据 dao.insert(user);//保存用户 //弱类型编程 Record record = new Record("user","id");//新建记录对象,构造函数传表名和主键 record.set("name", "admin").set("password", "000000");//设置数据 dao.insert(record);//保存用户 ``` **6.大小写不敏感:**弱类型编程中,对应表、字段的大小写不敏感。 ```java //设置name字段,可以小写 record.set("name", "admin"); //也可以大写 record.set("NAME", "admin"); //还可以随意写 record.set("NaMe", "admin"); ``` ##二、MiniDao全部接口 接口中强类型和弱类型都使用统一的DAO接口; [Record.class(弱类型);BaseEntity.class(强类型基类)] ```java //插入数据 public int insert(T record); //删除数据 public int delete(T record); //删除数据 public int deleteById(Class clazz, Object primaryKey); //更新数据 public int update(T record); //执行sql语句 public int execute(String sql, Object... paras); //根据ID查找单个实体 public T findById(Class clazz, Object primaryKey); //查找单条记录 public T find(String sql, Class clazz, Object... args); //查找一个list public List findList(String sql, Class clazz, Object... args); //分页查找一个list public List paginate(String sql,int pageNumber, int pageSize, Class clazz, Object... args); //获取分页Record数据 public PageResult paginateResult(String sql, int pageNumber, int pageSize, Class clazz, Object... args); ``` ## 三、使用说明 ###1、配置规范 **配置文件** ***datasource配置包括3部分***:扫描包、数据源、动态数据源,和普通的spring配置一致; (连接池使用看个人喜好): ```java ``` ####动态数据源配置说明#### ***defaultTargetDataSource***:配置默认数据源; ***targetDataSources***:配置数据源,key为数据源名称(任意值),value-ref指向数据源; ***entityPackage***:配置实体所在的包,多个包用逗号分隔; ####配置扫描说明#### 主要功能是初始化Entity的RowMapper,以及table、id等映射; ```java ``` 如下配置如果配置了则会在初始化的时候将实体信息加载到内存,如果不配置则会动态加载到内存(为提高程序启动的效率,建议开发阶段不要配置) ```java ``` ###2、实体结构规范 如果没有实体可以直接用record弱类型编程,如果需要强类型编程,实体结构必须要按如下规范编写: ```java @Entity(table="users",id="id",strategy=StrategyType.UUID)// 绑定表名和主键 public class User extends BaseEntity implements Serializable { public static final long serialVersionUID = 840187169979836738L; public static final class Columns { public static final String id = "id"; public static final String name = "name"; public static final String password = "password"; public static final String createTime = "createTime"; public static final String type = "type"; } public User setId (String id) { super.set(Columns.id, id); return this; } public String getId () { return super.get(Columns.id); } public User setName (String name) { super.set(Columns.name, name); return this; } public String getName () { return super.get(Columns.name); } // getter & setter ... } ``` ####实体注解说明#### **Entity**,配置对应的table和id值,以及策略,如果不配置需要在开发时手动设置; ***table***(String):设置数据库表名(必填); ***id***(String[]):设置数据库主键(必填); ***strategy***(StrategyType):主键的生成策略,目前支持如下策略; StrategyType.NULL 默认需要手动设置主键值 StrategyType.AUTO 主键值自动增长 StrategyType.UUID 自动生成system.uuid作为主键 ***ignore_field***(String[]):插入、修改都要排除的数据库字段; ***ignore_insert_field***(String[]):插入时要排除的数据库字段; ***ignore_update_field***(String[]):更新时要排除的数据库字段; ***not_null_field***(String[]):不许为Null的字段. ##四、例子(参考代码中的example包,可以使用user.sql创建测试数据库及表结构) **增删改的代码示例:** ```java /** * 测试插入强类型实例User */ public static int testInsert() { User user = new User(); user.setCreateTime(new Date()) .setName("username") .setType(new Random().nextInt(5)); return dao.insert(user); } /** * 测试插入强类型实例Record */ public static int testInsert2() { Record record = new Record("users","id"); record.set("id", new Random().nextInt(100)) .set("name", "username") .set("type", new Random().nextInt(5)).set("password", "000000"); return dao.insert(record); } /** * 更新强类型实例 * @return */ public static int testUpdate() { User user = new User(); user.setName("hello_update"); return dao.update(user); } /** * 更新弱类型记录 * @return */ public static int testUpdateRecord() { Record record = new Record(); record.setTableName("users"); record.setPrimaryKeys("id"); record.set("id", "8").set("name", "record_update"); return dao.update(record); } /** * 删除强类型实体 * @return */ public static int testDelete() { User user = new User(); user.setId("1"); return dao.delete(user); } /** * 删除弱类型记录 * @return */ public static int testDeleteRecord() { Record record = new Record(); record.setTableName("users"); record.setPrimaryKeys("id"); record.set("id", "8"); return dao.delete(record); } ``` **查询分页代码示例:** ```java /** * 无参强类型分页 */ public static List testGetPage() { String sql = "select * from users where id < 8 order by id desc"; List users = dao.paginate(sql, 2, 2, User.class); return users; } /** * 有参强类型分页 */ public static List testGetPage2() { String sql = "select * from users where id < ? order by id desc"; List users = dao.paginate(sql, 2, 2, User.class, 18); return users; } /** * 无参弱类型分页 */ public static List testGetPage3() { String sql = "select id,name from users where id < 8 order by id desc"; return dao.paginate(sql, 2, 2,Record.class); } /** * 有参弱类型分页 */ public static List testGetPage4() { String sql = "select id,name from users where id < ? order by id desc"; return dao.paginate(sql, 2, 2, Record.class, 88); } ``` **查询的代码示例:** ```java /** * 无参查询字符串 * @return */ public static String testQueryString() { return dao.find("select name from users where id=10",String.class); } /** * 有参查询字符串 * @return */ public static String testQueryString2() { return dao.find("select name from users where id=?",String.class, 23); } /** * 根据id获取强类型实例User * @return */ public static User getObject1() { User user = dao.findById(User.class, 22); return user; } /** * 无参获取强类型实例User * @return */ public static User getObject2() { User user = dao.find("select * from users where id=4", User.class); return user; } /** * 有参获取强类型实例User * @return */ public static User getObject3() { User user = dao.find("select * from users where id=? and name=?", User.class, 2, "helelo"); return user; } /** * 无参获取弱类型记录 * @return */ public static Record getRecord() { Record record = dao.find("select name,type from users where id=3", Record.class); return record; } /** * 有参获取弱类型记录 * @return */ public static Record getRecord2() { Record record = dao.find("select name,type from users where id =?", Record.class, 3); return record; } /** * 无参获取强类型实例列表 * @return */ public static List getList() { List users = dao.findList("select * from users where id<99", User.class); return users; } /** * 有参获取强类型实例列表 * @return */ public static List getList2() { List users = dao.findList("select * from users where id getRecordList() { List users = dao.findList("select name,type from users where id<777", Record.class); return users; } /** * 有参获取弱类型记录列表 * @return */ public static List getRecordList2() { List result = null; result = dao.findList("select name ,type from users where id