【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框架型项目从入门到装逼】第十三节 用户新增功能完结篇
这一节,我们把用户新增的功能继续做一个完善.首先,新增成功后,需要给前台返回一个信息,就是告诉浏览器,这次用户新增的操作到底是成功了呢,还是失败了呢?为此,我们需要专门引入一个结果类,里面只有两个属性 ...
随机推荐
- python 列表赋值和列表 sort 方法注意的问题
列表赋值 >>> a = b = [] >>> a.append() >>> a [] >>> b [] >>> ...
- spring中使用Hibernate中的getCurrentSession报出:createQuery is not valid without active transaction
1.错误信息 HTTP Status 500 - createQuery is not valid without active transaction type Exception report m ...
- 浏览器根对象window之screen
1. screen 1.1 availHeight/Width screen.availWidth返回浏览器窗口可占用的水平宽度(单位:像素). screen.availHeight返回浏览器窗口在屏 ...
- 企业级memcached缓存数据库结合php使用与web管理memcached
环境 [root@cache01 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@cache01 ~]# uname -a ...
- QtCreator 断点不起作用
使用QtCreator 调试程序时一直无法进入断点,断点根本不起作用. 解决方法: 打开.pro文件 将图中的release改为debug,再次调试运行就可以进入断点了.
- HDFS Architecture
http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction Ha ...
- Oracle 触发器的使用
一.触发器的作用 触发器的作用类似拦截器.把一些针对数据库的DML操作(insert/update/delete/select)进行拦截,符合业务要求的进行操作,不符合要求的操作可以通过抛出异常来阻止 ...
- 使用socket实现的ftp文件传输服务器
服务端: # encoding:utf-8 # Author:"richie" # Date:8/23/2017 from socket import * import pickl ...
- RHM-M60型挖掘机力矩限制器/载荷指示器
RHM-M60挖掘机力矩限制器RHM-M60 excavator crane moment limiter RHM-M60型挖掘机力矩限制器是臂架型起重机机械的安全保护装置,本产品采用32位高 ...
- 【JavaScript--String对象】
JavaScript 字符串(String) 对象 String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 lenght 字符串的长度 prototype 允许您向对象添 ...