Jorm实现简单的数据库CRUD操作
来源:互联网 发布:网络上赌博怎么处罚 编辑:程序博客网 时间:2024/05/17 23:22
Jorm 跟Hibernate的相似度非常高,它也是一个封装了JDBC的数据库对象持久化的框架。Jorm本身提供了annotation的组件引用,可以通过简单地标记实体对象的字段和类就可以实现Java对象与数据库对象的一一对应关系。通过Jorm的工具方法来实现数据库的持久化或查询操作,最重要的工具类文件是Jorm.java,其次是Session.java。眼见为实,下面来看一下程序实例。
1、数据库及测试表创建
打开mysql数据库管理界面,创建一个名为test的数据库,并创建一个t_user的数据库表,数据库建表语句如下:
CREATE TABLE `t_user` ( `id` int(11) NOT NULL, `name` varchar(50) DEFAULT NULL, `sex` char(4) DEFAULT NULL, `age` int(11) DEFAULT NULL, `career` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;2、创建User实体对象(此对象与数据库表字段一一对应)
package com.boonya.jorm.entity;import org.javaclub.jorm.annotation.Column;import org.javaclub.jorm.annotation.Entity;import org.javaclub.jorm.annotation.Id;import org.javaclub.jorm.annotation.NoColumn;import org.javaclub.jorm.annotation.PK;/** * * <li>文件名称: User</li> * <li>文件描述: $</li> * <li>内容摘要: 包括模块、函数及其功能的说明</li> * <li>完成日期:2013-10-27</li> * <li>所属作者:boonyachengdu@gmail.com</li> * <li>修改记录1:下午04:51:57,修改内容描述</li> * */@PK(value = "id")@Entity(table="t_user")public class User { @Id @Column("id") private int id; @Column("name") private String name; // 与数据库字段命名一致,可以不指定@Column private String sex; @Column("age") private Integer age; @Column("career") private String career; @NoColumn private int kvalue; public User() { super(); } public User(String name, String sex, Integer age, String career) { super(); this.name = name; this.sex = sex; this.age = age; this.career = career; } public User(Integer id, String name, String sex, Integer age, String career) { super(); this.id = id; this.name = name; this.sex = sex; this.age = age; this.career = career; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getCareer() { return career; } public void setCareer(String career) { this.career = career; } public int getKvalue() { return kvalue; } public void setKvalue(int kvalue) { this.kvalue = kvalue; } @Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("[" + id + ", " + name + ", " + sex + ", " + age + ", " + career + "]"); return sb.toString(); }}注:@PK表示主键,@NoColumn表示不在数据库持久化该字段(即不进行该字段的映射)。
3、编写IUserService接口,定义用户动作
package com.boonya.jorm.service;import java.util.List;import com.boonya.jorm.entity.User;/** * * <li>文件名称: IUserService</li> * <li>文件描述: $</li> * <li>内容摘要: 包括模块、函数及其功能的说明</li> * <li>完成日期:2013-10-27</li> * <li>所属作者:boonyachengdu@gmail.com</li> * <li>修改记录1:下午04:55:36,修改内容描述</li> * */public interface IUserService {public boolean add(User user);public boolean batchAdd(List<User> userList);public boolean delete(int id);public User getUser(int id);public boolean update(User user);public List<User> getPagingList(Object [] params,int page, int pageSize,String sortType,String sortName);}
4、编写SessionManager来实现数据库访问
package com.boonya.jorm.service.utils;import org.javaclub.jorm.Jorm;import org.javaclub.jorm.Session;public class SessionManager{private static final Session session = Jorm.getSession();public static Session getInstance(){return SessionManager.session;}}5、编写UserDao的CRUD方法
package com.boonya.jorm.dao;import java.util.List;import org.javaclub.jorm.Page;import org.javaclub.jorm.Session;import org.javaclub.jorm.jdbc.JdbcException;import org.javaclub.jorm.jdbc.batch.JdbcBatcher;import org.javaclub.jorm.jdbc.criterion.Order;import org.javaclub.jorm.jdbc.sql.SqlParams;import com.boonya.jorm.entity.User;import com.boonya.jorm.service.utils.LogManager;import com.boonya.jorm.service.utils.SessionManager;/** * * <li>文件名称: UserDao</li> * <li>文件描述: $</li> * <li>内容摘要: 包括模块、函数及其功能的说明</li> * <li>完成日期:2013-10-27</li> * <li>所属作者:boonyachengdu@gmail.com</li> * <li>修改记录1:下午04:52:16,修改内容描述</li> * */public class UserDao{/** * 根据ID查询用户信息 * * @param id * 主键ID * @return User 用户信息对象 */public User getUserById(int id){Session session = SessionManager.getInstance();User user = session.read(User.class, id);return user;}/** * 用户信息入库 * * @param user * 用户信息对象 * @return boolean 成功(true)/失败(false) */public boolean saveUser(User user){Session session = SessionManager.getInstance();// 清空User实体对应的数据库表的记录session.clean(User.class);try{session.save(user);return true;} catch (JdbcException e){LogManager.setLog("用户信息入库失败", e);}return false;}/** * 根据用户ID删除用户 * * @param id * 用户ID */public boolean deleteUser(int id){Session session = SessionManager.getInstance();User user = session.read(User.class, id);try{if (user != null){session.delete(user);return true;}} catch (JdbcException e){LogManager.setLog("根据用户ID删除用户失败", e);}return false;}/** * 用户信息更新 * * @param user * 用户信息对象 * @return boolean 成功(true)/失败(false) */public boolean updateUser(User user){Session session = SessionManager.getInstance();try{session.update(user);return true;} catch (JdbcException e){LogManager.setLog("用户信息更新失败", e);}return false;}/** * [批量入库]用户信息 * * @param userList * 用户列表 * @return boolean 成功(true)/失败(false) */public boolean batchSaveUser(List<User> userList){Session session = SessionManager.getInstance();// 清空User实体对应的数据库表的记录session.clean(User.class);JdbcBatcher batcher = session.createBatcher();try{User user = null;for (int i = 0, j = userList.size(); i < j; i++){user = userList.get(i);if (user != null){batcher.save(user);}}batcher.execute();return true;} catch (JdbcException e){LogManager.setLog("[批量入库]用户信息失败", e);}return false;}/** * 用户分页查询(条件查询) * * @param page * 分页索引 * @param pageSize * 每页条数 * @param sortType * 排序类型 * @param sortName * 排序字段 * @return List<User> 用户分页列表 */@SuppressWarnings({ "rawtypes", "unchecked" })public List<User> getUserPage(Object[] params, int page, int pageSize, String sortType, String sortName){Session session = SessionManager.getInstance();String sql = " select * from t_user where name = ? and id > ? ";SqlParams sqlParams = new SqlParams(sql, params);sqlParams.setObjectClass(User.class);// 设置查询条件// sqlParams.setParams(params);// sqlParams.setSql(sql);// 设置分页的查询索引int firstPageIndex = (page - 1) * pageSize;int maxPageIndex = page * pageSize;sqlParams.setFirstResult(firstPageIndex);sqlParams.setMaxResults(maxPageIndex);sqlParams.addOrder(sortType.equals("asc") ? Order.asc(sortName) : Order.desc(sortName));List<User> users = session.list(sqlParams);return users;}/** * 用户分页查询 * * @param page * 分页索引 * @param pageSize * 每页条数 * @param sortType * 排序类型 * @param sortName * 排序字段 * @return List<User> 用户分页列表 */public List<User> getUserPage(int page, int pageSize, String sortType, String sortName){Session session = SessionManager.getInstance();SqlParams<User> sqlParams = new SqlParams<User>();sqlParams.setObjectClass(User.class);// 设置分页的查询索引int firstPageIndex = (page - 1) * pageSize;int maxPageIndex = page * pageSize;sqlParams.setFirstResult(firstPageIndex);sqlParams.setMaxResults(maxPageIndex);// 添加排序类型和字段sqlParams.addOrder(sortType.equals("asc") ? Order.asc(sortName) : Order.desc(sortName));// 添加了排序类型和字段必须设置SQL语句,否则异常提示不能获取到Query对象sqlParams.setSql(" select * from t_user ");List<User> users = session.list(sqlParams);return users;}/** * 内置分页数据对象 * * @param page * 分页索引 * @param pageSize * 显示条数 * @param totalCount * 查询总数 * @param users * 查询结果集 * @return Page<User> 分页数据对象 */public Page<User> getPage(int page, int pageSize, int totalCount, List<User> users){Page<User> pageData = new Page<User>();pageData.setPageNo(page);pageData.setPageSize(pageSize);pageData.setTotalCount(totalCount);pageData.setResult(users);return pageData;}}6、创建UserService实现IUserService
package com.boonya.jorm.service;import java.util.List;import com.boonya.jorm.dao.UserDao;import com.boonya.jorm.entity.User;/** * * <li>文件名称: UserService</li> * <li>文件描述: $</li> * <li>内容摘要: 包括模块、函数及其功能的说明</li> * <li>完成日期:2013-10-27</li> * <li>所属作者:boonyachengdu@gmail.com</li> * <li>修改记录1:下午04:55:55,修改内容描述</li> * */public class UserService implements IUserService {public static UserDao userDao=new UserDao();@Overridepublic boolean add(User user) {return userDao.saveUser(user); }@Overridepublic boolean batchAdd(List<User> userList){return userDao.batchSaveUser(userList);}@Overridepublic boolean delete(int id) {return userDao.deleteUser(id);}@Overridepublic User getUser(int id) {return userDao.getUserById(id);}@Overridepublic boolean update(User user) {return userDao.updateUser(user);}@Overridepublic List<User> getPagingList(Object [] params,int page, int pageSize, String sortType, String sortName){return userDao.getUserPage(params,page, pageSize, sortType, sortName);}}
7、编写单元测试用例
package com.boonya.jorm.test;import java.util.ArrayList;import java.util.List;import org.junit.After;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import com.boonya.jorm.entity.User;import com.boonya.jorm.service.IUserService;import com.boonya.jorm.service.UserService;public class UserTest{private IUserService userService;@Beforepublic void initInterface(){userService = new UserService();}@Afterpublic void freeSources(){userService = null;}@Testpublic void add(){User user = new User("boonya", "male", 23, "Java programmer");boolean success = userService.add(user);Assert.assertTrue("添加新的用户", success);}@Testpublic void bgetUser(){User user = userService.getUser(1);Assert.assertNull("用户ID=1查询", user);}@Testpublic void cupdate(){User user = userService.getUser(1);Assert.assertNotNull("存在ID=1用户", user);user.setCareer("Test case update " + System.currentTimeMillis());boolean success = userService.update(user);Assert.assertTrue("更新ID=1的用户", success);}@Testpublic void delete(){User user = userService.getUser(1);Assert.assertNotNull("存在ID=1用户", user);boolean success = userService.delete(1);Assert.assertTrue("删除ID=1的用户", success);}@Testpublic void fbatchAdd(){// 批量添加List<User> userList = new ArrayList<User>();User user;for (int i = 0; i < 100; i++){user = new User("boonya", "male", 23, "Java programmer" + i);userList.add(user);}Assert.assertNotNull("fbatchAdd集合不为空", userList);boolean success = userService.batchAdd(userList);Assert.assertTrue("批量添加", success);}@Testpublic void gpaingQuery(){// 分页数据查询Object[] params = new Object[]{ "boonya100", "90" };List<User> users = userService.getPagingList(params, 1, 8, "asc", "id");Assert.assertNotNull("gpaingQuery集合不为空", users);User user;for (int i = 0, j = users.size(); i < j; i++){user = users.get(i);System.out.println(user == null ? "" : user.toString());}}}注:此处的Page<T>分页只是最简单的一种封装方式,后面需要详细地了解,另外整个数据访问只包含一个数据库session访问,所以不用关闭该session,若是单个的session需要用完即对其进行关闭,释放资源占用。
- Jorm实现简单的数据库CRUD操作
- php实现简单的CRUD操作
- java实现mongo数据库的CRUD操作
- C# on rails! 基本信息CRUD操作的简单实现
- maven hibernate 实现对mysql简单的CRUD操作
- JDBC简单的CRUD操作
- 如何通过GridView实现数据库的CRUD操作
- Android数据库CRUD操作的封装与实现
- 安卓开发-实现数据库的CRUD操作
- MySQL数据库的CRUD操作
- 模型的数据库CRUD操作
- Hibernate实现简单的CRUD
- SQLiteDatabase的CRUD操作实现
- MyBatis实现数据库的CRUD
- JavaScript连接SqlServer数据库。实现CRUD操作。
- mybatis实战之路,疯狂的数据库操作框架、动态sql实现CRUD及带条件的增CRUD
- Jorm使用Session实现存储过程和函数的调用
- Android中SQLite的简单crud操作
- HDU1358--KMP找周期(KMP基本题型到此总结完毕)
- xxx is not in the sudoers file解决方法
- 补全MyReview database中的zmax_text table的方法(解决Zmax_Exception问题)
- EF版本变化及一些重要变更
- erlang android 通讯
- Jorm实现简单的数据库CRUD操作
- Java学习第三课 面向对象编程
- 程序设计思考
- Install WAS6.1+IHS for Linux(64bit)
- android adb启动失败问题 adb server is out of date. killing... ADB server didn't ACK * failed to start daem
- Linux下安装jdk1.6
- poj 2531(按位暴力枚举2^20很easy)
- 数组与内存控制
- 无线传感器网络覆盖盲区的发现与修复方法研究