本章我们来学习一下etmvc是如何访问数据库的。
etmvc中访问数据可以使用JDBC,HIBERNATE等,鉴于JDBC的烦琐和HIBERNATE的复杂,etmvc同时提供了一个ORM的简易实现版本ActiveRecord。在大多数中小型WEB系统中,使用ActiveRecord就足够了。
1、先将et-ar.jar, asm.jar, cglib.jar等包引入项目,当然还有mysql-connector-java-5.1.22-bin.jar,下载地址:http://www.mysql.com/downloads/connector/j/
2、配置activerecord.properties,新建一个activerecord.properties放在src目录下,其实只要放在CLASSPATH能找到的地方就好,这里可以给eclipse装一下propertiesEditor这个插件,专门用来编辑properties而不出乱码,我的资源有下。
3、activerecord.properties配置如下,很容易看懂的:
domain_base_class=com.et.ar.ActiveRecordBase
com.et.ar.ActiveRecordBase.driver_class=com.mysql.jdbc.Driver
com.et.ar.ActiveRecordBase.url=jdbc:mysql://localhost/test
com.et.ar.ActiveRecordBase.username=root
com.et.ar.ActiveRecordBase.password=root
com.et.ar.ActiveRecordBase.pool_size=2
4、在test数据库中新建一张表,然后往里添加几条记录:
create table users(
id int primary key auto_increment,
name varchar(10) default null,
addr varchar(50) default null,
email varchar(50) default null,
remark varchar(50) default null
)
5、在models建立对应的域对象即User.java,内容如下:
package models;
import com.et.ar.*;
import com.et.ar.annotations.*;
@Table(name="users")
public class User extends ActiveRecordBase{
@Id private Integer id;
@Column
@NotEmpty(message="用户名称必须填写")
private String name;
@Column private String addr;
@Column
@Email(message="邮箱格式不对")
private String email;
@Column private String remark;
//get,set...
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
6、我们的域模型对象继承自ActiveRecordBase,到些,ORM就建立完成了,我们看到,不需要复杂的配置文件,仅用几个简单的注解就完成了,接下来看看如何进行基本的CRUD操作,在UserController追加如下方法:
/**
* 查询全部用户
*/
public JsonView index() throws Exception {
List<User> users = User.findAll(User.class);
Map<String, Object> result = new HashMap<String, Object>();
result.put("success", true);
for (User user : users) {
result.put(user.getId().toString(), user.getName());
// System.out.println(user.getName());
}
JsonView view = new JsonView(result);
view.setContentType("text/html;charset=utf-8");// 允许指定ContentType
return view;
}
/**
* 条件查询页面
*/
public void queryUser()
{
}
/**
* 条件查询用户
*/
public JsonView query(String condition) throws Exception {
List<User> users = User.findAll(User.class, "addr like ?", new Object[]{"%"+condition+"%"});
Map<String, Object> result = new HashMap<String, Object>();
result.put("success", true);
for (User user : users) {
result.put(user.getId().toString(), user.getName());
// System.out.println(user.getName());
}
JsonView view = new JsonView(result);
view.setContentType("text/html;charset=utf-8");// 允许指定ContentType
return view;
}
/**
* 新建用户页面
*/
public void newUser() {
}
/**
* 保存新增用户
*/
public void save(String username, String addr, String email, String remark)
throws Exception {
User user = new User();
user.setName(username);
user.setAddr(addr);
user.setEmail(email);
user.setRemark(remark);
if (user.save()) {
redirect("index"); // 重定向到列表页面
} else {
redirect("newUser"); // 重定向
}
}
/**
* 编辑用户页面
*/
public void modifyUser() throws Exception {
int id=1;
User user = User.find(User.class, id);
request.setAttribute("id", user.getId().toString());
request.setAttribute("username", user.getName());
request.setAttribute("addr", user.getAddr());
request.setAttribute("email", user.getEmail());
request.setAttribute("remark", user.getRemark());
// request.setAttribute("hello", "hello,test1");
}
/**
* 保存编辑用户
*/
public void update(String id, String username, String addr, String email,
String remark) throws Exception {
User user = User.find(User.class, Integer.parseInt(id));
user.setName(username);
user.setAddr(addr);
user.setEmail(email);
user.setRemark(remark);
if (user.save()) {
redirect("index"); // 重定向到列表页面
} else {
redirect("modifyUser"); // 重定向
}
}
/**
* 删除用户页面
*/
public void delUser() {
}
/**
* 删除用户
*/
public void delete(String id) throws Exception {
User user = User.find(User.class, Integer.parseInt(id));
user.destroy();
redirect("index"); // 重定向到列表页面
}
7、在views/user目录下添加对应的queryUser.jsp、newUser.jsp、modifyUser.jsp、delUser.jsp页面:
(1)queryUser.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询用户</title>
</head>
<body>
<form action="/myDemo/user/query" method="POST">
<p>通讯地址:<input type="text" name="condition"></p>
<p><input type="submit" value="提交查询"></p>
</form>
</body>
</html>
(2)newUser.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加用户</title>
</head>
<body>
<form action="/myDemo/user/save" method="POST">
<p>用户姓名:<input type="text" name="username"></p>
<p>通讯地址:<input type="text" name="addr"></p>
<p>电子邮箱:<input type="text" name="email"></p>
<p>备注:<input type="text" name="remark"></p>
<p><input type="submit" value="提交保存"></p>
</form>
</body>
</html>
(3)modifyUser.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改用户</title>
</head>
<%
String id=(String)request.getAttribute("id");
String username=(String)request.getAttribute("username");
String addr=(String)request.getAttribute("addr");
String email=(String)request.getAttribute("email");
String remark=(String)request.getAttribute("remark");
%>
<body>
<form action="/myDemo/user/update" method="POST">
<p>用户ID:<input type="text" name="id" value="<%=id %>"></p>
<p>用户姓名:<input type="text" name="username" value="<%=username %>"></p>
<p>通讯地址:<input type="text" name="addr" value="<%=addr %>"></p>
<p>电子邮箱:<input type="text" name="email" value="<%=email %>"></p>
<p>备注:<input type="text" name="remark" value="<%=remark %>"></p>
<p><input type="submit" value="提交编辑"></p>
</form>
</body>
</html>
(4)delUser.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改用户</title>
</head>
<body>
<form action="/myDemo/user/delete" method="POST">
<p>用户ID:<input type="text" name="id" value="1"></p>
<p><input type="submit" value="提交删除"></p>
</form>
</body>
</html>
8、最后调试运行结果如下:
(1)访问:http://localhost:8080/myDemo/user/index
(2)访问:http://localhost:8080/myDemo/user/newUser,添加用户,点击提交保存
(3)访问:http://localhost:8080/myDemo/user/modifyUser,编辑用户,提交编辑
(4)、访问:http://localhost:8080/myDemo/user/delUser,输入要删除的用户编号,提交删除
(5)、访问:http://localhost:8080/myDemo/user/queryUser,输入查询条件,提交查询
这一章介绍到这,下一章将学习一下ActiveRecord中的关联,即一对一、一对多、多对一等关联问题!