Java 数据库框架

在我学习java数据库框架的时候,第一个用的是Hibernate,但是到现在,我可能已经快忘记它了,毕竟快两年没有碰的东西,后来一直再用MyBatis.因为它简单.

但是本文不会介绍它们俩,介绍一个我的MySql框架,但是我却不知道叫它什么.暂时就叫他HMySql吧.

初心是增强对java 反射、注解的理解,所设计的,还有很多bug,望指出,源码后续会给出

用途:大一快课设了.很多同学还不会jdbc操作,希望可以借助它,完成课设

下载链接

https://www.houxinlin.com/mysql-frame.jar

由于是学生,没有钱去增加带宽,下载速度可能很慢,嗯~~~是很慢很慢的那种慢,还望耐心等待

00 集成到项目中

1:在项目根目录下新建lib文件夹,把jar包粘贴进去,右击jar包----Build Path---Add to Build Path

2:集成jar后,还需要在项目根目录下创建一个h-mysql.xml文件,用来配置数据库,配置如下

<?xml version="1.0" encoding="utf-8"?>
<h-mysql>
<database-cnf>
<driver>com.mysql.cj.jdbc.Driver</driver>
<user-name>root</user-name>
<user-pass>hxl495594..</user-pass>
<ip>localhost</ip>
<database-name>homework1</database-name>
</database-cnf> <configure>
<!-- 是否打开Sql执行日志 -->
<logger>true</logger>
</configure> </h-mysql>

(这是所有的配置信息了,它看起来很少)

01 创建数据表

DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
`age` tinyint(4) UNSIGNED NULL DEFAULT NULL COMMENT '年龄',
`blance` decimal(9, 2) NULL DEFAULT NULL COMMENT '余额',
`is_vip` enum('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否VIP',
`register_timer` datetime(0) NULL DEFAULT NULL COMMENT '注册时间',
`girl_friend` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '女朋友名字',
`phone_number` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 121 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;

02 编写Java bean

这里有几个需要注意的:

1:需要再类上加@TableName注解,用来映射表名

2:需要继承BeanSupport类,

3:主键上要增加@PrimaryKey

4:@FieldName表示字段对应的数据表中的列名

import com.houxinlin.annotation.FieldName;
import com.houxinlin.annotation.PrimaryKey;
import com.houxinlin.annotation.TableName;
import com.houxinlin.dbimpl.BeanSupport;
@TableName(tabName="tb_user")
public class UserMapp extends BeanSupport{
@PrimaryKey
@FieldName(fieldName="id")
private int id; @FieldName(fieldName="user_name")
private String userName; @FieldName(fieldName="age")
private int age; @FieldName(fieldName="blance")
private BigDecimal blance; @FieldName(fieldName="is_vip")
private String isVip; @FieldName(fieldName="register_timer")
private String registerTimer; @FieldName(fieldName="girl_friend")
private String grilFriendName; public UserMapp() {
super();
} @FieldName(fieldName="phone_number")
private String phoneNumber; public UserMapp(int id, String userName, int age, BigDecimal blance, String isVip, String registerTimer,
String grilFriendName, String phoneNumber) {
super();
this.id = id;
this.userName = userName;
this.age = age;
this.blance = blance;
this.isVip = isVip;
this.registerTimer = registerTimer;
this.grilFriendName = grilFriendName;
this.phoneNumber = phoneNumber;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public BigDecimal getBlance() {
return blance;
} public void setBlance(BigDecimal blance) {
this.blance = blance;
} public String getIsVip() {
return isVip;
} public void setIsVip(String isVip) {
this.isVip = isVip;
} public String getRegisterTimer() {
return registerTimer;
} public void setRegisterTimer(String registerTimer) {
this.registerTimer = registerTimer;
} public String getGrilFriendName() {
return grilFriendName;
} public void setGrilFriendName(String grilFriendName) {
this.grilFriendName = grilFriendName;
} public String getPhoneNumber() {
return phoneNumber;
} public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
} @Override
public String toString() {
return toJson(true);
} }

03 测试

需要注意的是:

1:必须调用HDbManager.getInstance().init();进行初始化,如果没有创建h-mysql.xml文件.它可能会报异常.


import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import com.houxinlin.db.HDbManager;
import com.houxinlin.dbimpl.HxlDb;
import com.houxinlin.frame.FilterCondition; public class Main {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:dd"); public static void main(String[] args) {
/**
* 初始化数据库 你必须这么做!!!!
*/
HDbManager.getInstance().init(); UserMapp user = new UserMapp(0, "侯鑫林", 20, new BigDecimal("666"), "Y", sdf.format(new Date()), "乔羽祥",
"11111111111"); // 保存 必须继承BeanSupport,同比要有一个空构造方法
user.save(); /**
* 查找所有用户
*/
List<UserMapp> lists = HxlDb.findAll(UserMapp.class);
System.out.println("全部用户---->" + lists); //根据条件查找
UserMapp us=null;
us=HxlDb.findOneByCondition(UserMapp.class, new FilterCondition.Builder().addEquseToCodition("user_name", "侯鑫林").build());
System.out.println("查找指定姓名----->"+us); //根据Id查找
us=HxlDb.findByPrimaryId(UserMapp.class, 119);
System.out.println("根据ID查找----->"+us); //修改
us.setBlance(new BigDecimal("8888"));
HxlDb.upDataByPrimaryId(us, 118);
System.out.println("修改后的值----->"+HxlDb.findByPrimaryId(UserMapp.class, 119)); /**
* 根据条件删除年龄大于10岁的人
*/
HxlDb.deleteByCondition(UserMapp.class, new FilterCondition.Builder().addGreaterThan("age", 10).build());
System.out.println(HxlDb.findAll(UserMapp.class)); } }

04 异常处理

1:如果java bean中没有空构造方法,可能会报一下错误

解决办法:增加空构造方法

2:没有在项目根目录下新建h-mysql.xml文件

解决办法:建立h-mysql.xml

3:配置文件节点名错误

解决办法:根据以下代码进行节点名检查

<?xml version="1.0" encoding="utf-8"?>
<h-mysql>
<database-cnf>
<driver>com.mysql.cj.jdbc.Driver</driver>
<user-name>root</user-name>
<user-pass>hxl495594..</user-pass>
<ip>localhost</ip>
<database-name>homework1</database-name>
</database-cnf> <configure>
<!-- 是否打开Sql执行日志 -->
<logger>true</logger>
</configure> </h-mysql>

4:少重要节点配置

解决办法:根据错误的信息,检查配置文件中少写的节点

Mysql框架---HMySql的更多相关文章

  1. SSM(Spring+SpringMVC+Mybatis)+Mysql 框架整合搭建流程以及其间注意事项

    复习SSM框架,太久没用自己手动撘一个,发现自己还是有很多地方忘记了和没注意的事项... 首先,直接给出总流程: 零.引jar包 1.引包(或者写maven.pom) 一.数据库部分 设计数据库各表结 ...

  2. MYSQL学习(二) --MYSQL框架

    MYSQL架构理解 通过对MYSQL重要的几个属性的理解,建立一个基本的MYSQL的知识框架.后续再补充完善. 一.MYSQL架构 这里给的架构描述,是很宏观的架构.有助于建立对MYSQL整体理解. ...

  3. spring mvc与mybatis与maven+mysql框架整合

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  4. mysql基本介绍和优化技巧

    一. mysql框架和基本介绍 1. 框架图 更详细: 2. 存储引擎 MYISAM与INNODB对比: MYISAM:mysql5.1及以前版本的默认存储引擎.支持全文检索,压缩,表级锁等,但不支持 ...

  5. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...

  6. SSM框架中如何简便上传文件表单

    此种方式上传文件相对简单,以下均经测试成功,才提供到此. 以下为单个文件上传方式 分析:本次的工作目的是根据一级标题产生对应的二级标题,在每个二级标题下对应一个(file字段)新闻文件,当点击新闻文件 ...

  7. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  8. (转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的 ...

  9. 【时区问题】SpringBoot+mybatis查询mysql的datetime类型数据时间差14小时

    [时区问题]MyBatis查询MySQL的datetime类型数据时间差14小时 故障解决方式 与数据库连接时,定义时区,避免mybatis框架从mysql获取时区.在连接上加上 serverTime ...

随机推荐

  1. BusyBox下ftpget的使用方法

    在终端输入ftpget命令,可以得到以下帮助信息: BusyBox v1.17.4 (2010-12-22 10:59:18 CST) multi-call binary. Usage: ftpget ...

  2. css简单的数学运算

    calc()是css3的一个新增的属性, .box{border:1px solid #ddd;  width:calc(100% - 100px);  background:#9AC8EB;} 兼容 ...

  3. (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)

    bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. ...

  4. hdu 1514 Free Candies 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1514 题目意思:有4堆糖果,每堆糖果有n个,从上到下排好,取糖果只能从上往下取,取完的糖果放在篮子里, ...

  5. Oracle:datafile删除后,重启server报ORA-01110

    模拟实验: 创建一个表空间后,直接把数据文件删除了:然后重启server. 1. create tablespace w56 datafile '/u01/app/oracle/product/10. ...

  6. Java调用Static修饰的本类方法

    public class Dy { public static void main(String[] args){ int a=6; int b=5; int result=0; result=Add ...

  7. 洛谷 - P2578 - 九数码游戏 - bfs

    https://www.luogu.org/problemnew/show/P2578 一个挺搞的东西,用康托展开做记忆化搜索可以少一个log的查询. #include <bits/stdc++ ...

  8. 51nod 1344 【前缀和】

    思路:求一下最小负数的前缀和 #include<cstdio> #include <map> #include<iostream> #include<stri ...

  9. poj3187【dfs】

    挑战-搜索 题意: 给一个n和sum,代表n层的杨辉三角,然后给一个和,问最低层的数字情况. 思路: ①:预处理一个底层对于和的系数数组, sum = 0Cn-1*num[1] + 1Cn-1*num ...

  10. js的NaN变量

    js中,我们经常在parseInt函数的时候遇到NaN变量,这个变量到底是什么呢? w3c上这样解释: NaN 属性是代表非数字值的特殊值.该属性用于指示某个值不是数字.可以把 Number 对象设置 ...