Hoyi 与单数据库的读写 (hoyi入门系列文章二)
1.下载Hoyi ER Tool并生成实体类
设计实体并使用hoyi er tool 生成实体。
详细可查看 "Hoyi ER TOOL生成实体与web页面 "http://mp.blog.csdn.net/postedit/79374773
2.配置相关
在config文件夹里面新建jdbc.properties 增加对数据库的支持。jdbc.properties的内容如下:
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/hoyidemo?useUnicode=true&characterEncoding=utf-8 // 数据库连接地址
jdbc_username=root //改为对应数据库的账号
jdbc_password=root //改为对应数据库的密码
注意:这是单数据库连接方式。
继续使用我们入门系列文章一的hoyidemo工程。在工程的WebRoot目录下新建demo2包,并建controller和entity包
将"Hoyi ER TOOL生成实体与web页面" 文章生成的user类拷贝到 entity包里。并在controller包里新建UserController类
3.编写逻辑
1.增加用户
在UserController 里面增加方法
@RequestMode(MODE = { RequestType.GET, RequestType.POST })
@PostParam(ENTITY = user.class)
public void addUser() {
// hoyi 语法
user u = this.getModelFromReq(user.class);
int result = u.Insert();
this.WriteUTF8JSONDATAMSG(1, "success", 0);
}
u.Insert();是hoyi的语法,也可以使用sql语句
String sql = "insert into user (username,sex,note) values (?,?,?)";
String[] params = {u.getUsername(),u.getSex(),u.getNote()};
int result = DataBaseCluster.Get_WRITE_SERVER().execUpdateEx(sql, params);
测试,访问
http://localhost:8085/hoyidemo/demo2/controller/UserController.html?behavior=addUser&username=xiaoming&sex=1¬e=nothing ,在数据库增加了一条数据则证明正确。
2.查询用户
@RequestMode(MODE = { RequestType.GET, RequestType.POST })
public void findUser() {
// hoyi 语法
String id = this.getParams("id");
user u = user.E().Where(user.id.Equals(id)).First();
this.WriteUTF8JSONDATAMSG(1, "success", u);
}
测试访问http://localhost:8085/hoyidemo/demo2/controller/UserController.html?behavior=findUser&id=1,可以在页面看到该用户。
3.有些场景数据库的更新需要使用到事务。在hoyi里事务的操作如下:
/**
* 增(事务操作)
*/
@RequestMode(MODE = { RequestType.GET, RequestType.POST })
public void insertTransaction() {
user u1 = new user("u1", "1", "note");
user u2 = new user("u2", "1", "note");
IDatabase database = DataBaseCluster.Get_Transaction_WRITE_SERVER();
database.InitAndOpenTransaction();
try {
u1.Insert(database);
int t = 1/0; //设置一个异常,
u2.Insert(database);
database.Commit();
} catch (Exception e) {
// TODO Auto-generated catch block
database.RollBackTransaction(); //捕获异常,回滚
e.printStackTrace();
} finally {
database.CloseConnection(); //关闭连接
}
}