- 浏览: 195838 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
atgoingguoat:
Spring Cloud 现状目前,国内使用 Spring C ...
SpringCloud2 从入门 -
zssapple:
taskList.jsp 中的问题解决:if(${sessio ...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子 -
793059909:
很详细
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限) -
aa00aa00:
一个中国移动的系统,呵呵,报错来的,现在调试好了
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限) -
小fi(FD):
楼主有考虑过用非关系型数据库实现吗?如果用非关系型数据库,对于 ...
动态表单分析
ibatis3 已经发布了。跟ibatis2还是有一定的区别的。
总的来说,配置更简单了。当然,你还可以到网上找些自动生成的工具。
那样更方便了 , 国内国外都有。推荐一下:http://tomcatmonitor.googlecode.com/files/abator.swf
iBATIS 3 是一个 ORM 持久框架,用来将 Java 对象内的属性映射到数据库内的表列。iBATIS 以映射为中心,重点在于映射一个优秀的对象模型与一个优秀的关系型数据库设计。
iBATIS 3 内的一个新特性是使用 Java 注释进行映射,这就使得映射更为整洁也更为直观,而且可以以 Java源代码的形式为很多项目所用。iBATIS 3 还提供了使用 XML配置文件进行对象映射的功能。这种双重配置方法的存在让您可以为自己的项目选用最为简单的配置 iBATIS 的方式。
iBATIS 3 带来了一些新的变化,允许您利用 Java 5 注释。通过使用注释,您可以创建 mapper 接口来供您在 Java 代码内进行从对象到数据库的全部映射。清单 8 所示的代码展示了这个用于配置(并非 XML 配置)的 AutomobileMapper 接口。
在 Automobile mapper 的 XML 配置中,resultMap 元素用来映射 model_year 数据库列与 Automobile 对象上的 year 字段。这个映射相当简单,可以在注释内进行,只要使用为该列赋别名的 SQL 特性就可以了,这个特性可由在 @Select 注释内定义的 SQL 完成。
AutomobileMapper 接口内的 Select 注释将 selectAutomobile 方法映射到用来根据给定值从 automobiles 表选择一个记录的 SQL。这个值被指定为实参的 id 参数并被作为 #{id}包括在这个 SQL 语句内,正如其在 XML 配置中那样。使用 Java 接口映射这些 SQL 方法的一个极大的好处是 feedbac会以编译时错误的形式出现在 Java 编辑器中。这样一来,我们就可以确认这些方法均能返回正确的类型,而 XML配置通常需要先执行代码才能找到错误。
此外,iBATIS 3 现在还支持接口继承,允许对 Java 接口进行优化以减少代码重复。
iBATIS 文档中有这样的一个提示,即对于较小且较为简单的项目,注释可以更为简单和易读。不过,较 XML 配置而言,注释的功能相对有限。若项目中包含复杂的对象或复杂的数据库结构,请考虑使用 XML 配置,而不是 Java 注释。
先说SQL映射文件 *.xml
数据类当然,基本跟以前差不多:
DAO类:
接口定义:
ibatis实现功能类:
外部调用类:
测试用例类:
表结构SQL
DAO测试:
写的比较简单,希望对大家有点用。呵呵。
总的来说,配置更简单了。当然,你还可以到网上找些自动生成的工具。
那样更方便了 , 国内国外都有。推荐一下:http://tomcatmonitor.googlecode.com/files/abator.swf
iBATIS 3 是一个 ORM 持久框架,用来将 Java 对象内的属性映射到数据库内的表列。iBATIS 以映射为中心,重点在于映射一个优秀的对象模型与一个优秀的关系型数据库设计。
iBATIS 3 内的一个新特性是使用 Java 注释进行映射,这就使得映射更为整洁也更为直观,而且可以以 Java源代码的形式为很多项目所用。iBATIS 3 还提供了使用 XML配置文件进行对象映射的功能。这种双重配置方法的存在让您可以为自己的项目选用最为简单的配置 iBATIS 的方式。
iBATIS 3 带来了一些新的变化,允许您利用 Java 5 注释。通过使用注释,您可以创建 mapper 接口来供您在 Java 代码内进行从对象到数据库的全部映射。清单 8 所示的代码展示了这个用于配置(并非 XML 配置)的 AutomobileMapper 接口。
在 Automobile mapper 的 XML 配置中,resultMap 元素用来映射 model_year 数据库列与 Automobile 对象上的 year 字段。这个映射相当简单,可以在注释内进行,只要使用为该列赋别名的 SQL 特性就可以了,这个特性可由在 @Select 注释内定义的 SQL 完成。
AutomobileMapper 接口内的 Select 注释将 selectAutomobile 方法映射到用来根据给定值从 automobiles 表选择一个记录的 SQL。这个值被指定为实参的 id 参数并被作为 #{id}包括在这个 SQL 语句内,正如其在 XML 配置中那样。使用 Java 接口映射这些 SQL 方法的一个极大的好处是 feedbac会以编译时错误的形式出现在 Java 编辑器中。这样一来,我们就可以确认这些方法均能返回正确的类型,而 XML配置通常需要先执行代码才能找到错误。
此外,iBATIS 3 现在还支持接口继承,允许对 Java 接口进行优化以减少代码重复。
iBATIS 文档中有这样的一个提示,即对于较小且较为简单的项目,注释可以更为简单和易读。不过,较 XML 配置而言,注释的功能相对有限。若项目中包含复杂的对象或复杂的数据库结构,请考虑使用 XML 配置,而不是 Java 注释。
先说SQL映射文件 *.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="User"> <resultMap id="UserResult" type="com.mylink.mipbs.model.User"> <result property="id" column="ID_" /> <result property="name" column="NAME_" /> <result property="password" column="PASSWORD_" /> <result property="realname" column="REALNAME_" /> <result property="sex" column="SEX_" /> <result property="company" column="COMPANY_" /> <result property="worktel" column="WORKTEL_" /> <result property="mobiletel1" column="MOBILETEL1_" /> <result property="mobiletel2" column="MOBILETEL2_" /> <result property="fax" column="FAX_" /> <result property="birthday" column="BIRTHDAY_" /> <result property="email" column="EMAIL_" /> <result property="address" column="ADDRESS_" /> <result property="postalcode" column="POSTALCODE_" /> <result property="idcard" column="IDCARD_" /> <result property="blocked" column="BLOCKED_" /> <result property="regdate" column="REGDATE_" /> <result property="lastloginDate" column="LASTLOGIN_DATE_" /> <result property="logincount" column="LOGINCOUNT_" /> </resultMap> <!-- 用于select查询公用抽取的列 --> <sql id="userColumns"> <![CDATA[ ID_ , NAME_ , PASSWORD_ , REALNAME_ , SEX_ , COMPANY_ , WORKTEL_ , MOBILETEL1_ , MOBILETEL2_ , FAX_ , BIRTHDAY_ , EMAIL_ , ADDRESS_ , POSTALCODE_ , IDCARD_ , BLOCKED_ , REGDATE_ , LASTLOGIN_DATE_ , LOGINCOUNT_ ]]> </sql> <!-- useGeneratedKeys="true" keyProperty="xxx" for sqlserver and mysql --> <insert id="insert" parameterType="com.mylink.mipbs.model.User" > <selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE"> select SEQG_USER_INFO_ID.nextval as id from dual </selectKey> <![CDATA[ INSERT INTO TG_USER_INFO ( ID_ , NAME_ , PASSWORD_ , REALNAME_ , SEX_ , COMPANY_ , WORKTEL_ , MOBILETEL1_ , MOBILETEL2_ , FAX_ , BIRTHDAY_ , EMAIL_ , ADDRESS_ , POSTALCODE_ , IDCARD_ , BLOCKED_ , REGDATE_ , LASTLOGIN_DATE_ , LOGINCOUNT_ ) VALUES ( #{id,jdbcType=DECIMAL} , #{name,jdbcType=VARCHAR} , #{password,jdbcType=VARCHAR} , #{realname,jdbcType=VARCHAR} , #{sex,jdbcType=VARCHAR} , #{company,jdbcType=VARCHAR} , #{worktel,jdbcType=VARCHAR} , #{mobiletel1,jdbcType=VARCHAR} , #{mobiletel2,jdbcType=VARCHAR} , #{fax,jdbcType=VARCHAR} , #{birthday,jdbcType=DATE} , #{email,jdbcType=VARCHAR} , #{address,jdbcType=VARCHAR} , #{postalcode,jdbcType=VARCHAR} , #{idcard,jdbcType=VARCHAR} , #{blocked,jdbcType=DECIMAL} , #{regdate,jdbcType=DATE} , #{lastloginDate,jdbcType=DATE} , #{logincount,jdbcType=DECIMAL} ) ]]> <!-- oracle: order="BEFORE" SELECT sequenceName.nextval AS ID FROM DUAL DB2: order="BEFORE"" values nextval for sequenceName <selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="userId"> SELECT sequenceName.nextval AS ID FROM DUAL </selectKey> --> </insert> <update id="update" parameterType="com.mylink.mipbs.model.User"> <![CDATA[ UPDATE TG_USER_INFO SET NAME_ = #{name,jdbcType=VARCHAR} , PASSWORD_ = #{password,jdbcType=VARCHAR} , REALNAME_ = #{realname,jdbcType=VARCHAR} , SEX_ = #{sex,jdbcType=VARCHAR} , COMPANY_ = #{company,jdbcType=VARCHAR} , WORKTEL_ = #{worktel,jdbcType=VARCHAR} , MOBILETEL1_ = #{mobiletel1,jdbcType=VARCHAR} , MOBILETEL2_ = #{mobiletel2,jdbcType=VARCHAR} , FAX_ = #{fax,jdbcType=VARCHAR} , BIRTHDAY_ = #{birthday,jdbcType=DATE} , EMAIL_ = #{email,jdbcType=VARCHAR} , ADDRESS_ = #{address,jdbcType=VARCHAR} , POSTALCODE_ = #{postalcode,jdbcType=VARCHAR} , IDCARD_ = #{idcard,jdbcType=VARCHAR} , BLOCKED_ = #{blocked,jdbcType=DECIMAL} , REGDATE_ = #{regdate,jdbcType=DATE} , LASTLOGIN_DATE_ = #{lastloginDate,jdbcType=DATE} , LOGINCOUNT_ = #{logincount,jdbcType=DECIMAL} WHERE ID_ = #{id} ]]> </update> <delete id="delete" parameterType="java.lang.Long"> <![CDATA[ delete from TG_USER_INFO where ID_ = #{id} ]]> </delete> <select id="getById" parameterType="java.lang.Long" resultMap="UserResult"> select <include refid="userColumns" /> <![CDATA[ from TG_USER_INFO where ID_ = #{id} ]]> </select> <sql id="userDynamicWhere"> <!-- ognl访问静态方法的表达式 为@class@method(args),以下为调用rapid中的Ognl.isNotEmpty()方法,还有其它方法如isNotBlank()可以使用,具体请查看Ognl类 --> <where> <if test="@Ognl@isNotEmpty(id)"> and ID_ = #{id} </if> <if test="@Ognl@isNotEmpty(name)"> and NAME_ = #{name} </if> <if test="@Ognl@isNotEmpty(password)"> and PASSWORD_ = #{password} </if> <if test="@Ognl@isNotEmpty(realname)"> and REALNAME_ = #{realname} </if> <if test="@Ognl@isNotEmpty(sex)"> and SEX_ = #{sex} </if> <if test="@Ognl@isNotEmpty(company)"> and COMPANY_ = #{company} </if> <if test="@Ognl@isNotEmpty(worktel)"> and WORKTEL_ = #{worktel} </if> <if test="@Ognl@isNotEmpty(mobiletel1)"> and MOBILETEL1_ = #{mobiletel1} </if> <if test="@Ognl@isNotEmpty(mobiletel2)"> and MOBILETEL2_ = #{mobiletel2} </if> <if test="@Ognl@isNotEmpty(fax)"> and FAX_ = #{fax} </if> <if test="@Ognl@isNotEmpty(birthday)"> and BIRTHDAY_ = #{birthday} </if> <if test="@Ognl@isNotEmpty(email)"> and EMAIL_ = #{email} </if> <if test="@Ognl@isNotEmpty(address)"> and ADDRESS_ = #{address} </if> <if test="@Ognl@isNotEmpty(postalcode)"> and POSTALCODE_ = #{postalcode} </if> <if test="@Ognl@isNotEmpty(idcard)"> and IDCARD_ = #{idcard} </if> <if test="@Ognl@isNotEmpty(blocked)"> and BLOCKED_ = #{blocked} </if> <if test="@Ognl@isNotEmpty(regdate)"> and REGDATE_ = #{regdate} </if> <if test="@Ognl@isNotEmpty(lastloginDate)"> and LASTLOGIN_DATE_ = #{lastloginDate} </if> <if test="@Ognl@isNotEmpty(logincount)"> and LOGINCOUNT_ = #{logincount} </if> </where> </sql> <select id="count" resultType="long"> select count(*) from TG_USER_INFO <include refid="userDynamicWhere"/> </select> <!-- 分页查询已经使用Dialect进行分页,也可以不使用Dialect直接编写分页 因为分页查询将传 offset,pageSize,lastRows 三个参数,不同的数据库可以根于此三个参数属性应用不同的分页实现 --> <select id="pageSelect" resultMap="UserResult"> select <include refid="userColumns" /> from TG_USER_INFO <include refid="userDynamicWhere"/> <if test="@Ognl@isNotEmpty(sortColumns)"> ORDER BY ${sortColumns} </if> </select> </mapper>
数据类当然,基本跟以前差不多:
public class User extends BaseEntity { //alias public static final String TABLE_ALIAS = "User"; public static final String ALIAS_ID_ = "用户ID"; public static final String ALIAS_NAME_ = "账号"; public static final String ALIAS_PASSWORD_ = "密码"; public static final String ALIAS_REALNAME_ = "真实姓名"; public static final String ALIAS_SEX_ = "性别"; public static final String ALIAS_COMPANY_ = "所属公司"; public static final String ALIAS_WORKTEL_ = "工作电话"; public static final String ALIAS_MOBILETEL1_ = "手机号1"; public static final String ALIAS_MOBILETEL2_ = "手机号2"; public static final String ALIAS_FAX_ = "传真"; public static final String ALIAS_BIRTHDAY_ = "生日"; public static final String ALIAS_EMAIL_ = "电子邮件"; public static final String ALIAS_ADDRESS_ = "家庭住址"; public static final String ALIAS_POSTALCODE_ = "邮编"; public static final String ALIAS_IDCARD_ = "身份证"; public static final String ALIAS_BLOCKED_ = "禁用"; public static final String ALIAS_REGDATE_ = "开通时间"; public static final String ALIAS_LASTLOGIN_DATE_ = "最后登录时间"; public static final String ALIAS_LOGINCOUNT_ = "登录次数"; //date formats public static final String FORMAT_BIRTHDAY_ = DATE_TIME_FORMAT; public static final String FORMAT_REGDATE_ = DATE_TIME_FORMAT; public static final String FORMAT_LASTLOGIN_DATE_ = DATE_TIME_FORMAT; //columns START private java.lang.Long id; private java.lang.String name; private java.lang.String password; private java.lang.String realname; private java.lang.String sex; private java.lang.String company; private java.lang.String worktel; private java.lang.String mobiletel1; private java.lang.String mobiletel2; private java.lang.String fax; private java.sql.Date birthday; private java.lang.String email; private java.lang.String address; private java.lang.String postalcode; private java.lang.String idcard; private java.lang.Boolean blocked; private java.sql.Date regdate; private java.sql.Date lastloginDate; private java.lang.Integer logincount; //columns END public User(){ } public User( java.lang.Long id ){ this.id = id; } public void setId(java.lang.Long value) { this.id = value; } public java.lang.Long getId() { return this.id; } public void setName(java.lang.String value) { this.name = value; } public java.lang.String getName() { return this.name; } public void setPassword(java.lang.String value) { this.password = value; } public java.lang.String getPassword() { return this.password; } public void setRealname(java.lang.String value) { this.realname = value; } public java.lang.String getRealname() { return this.realname; } public void setSex(java.lang.String value) { this.sex = value; } public java.lang.String getSex() { return this.sex; } public void setCompany(java.lang.String value) { this.company = value; } public java.lang.String getCompany() { return this.company; } public void setWorktel(java.lang.String value) { this.worktel = value; } public java.lang.String getWorktel() { return this.worktel; } public void setMobiletel1(java.lang.String value) { this.mobiletel1 = value; } public java.lang.String getMobiletel1() { return this.mobiletel1; } public void setMobiletel2(java.lang.String value) { this.mobiletel2 = value; } public java.lang.String getMobiletel2() { return this.mobiletel2; } public void setFax(java.lang.String value) { this.fax = value; } public java.lang.String getFax() { return this.fax; } public String getBirthdayString() { return date2String(getBirthday(), FORMAT_BIRTHDAY_); } public void setBirthdayString(String value) { setBirthday(string2Date(value, FORMAT_BIRTHDAY_,java.sql.Date.class)); } public void setBirthday(java.sql.Date value) { this.birthday = value; } public java.sql.Date getBirthday() { return this.birthday; } public void setEmail(java.lang.String value) { this.email = value; } public java.lang.String getEmail() { return this.email; } public void setAddress(java.lang.String value) { this.address = value; } public java.lang.String getAddress() { return this.address; } public void setPostalcode(java.lang.String value) { this.postalcode = value; } public java.lang.String getPostalcode() { return this.postalcode; } public void setIdcard(java.lang.String value) { this.idcard = value; } public java.lang.String getIdcard() { return this.idcard; } public void setBlocked(java.lang.Boolean value) { this.blocked = value; } public java.lang.Boolean getBlocked() { return this.blocked; } public String getRegdateString() { return date2String(getRegdate(), FORMAT_REGDATE_); } public void setRegdateString(String value) { setRegdate(string2Date(value, FORMAT_REGDATE_,java.sql.Date.class)); } public void setRegdate(java.sql.Date value) { this.regdate = value; } public java.sql.Date getRegdate() { return this.regdate; } public String getLastloginDateString() { return date2String(getLastloginDate(), FORMAT_LASTLOGIN_DATE_); } public void setLastloginDateString(String value) { setLastloginDate(string2Date(value, FORMAT_LASTLOGIN_DATE_,java.sql.Date.class)); } public void setLastloginDate(java.sql.Date value) { this.lastloginDate = value; } public java.sql.Date getLastloginDate() { return this.lastloginDate; } public void setLogincount(java.lang.Integer value) { this.logincount = value; } public java.lang.Integer getLogincount() { return this.logincount; } public String toString() { return new ToStringBuilder(this) .append("Id",getId()) .append("Name",getName()) .append("Password",getPassword()) .append("Realname",getRealname()) .append("Sex",getSex()) .append("Company",getCompany()) .append("Worktel",getWorktel()) .append("Mobiletel1",getMobiletel1()) .append("Mobiletel2",getMobiletel2()) .append("Fax",getFax()) .append("Birthday",getBirthday()) .append("Email",getEmail()) .append("Address",getAddress()) .append("Postalcode",getPostalcode()) .append("Idcard",getIdcard()) .append("Blocked",getBlocked()) .append("Regdate",getRegdate()) .append("LastloginDate",getLastloginDate()) .append("Logincount",getLogincount()) .toString(); } public int hashCode() { return new HashCodeBuilder() .append(getId()) .append(getName()) .append(getPassword()) .append(getRealname()) .append(getSex()) .append(getCompany()) .append(getWorktel()) .append(getMobiletel1()) .append(getMobiletel2()) .append(getFax()) .append(getBirthday()) .append(getEmail()) .append(getAddress()) .append(getPostalcode()) .append(getIdcard()) .append(getBlocked()) .append(getRegdate()) .append(getLastloginDate()) .append(getLogincount()) .toHashCode(); } public boolean equals(Object obj) { if(obj instanceof User == false) return false; if(this == obj) return true; User other = (User)obj; return new EqualsBuilder() .append(getId(),other.getId()) .append(getName(),other.getName()) .append(getPassword(),other.getPassword()) .append(getRealname(),other.getRealname()) .append(getSex(),other.getSex()) .append(getCompany(),other.getCompany()) .append(getWorktel(),other.getWorktel()) .append(getMobiletel1(),other.getMobiletel1()) .append(getMobiletel2(),other.getMobiletel2()) .append(getFax(),other.getFax()) .append(getBirthday(),other.getBirthday()) .append(getEmail(),other.getEmail()) .append(getAddress(),other.getAddress()) .append(getPostalcode(),other.getPostalcode()) .append(getIdcard(),other.getIdcard()) .append(getBlocked(),other.getBlocked()) .append(getRegdate(),other.getRegdate()) .append(getLastloginDate(),other.getLastloginDate()) .append(getLogincount(),other.getLogincount()) .isEquals(); } }
DAO类:
@Component public class UserDao extends BaseIbatis3Dao<User,java.lang.Long>{ public Class getEntityClass() { return User.class; } public void saveOrUpdate(User entity) { if(entity.getId() == null) save(entity); else update(entity); } public Page findByPageRequest(PageRequest pageRequest) { return pageQuery("User.pageSelect",pageRequest); } }
接口定义:
public interface UserManager { User getById(java.lang.Long id); void save(User u); void update(User u); void removeById (java.lang.Long id); Page findByPageRequest(PageRequest<Map> q); }
ibatis实现功能类:
@Component("userManager") @Transactional public class UserManagerImpl extends BaseManager<User,java.lang.Long> implements UserManager { private UserDao userDao; /**增加setXXXX()方法,spring就可以通过autowire自动设置对象属性*/ public void setUserDao(UserDao dao) { this.userDao = dao; } public EntityDao getEntityDao() { return this.userDao; } @Transactional(readOnly=true) public Page findByPageRequest(PageRequest pr) { return userDao.findByPageRequest(pr); } }
外部调用类:
public class UserAction extends BaseStruts2Action implements Preparable,ModelDriven{ //默认多列排序,example: username desc,createTime asc protected static final String DEFAULT_SORT_COLUMNS = null; //forward paths protected static final String QUERY_JSP = "/pages/User/query.jsp"; protected static final String LIST_JSP= "/pages/User/list.jsp"; protected static final String CREATE_JSP = "/pages/User/create.jsp"; protected static final String EDIT_JSP = "/pages/User/edit.jsp"; protected static final String SHOW_JSP = "/pages/User/show.jsp"; //redirect paths,startWith: ! protected static final String LIST_ACTION = "!/pages/User/list.do"; private UserManager userManager; private User user; java.lang.Long id = null; private String[] items; public void prepare() throws Exception { if (isNullOrEmptyString(id)) { user = new User(); } else { user = (User)userManager.getById(id); } } /** 通过spring自动注入 */ public void setUserManager(UserManager manager) { this.userManager = manager; } public Object getModel() { return user; } public void setId(java.lang.Long val) { this.id = val; } public void setItems(String[] items) { this.items = items; } /** * ExtGrid使用 * 列表 * @throws IOException */ public void extlist() throws IOException { PageRequest<Map> pr = ExtJsPageHelper.createPageRequestForExtJs(getRequest(), DEFAULT_SORT_COLUMNS); Page page = userManager.findByPageRequest(pr); List<User> Userlist = (List) page.getResult(); ListRange<User> resultList = new ListRange<User>(); resultList.setList(Userlist); resultList.setTotalSize(page.getTotalCount()); resultList.setMessage("ok"); resultList.setSuccess(true); outJson(resultList); } /** * extGrid保存 * @throws IOException */ public void extsave() throws IOException { Map<String, Object> result = new HashMap<String, Object>(); try { userManager.save(user); result.put("success", true); result.put("msg", "添 加 成 功!"); } catch (Exception e) { result.put("failure", true); result.put("msg", e.getMessage()); e.printStackTrace(); } outJson(result); } /** * extGrid修改 * @throws IOException */ public void extupdate() throws IOException { Map<String, Object> result = new HashMap<String, Object>(); try { userManager.update(user); result.put("success", true); result.put("msg", "修 改 成 功!"); } catch (Exception e) { result.put("failure", true); result.put("msg", e.getMessage()); e.printStackTrace(); } outJson(result); } /** * extGrid删除 * @throws IOException */ public void extdelete() throws IOException { String ids = getRequest().getParameter("ids"); String[] idarray = ids.split(","); Map<String, Object> result = new HashMap<String, Object>(); try { for (int i = 0; i < idarray.length; i++) { java.lang.Long id = new java.lang.Long((String)idarray[i]); userManager.removeById(id); } result.put("success", true); result.put("msg", "删除成功"); } catch (Exception e) { result.put("failure", true); result.put("msg", e.getMessage()); e.printStackTrace(); } outJson(result); } }
测试用例类:
public class UserManagerTest extends BaseManagerTestCase{ private UserManagerImpl manager; @Autowired public void setUserManager(UserManagerImpl manager) { this.manager = manager; } @Override protected String[] getDbUnitDataFiles() { return new String[]{"classpath:common_testdata.xml","classpath:User_testdata.xml"}; } @Test public void crud() { User obj = new User(); obj.setName(new java.lang.String("1")); obj.setPassword(new java.lang.String("1")); obj.setRealname(new java.lang.String("1")); obj.setSex(new java.lang.String("1")); obj.setCompany(new java.lang.String("1")); obj.setWorktel(new java.lang.String("1")); obj.setMobiletel1(new java.lang.String("1")); obj.setMobiletel2(new java.lang.String("1")); obj.setFax(new java.lang.String("1")); obj.setBirthday(new java.sql.Date(System.currentTimeMillis())); obj.setEmail(new java.lang.String("1")); obj.setAddress(new java.lang.String("1")); obj.setPostalcode(new java.lang.String("1")); obj.setIdcard(new java.lang.String("1")); obj.setBlocked(new java.lang.Boolean("1")); obj.setRegdate(new java.sql.Date(System.currentTimeMillis())); obj.setLastloginDate(new java.sql.Date(System.currentTimeMillis())); obj.setLogincount(new java.lang.Integer("1")); manager.save(obj); manager.getEntityDao().flush(); manager.update(obj); manager.getEntityDao().flush(); assertNotNull(obj.getId()); manager.removeById(obj.getId()); manager.getEntityDao().flush(); } }
表结构SQL
create table TG_USER_INFO ( ID_ NUMBER(10) not null, NAME_ VARCHAR2(100) not null, PASSWORD_ VARCHAR2(40) not null, REALNAME_ VARCHAR2(100), SEX_ VARCHAR2(100), COMPANY_ VARCHAR2(100), WORKTEL_ VARCHAR2(100), MOBILETEL1_ VARCHAR2(100), MOBILETEL2_ VARCHAR2(100), FAX_ VARCHAR2(100), BIRTHDAY_ DATE, EMAIL_ VARCHAR2(100), ADDRESS_ VARCHAR2(200), POSTALCODE_ VARCHAR2(10), IDCARD_ VARCHAR2(50), BLOCKED_ NUMBER(1), REGDATE_ DATE, LASTLOGIN_DATE_ DATE, LOGINCOUNT_ NUMBER(8) )
DAO测试:
public class UserDaoTest extends BaseDaoTestCase{ private UserDao dao; @Autowired public void setUserDao(UserDao dao) { this.dao = dao; } @Override protected String[] getDbUnitDataFiles() { return new String[]{"classpath:common_testdata.xml","classpath:User_testdata.xml"}; } @Test public void findByPageRequest() { int pageNumber = 1; int pageSize = 10; PageRequest<Map> pageRequest = new PageRequest(new HashMap()); pageRequest.setPageNumber(pageNumber); pageRequest.setPageSize(pageSize); pageRequest.setSortColumns(null); pageRequest.getFilters().put("name", "1"); pageRequest.getFilters().put("password", "1"); pageRequest.getFilters().put("realname", "1"); pageRequest.getFilters().put("sex", "1"); pageRequest.getFilters().put("company", "1"); pageRequest.getFilters().put("worktel", "1"); pageRequest.getFilters().put("mobiletel1", "1"); pageRequest.getFilters().put("mobiletel2", "1"); pageRequest.getFilters().put("fax", "1"); pageRequest.getFilters().put("birthday", "1"); pageRequest.getFilters().put("email", "1"); pageRequest.getFilters().put("address", "1"); pageRequest.getFilters().put("postalcode", "1"); pageRequest.getFilters().put("idcard", "1"); pageRequest.getFilters().put("blocked", "1"); pageRequest.getFilters().put("regdate", "1"); pageRequest.getFilters().put("lastloginDate", "1"); pageRequest.getFilters().put("logincount", "1"); Page page = dao.findByPageRequest(pageRequest); assertEquals(pageNumber,page.getThisPageNumber()); assertEquals(pageSize,page.getPageSize()); List resultList = (List)page.getResult(); assertNotNull(resultList); } }
写的比较简单,希望对大家有点用。呵呵。
发表评论
-
SpringCloud2 从入门
2019-03-30 09:46 835首先初步认识下它: ... -
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子
2017-09-22 14:58 929JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的 ... -
Maven3的POM.xml元素说明详解
2017-09-20 16:53 980Maven3的POM.xml元素说明 POM代表项目对象 ... -
MyBatis的foreach语句详解
2014-02-10 09:55 892foreach的主要用在构建in ... -
JSP获取所有参数并追加写入文件
2013-12-20 14:53 1140JSP获取所有参数并追加写入文件 <% ... -
Jquery+Spring3+Struts2+Ibatis3框架源代码工程(含权限)
2012-07-19 15:02 3737开发框架选择 Jquery1.6 + strust2.1 ... -
java开源-项目管理工具-java源代码
2012-03-17 15:11 3288因工作需要,想找些项目管理工具,找了一些,都觉得不 ... -
java 常用工具包(自己拓展)
2010-11-16 23:05 2881做了六七年的程序员,突然间发现自己常常去网上找工具类.怎么不自 ... -
请管理员删除此贴
2010-05-18 22:38 200rapid-framework一般的人应该不会陌生,国产的, ... -
java5, java6 的新特性
2010-05-09 22:36 1365下面简单的列出Java5和Ja ... -
Rapid-framework代码自动生成器
2010-05-08 22:36 1590rapid-framework是一个以spring为核心的we ... -
Dwr入门例子(附源代码下载-JBuilder2006工程)完成
2010-05-03 15:51 1527Dwr+ibatis+oracle9i入门例子(附源代码下载- ... -
dwr+ibatis+mysql +jsp 权限管理平台源代码
2010-04-15 11:49 2016JBuilder开发的一个权限管理平台源代码,适用于常见的 ... -
Hibernate入门示例(架构图)
2010-04-09 08:55 2460在 Java Web 开发应用中,Hibernate可以作为 ... -
java cms MyEclipse6.0 工程代码
2010-04-07 14:46 2422JEECMS是国内Java版开源网站内容管理系统(java c ... -
ibatis MyEclipse 代码 源代码 分解
2010-01-28 17:03 1581前面,已经发个工程。现在讲下里面代码的具体功能和作用。 我也 ... -
java读取文件及文件流
2010-01-28 16:10 2691package cn.xx.io.util; imp ...
相关推荐
通过这个简单的示例,我们可以了解到iBATIS如何配置数据源、设置行为以及定义SQL映射。在实际项目中,可以根据需求进行更复杂的配置,如使用连接池、配置缓存策略、处理复杂查询等。同时,iBATIS还支持动态SQL,使得...
Ibatis的主要目标是简化数据访问层的实现,使得数据库操作更为简单、灵活。 描述中提到的“博文链接:https://itsoul.iteye.com/blog/1407786” 提供了一个外部资源,可能包含了对Ibatis API的详细解析和实用示例。...
Ibatis,作为一个轻量级的Java持久层框架,因其简单易用、灵活性高而备受开发者喜爱。在这个示例项目中,我们将探讨Ibatis的核心概念,包括SQL映射文件、动态SQL、事务管理以及如何将Ibatis与Spring框架整合,以实现...
iBATIS是一个开源的Java框架,它为数据库访问提供了一个简单而强大的解决方案。这个框架的主要目的是将SQL语句与Java代码分离,使开发者能够编写可维护的、灵活的数据库操作代码,而无需处理传统的JDBC API。iBATIS...
本资料包"ibatis开发资料及简单示例"显然是为了帮助开发者快速入门和理解Ibatis的工作原理和使用方法。其中包含的JAR包可能是Ibatis的核心库和其他相关依赖,这些库文件是运行Ibatis项目所必需的。 首先,我们来...
【标题】:Ibatis2.0注解示例 【描述】:本教程将指导您如何构建一个基于注解的Spring 2.5、Struts2和Ibatis2的集成框架。 【标签】:java、ssi(Spring+Struts+Ibatis)、ibatis2 【部分内容】: 构建SSI...
自己写的ibatis例子,可以用来入门,也可以学习一下配置文件的配置方法,程序中对可以Student表进行增删改查,自己也可以根据需要添加新的方法,里面有源码和数据库脚本。有需要的,可以下过来看看。
iBatis 3.0引入了Executor执行器,包括SimpleExecutor、ReuseExecutor和BatchExecutor,分别对应简单执行、重用Statement和批量操作,提供了不同的性能优化策略。 6. **缓存机制** iBatis支持本地缓存和二级缓存...
这个"最简单的iBatis入门例子"将引领我们逐步理解并掌握iBatis的核心概念和基本用法。 首先,我们需要了解iBatis的基本架构。iBatis主要由三部分组成:配置文件(ibatis-config.xml)、映射文件(mapper.xml)和...
3. **添加依赖**:在pom.xml中引入Struts2和iBatis的依赖库,例如: ```xml <!-- Struts2 --> <groupId>org.apache.struts <artifactId>struts2-core <version>2.5.24 <!-- iBatis --> <groupId>org...
本示例将详细介绍在Oracle 11g数据库环境下,如何使用Ibatis进行基本的增删改操作。 **1. 配置环境** 首先,我们需要在项目中引入Ibatis2的jar包,包括核心库和对Oracle的驱动支持。确保pom.xml或build.gradle文件...
这个"iBatis经典示例"包含了该框架的核心功能演示,包括基本的增删改查操作,以及参数映射的内外部实现,是学习和理解iBatis功能的绝佳材料。 首先,我们来看增删改查(CRUD)操作。在数据库编程中,这四类操作是最...
Ibatis,全称为“Simple Object Access Protocol”,即简单对象访问协议,由Clinton Begin创建。它不是一个完整的ORM(对象关系映射)框架,而是一个SQL映射框架,允许开发者编写动态SQL,将SQL语句与Java代码分离,...
例如,清单1展示了示例应用程序中使用的Automobile类,这是一个简单的Java对象(POJO),ibatis3配置后,可以将其持久化到数据库或作为查询结果返回。 五、数据库表创建与脚本执行 清单2展示了用于创建automobiles...
在本文档中,我们将详细介绍如何通过简单的配置来使用ibatis(现在通常被称为MyBatis),并提供一个具体的示例来帮助理解整个配置过程及其应用场景。 #### 二、ibatis简介 ibatis(现称为MyBatis)是一个优秀的...
在实际应用中,Ibatis还支持动态SQL,比如`if`、`choose`(类似switch语句)、`when`、`otherwise`、`foreach`等标签,使得编写复杂的查询变得简单。此外,Ibatis也提供了结果映射功能,可以自动将查询结果转换为...
在这个"Ibatis的简单例子"中,我们将探讨如何使用Ibatis进行数据库的增删改查(CRUD)操作以及联合查询。 1. **安装与配置**: 在开始之前,你需要在项目中添加Ibatis的依赖,通常是通过Maven或Gradle。在Maven的`...
在这个“使用的iBatis简单例子”中,我们将深入探讨如何配置和使用iBatis进行数据库交互。 首先,iBatis的核心组件包括XML配置文件、SQL映射文件以及SqlSessionFactory。XML配置文件用于定义数据源、事务管理器等...