• Mysql框架---HMySql


    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

    image.png

    image.png

    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中没有空构造方法,可能会报一下错误
    解决办法:增加空构造方法

    image.png

    2:没有在项目根目录下新建h-mysql.xml文件
    解决办法:建立h-mysql.xml

    image.png

    3:配置文件节点名错误
    解决办法:根据以下代码进行节点名检查

    image.png

    <?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:少重要节点配置
    解决办法:根据错误的信息,检查配置文件中少写的节点

    image.png

  • 相关阅读:
    python快捷键的使用【摘抄】
    Jmeter5.1 Plugins Manager配置dummy使用jp@gc
    jmeter正则中常见的转义字符-笔记三
    测试人员问问题的技巧是什么?
    一个简单的python实现百度登录操作
    2.3 Go内置函数
    2.2 Go变量类型
    2.1Go语言特性
    1.2Go环境搭建之Mac
    1.1Go环境搭建之Linux
  • 原文地址:https://www.cnblogs.com/HouXinLin/p/10994377.html
Copyright © 2020-2023  润新知