zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/HouXinLin/p/10994377.html
Copyright © 2011-2022 走看看