关键词:
写这个小demo呢,是为了在学习Spring之前,练习一下传统的model2开发模式;
为了简化流程,这里省略了利用servlet来获取前台数据。
采用直接new出来的对象来交给程序处理,然后执行对数据库的操作以及显示(控制台显示,哈哈)。
用到了:Hibernate、反射、Junit。
先来一张项目目录图,看一下结构:
------------------------------------------------------------
------------------------------------------------------------
1.建表连接数据库并生成持久化类
生成的User类以及xml文件放置于model包下
1 public class User implements java.io.Serializable { 2 private Integer id; 3 private String name; 4 private Integer age; 5 // Constructors 6 /** default constructor */ 7 public User() { 8 } 9 /** full constructor */ 10 public User(String name, Integer age) { 11 this.name = name; 12 this.age = age; 13 } 14 // Property accessors 15 public Integer getId() { 16 return this.id; 17 } 18 public void setId(Integer id) { 19 this.id = id; 20 } 21 public String getName() { 22 return this.name; 23 } 24 public void setName(String name) { 25 this.name = name; 26 } 27 public Integer getAge() { 28 return this.age; 29 } 30 public void setAge(Integer age) { 31 this.age = age; 32 } 33 @Override 34 public String toString() { 35 return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 36 } 37 }
可以看出是一个标准的javabean,id采用自增(increment)。
另外HibernateSessionFactory文件(工厂文件)放在hibernate包下。
2.创建一个UserDao接口
该接口位于Dao包下,为后面的方法反射做准备。
1 public interface UserDao { 2 public void newuser(); 3 }
寥寥三行代码,但是意义重大!!!后面就知道了。
3.创建类实现UserDao接口并自定义用户方法
1 public class Usertodo implements UserDao { 2 //newuser()方法来源于实现接口的方法 3 public void newuser(){}; 4 //自定义的用户添加方法,传入一个用户对象作为参数 5 public void add(User user) { 6 //利用Hibernate的工厂类获得Session对象和事务对象Transaction 7 Session session = HibernateSessionFactory.getSession(); 8 Transaction transaction = session.beginTransaction(); 9 //数据库添加用户操作 10 session.save(user); 11 //提交事务 12 transaction.commit(); 13 //关闭session对象 14 session.close(); 15 } 16 //自定义的用户查询方法,传入一个用户对象id作为参数 17 public void queryuser(int id){ 18 //利用Hibernate的工厂类获得Session对象和事务对象Transaction 19 Session session = HibernateSessionFactory.getSession(); 20 //Transaction transaction = session.beginTransaction(); 21 //根据id查询相应的用户 22 User user =(User)session.get(User.class, id); 23 //关闭session对象 24 session.close(); 25 //向控制台打印此次获得的对象 26 System.out.println("以下是此次获得ID为"+id+"的用户信息"+user.toString()); 27 } 28 }
Dao层实现对数据库的增删改查操作,方法定义好之后由服务层进行调用,这个demo里Dao层只写了添加用户、查询
用户的方法。将会在后面服务层调用(Dao层方法除非需求改变,一般不会发生改变)
该类位于Daoimp包。
4.服务层模拟用户的操作
用户对页面点击的时候调用服务层方法
1 public class Userservice { 2 static Usertodo a; 3 4 // 利用方法反射获取Usertodo类的实例化对象a 5 private static void init() { 6 try { 7 UserDao user = new Usertodo(); 8 Class c = user.getClass(); 9 a = (Usertodo) c.newInstance(); 10 } catch (Exception e) { 11 e.printStackTrace(); 12 } 13 }; 14 15 // 由此实例化对象来调用Dao层的方法 16 // 添加用户 17 public static void useradd(User newuser) { 18 init(); 19 a.add(newuser); 20 } 21 22 // 查询用户 23 public static void userquery(int id) { 24 init(); 25 a.queryuser(id); 26 } 27 }
初始化函数init()获取Dao层对象,即拥有对数据库操作权利的这个对象,然后调用这个对象的方法实现用户间接对
数据库的操作,该类位于service包下。
5.单元测试
1 public class Test1 { 2 @Test 3 public void add() { 4 User newuser = new User("桔子桑", 26); 5 Userservice.useradd(newuser); 6 } 7 8 @Test 9 public void query() { 10 Userservice.userquery(5); 11 } 12 }
这个测试类的两个方法,add()和query()方法:
add()方法:实现传入一个对象,然后将对象添加到数据库;
query()方法:实现根据id号查询用户并打印用户信息;
add()方法执行了9次,向表中添加了9个用户:
--------------------------------------------------------------
---------------------------------------------------------------
接下来执行query()方法,查询id为5的用户信息:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
可以看出控制台也成功输出了ID为5的用户信息。
Bingo~~~~~
学习spring之前必学之反射技术
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”。以下几项Java知识和Spring框架息息相关,不可不学 Java语言允许通过程序化的方式间接对Class进行操作,Class... 查看详情
spring初探究之ioc思想
前言 之前学习Java时一直在有意识的回避框架部分,这也就导致了本科时自己虽然也大大小小的做了不少东西,但本质上都是在重复的造轮子,并没有对所学的知识进行一个细致的梳理以及深层次的探究。说来也惭愧,直到... 查看详情
spring06_纯注解配置
...on对象,包含username、age、gender、birthday四个属性,并使用Spring创建Person对象,并注入属性。 查看详情
推荐一个找到一个比较好的spring,java学习教程
位置:http://www.mkyong.com/开始只知道spring的一些基本概念,然后一直处于如何通过代码接入。没找到很好的模版与教程来练习。后来在这个网站上看到了好多优秀的教程,很多简单的demo,能够帮我快速理解与实现demo的练习。比如... 查看详情
spring从零開始-01
因为学习需求,近期突然通知须要学习Spring。可是因为之前非常少使用Java。所以感觉还是有点慢,花了大约两周,弄懂了主要的结构也编了点小程序。还是万事开头难啊,网上总是非常难找到学习spring的指引资料。学习一个东... 查看详情
java之servlet学习基础
这一阵子在学java三大框架。却在学习过程中发现前面的知识已经忘记了。所以决定写一篇博客来总结回顾之前的学习。 1.Servlet是什么? servlet是一个运行在服务器端的小应用程序。通过HTTP协议接受和相应来自Web客户端的... 查看详情
spring+hibernate项目demo搭建
之前用maven+spring+mybatis+springmvc搭建了一个web项目,用于学习spring及相关知识,现在打算将mybatis换成hibernate,一样搭建一个框架。其实mybatis或者hibernate都只是orm框架,负责数据持久层的工作,spring对这二者都提供了较好的支持。... 查看详情
私活之安卓论坛demo
...接了一个android小项目,想和小伙伴们分享下。似乎在之前的项目中有了自己的个人IP。教务小姐姐的总是喜欢找我。干着干着,发现主业都没有私活有意思。在工作中,一直处于单纯的程序猿工作,负责大数据项... 查看详情
spring之ioc/di(反转控制/依赖注入)_入门demo
...辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像newobject()这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的... 查看详情
springboot框架学习学前掌握之重要注解-通过java的配置方式进行配置spring
本节主要内容:1:通过代码演示实现零XML配置spring2:使用重点注解理解声明:本文是《凯哥陪你学系列-框架学习之springboot框架学习》中springboot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring.在上一节《springboot... 查看详情
springboot框架学习学前掌握之重要注解-通过java的配置方式进行配置spring
本节主要内容:1:通过代码演示实现零XML配置spring2:使用重点注解理解声明:本文是《凯哥陪你学系列-框架学习之springboot框架学习》中springboot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring.在上一节《springboot... 查看详情
spring+mybatis之注册功能demo
这次先注册功能的是基于登录之后,所以很多配置,实体类等就不再赘述了。首先也不是直接在地址栏输入一个网页就可以到注册页面的。而是需要通过后台发送一个请求从而跳转到注册页面先写注册页面,body部分然后写Ja... 查看详情
java设计模式之单例模式
...么这个类被称为单例类,这种设计模式被称为单例模式。Spring框架里面可以将所有生成的bean对象都设置为单例模式,只需要在配置Bean实例时指定scope=“singleton”即可,或者不做配置默认即为单例模式。我们可以创建一个小的Demo... 查看详情
spring之静态/动态代理模式
代理模式为什么要学习代理模式,因为AOP的底层机制就是动态代理!代理模式:静态代理动态代理学习aop之前,我们要先了解一下代理模式!静态代理静态代理角色分析抽象角色:一般使用接口或者抽象类来实现真实角色:被代理的... 查看详情
springboot登录注册demo--体验小结
之前没有折腾过Spring,直接上来怼SpringBoot异常痛苦,参考着官网的guide(https://spring.io/guides)写了几个demo;springboot跑起来确是方便,有种python的感觉,几行代码就可以起一个web服务,还不用自己去配置tomcat之类的;于是尝试学... 查看详情
三维深度学习pytorch-pointnet系列之win10下环境安装与demo运行(代码片段)
【三维深度学习】Pytorch-PointNet系列之win10下环境安装与demo运行提示:最近开始在三维深度学习方面进行研究,从PointNet开始入手,对这个系列的网络进入深入学习,记录相关知识点,分享学习中遇到的问题已经解决的方法。文章目录【... 查看详情
vue.js之组件嵌套小demo
Vue.js之组件嵌套的小demo项目第一步:初始化一个wabpack项目,这里不在复述。第二步:在components文件夹下新建Header.vueFooter.vue和Users.vue三个组件文件 Header.vue文件:1<!--1模板:html结构-->2<template>3<header>4<h1>{{ti... 查看详情
diocp之demo学习顺序及达到要求
...:DiocpTask,任务投递,Task多线程使用方法以上只是个人学习的历程与体会 查看详情