【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作
1、新建学生表
这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表。数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表。
首先,我们得建一个数据库,名字叫db_student。然后,开始建表:
表名为t_student,保存。
学生表建好之后,我们开始测试具体的增删改查操作。
2、自定义jdbc框架 simple-jdbc
如图所示,simple-jdbc是我自己编写的一个jdbc框架,有点类似于spring-jdbc,采用DBCP数据源。目录结构如图所示,我已经把它打成了一个jar包,只需要在项目中引入即可。接下来,我们需要配置一下数据库的链接信息。
我们新建一个源文件夹etc,里面写一个配置文件,名字叫dbcpconfig.properties.注意哦,一定是叫这个名字,因为我在simple-jdbc框架中就设置了默认去读取这个文件。
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_student
username=root
password=123
#<!-- 初始化连接 -->
initialSize=100
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=200
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=UTF8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
对应的源码:
static {
try {
InputStream e = DBCP_source.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties prop = new Properties();
prop.load(e);
ds = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception arg1) {
throw new ExceptionInInitializerError(arg1);
}
}
3、新增用户
现在我们来测试新增用户的操作,建一个测试类:
因为我们使用了simple-jdbc,所以我们可以直接调用里面的save方法进行保存而不需要进行繁琐的jdbc操作。
在simple-jdbc中,有一个save方法,支持你传入一个map,然后把对应的数据保存到某个数据库的某一张表中。(MySQL)
案例:
public class TestAdd {
public static void main(String[] args) {
Map map = new HashMap();
map.put("id", "2018012101"); //学号
map.put("username", "zsf"); //账号
map.put("password", "123"); //密码
map.put("name", "张三丰"); //姓名
map.put("sex", "男"); //性别
SimpleDao dao = new SimpleDao();
dao.save("db_student", "t_student", map);
System.out.println("保存成功!");
}
}
让我们看一下这个方法:
dao.save("db_student", "t_student", map);
第一个参数是数据库名称,第二个参数是表名,第三个参数是载有数据的map。通过这个方法,我们不需要任何繁琐的jdbc语句,就能实现数据新增的操作!是不是很方便?
效果:
如果我们再次运行代码,就会报错:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2018012101' for key 'PRIMARY'
因为id是主键,所以插入的时候是不允许重复的。
让我们多换几个数据测试一下,加几条数据:
3、删除用户
simple-jdbc没有直接删除数据的方法,但是支持用类似spring-jdbc的方式执行sql语句。比如:
public class TestDelete {
public static void main(String[] args) {
SimpleDao dao = new SimpleDao();
dao.update("delete from t_student where id = ?", 2018012102);
System.out.println("删除成功!");
}
}
效果:
4、修改用户
修改数据,simple-jdbc提供了非常好用的方法,先来看一个具体例子:
public class TestModify {
public static void main(String[] args) {
Map map = new HashMap();
map.put("id", "2018012103"); //学号
map.put("username", "gj"); //账号
map.put("password", "123456"); //密码
map.put("name", "郭靖"); //姓名
map.put("sex", "男"); //性别
SimpleDao dao = new SimpleDao();
dao.update("db_student", "t_student", map, "id");
System.out.println("修改成功!");
}
}
如代码所示,比如我要修改郭靖的数据,将其密码改为123456,就调用update方法。第一个参数是数据库名称,第二个参数是表名,第三个参数是载有数据的map,也就是修改后的数据。最后一个参数是主键,也就是说,根据什么字段信息来找到要修改的那一条数据?我们要修改郭靖的数据,id是一样的,都是2018012103,所以主键字段就是id,我们第四个参数就传一个“id”进去。
不需要任何繁琐的jdbc语句,你只需要一个map,搞定一切!
5、查询用户
查询用户我提供了多个接口:
1、queryForJsonObject
2、queryForJsonArray
3、queryForList
4、queryForMap
5、queryForBean
6、queryForString
7、queryForInt
8、queryForLong
9、queryForPage (分页数据)
每个方法看名字就知道是干什么用的了,这里我们就看一下其中最难的分页查询。分页查询在jdbc操作中一向是个难点,但是如果你使用我这个simple-jdbc框架,就是一句话的事情了。
例子:
public class TestQueryForPage {
public static void main(String[] args) {
String sql = "select * from t_student where 1=1 and sex = ?";
SimpleDao dao = new SimpleDao();
Map<String, Object> list = dao.queryForPage(sql, 1, 10, "男");
System.out.println(list);
}
}
如代码所示,我要查询出学生表中所有的男同胞,就用queryForPage方法,第一个参数是查询的sql语句,第二个参数是第几页,第三个参数是每页多少行,之后是一个变长数组,对应sql语句中的 ? 。
效果:
{
total=2,
rows=[{"id":2018012101,"sex":"男","username":"zsf","name":"张三丰","password":"123"},
{"id":2018012103,"sex":"男","username":"gj","name":"郭靖","password":"123456"}]
}
分页的结果集就是具体的列表加上总条数,于是乎,这样就实现了。
【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作的更多相关文章
- 【Java框架型项目从入门到装逼】第七节 - 学生管理系统项目搭建
本次的教程是打算用Spring,SpringMVC以及传统的jdbc技术来制作一个简单的增删改查项目,对用户信息进行增删改查,就这么简单. 1.新建项目 首先,打开eclipse,新建一个web项目. ...
- 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说
大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...
- 【Java框架型项目从入门到装逼】第五节 - 在Servlet中接收和返回数据
在上一节的程序中,我们可以看到HttpServletRequest, HttpServletResponse这两个对象.可以说,这是JavaWeb中至关重要的两个对象.接下来,我们来做一个简短的说明: ...
- 【Java框架型项目从入门到装逼】第十二节 项目分层
这一节我们开始对项目进行分层,一般来说,一个web项目的层次结构如下图所示: controller层为我们的控制层,用来接收用户的请求,比如新增一个学生的信息,新增的请求最先就是走到这一层.contr ...
- 【Java框架型项目从入门到装逼】第三节 - 如何用Tomcat发布web项目?
啥叫Tomcat?有道词典是这么说的. 这个我们姑且不管,实际上呢,Tomcat是一种Web服务器,我们自己做好了一个Web项目,就可以通过Tomcat来发布.服务器呢,又分为硬件服务器和软件服务器. ...
- 【Java框架型项目从入门到装逼】第四节 - 编写第一个Servlet程序
在开始这一节之前呢,我们还需要把Tomcat配置到Eclipse中,配置的方式很简单,打开Eclipse,Window,Preferences,进入到这个页面: 将Tomcat的安装目录配置到Ecli ...
- 【Java框架型项目从入门到装逼】第十四节 查询用户列表展现到页面
这一节,我们来实现一下用户列表搜索,最终的效果如下: 这边我们要使用easyUI给我们提供的datagrid组件. HTML结构如下 <!-- 数据列表 --> <table id= ...
- 【Java框架型项目从入门到装逼】第八节 - 用EasyUI绘制主界面
1.引入资源包 在上一节中,我们把基本的框架都搭好了,用了Spring,SPringMVC.这一节,我们先来画页面,前端框架采用EasyUI来实现. easyui是一种基于jQuery的用户界面插件集 ...
- 【Java框架型项目从入门到装逼】第十三节 用户新增功能完结篇
这一节,我们把用户新增的功能继续做一个完善.首先,新增成功后,需要给前台返回一个信息,就是告诉浏览器,这次用户新增的操作到底是成功了呢,还是失败了呢?为此,我们需要专门引入一个结果类,里面只有两个属性 ...
随机推荐
- java自动化测试-http请求post
继上文的get请求http://www.cnblogs.com/xuezhezlr/p/7667995.html的简单讲解后,这篇文章大概说一下我所遇到的主要的post请求以及他的测试代码 上文介绍到 ...
- 多线程-Timer重入
多线程Timer重入问题 由于使用多线程定时器,就会出现如果一个Timer处理没有完成,到了时间下一个照样会发生,这就会导致重入. 对付重入问题通常的办法是加锁,但是对于 Timer却不能简单的这样做 ...
- 一个超级简单的demo带你走进redux的大坑
先上代码 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { createStor ...
- HTML学习 表格和表单
<table></table> 表格标签 width 宽度 border 边框 cellpadding 内容和单元格之间的 ...
- 微信小程序开发之详解生命周期方法
生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...
- 常用Linux命令笔记
任何脱离业务的架构都是耍流氓 只记录实际常用的Linux命令 常用Linux命令 查找安装路径: whereis nginx 查询nginx进程: ps aux|grep nginx 查看 CentO ...
- python3之迭代器&生成器
1.迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不 ...
- 【MySQL】计算 TPS,QPS 的方式
在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标.本文比较了网上的两种计算方式.先来了解一下相关概念. 概念介绍: QPS:Queries Per Second 查 ...
- 【转】如何将qlv格式的腾讯视频转换为mp4格式
一般来说,每个视频网站都会有自己的视频播放格式,如优酷的KUX.爱奇艺的QSV和腾讯的QLV等.但是大家知道,优酷是有转码功能的,而就目前来说腾讯视频还没有转码功能,这就给大家造成了一定的困扰.这里呢 ...
- LVS三种模式分析(超详细)
1.DR模式:(Direct Routing)直接路由模式 DR模式的网络拓扑: DR模式的工作过程: 1.当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-se ...