当前位置: 首页 > news >正文

做网站意向客户云主机服务

做网站意向客户,云主机服务,网页设计与制作第六版,wordpress更新会改变设置上一博客主要是对单表的增删改查#xff0c;比较简单#xff0c;而且每个属性与table表的列都是一一对应名字也一样#xff0c;今天主要学习属性与table表列名不一致的处理#xff0c;主要有两种一是属性与列名不一致#xff0c;二是枚举的情况#xff0c;这里暂时考虑的…上一博客主要是对单表的增删改查比较简单而且每个属性与table表的列都是一一对应名字也一样今天主要学习属性与table表列名不一致的处理主要有两种一是属性与列名不一致二是枚举的情况这里暂时考虑的属性与列名不一致只是单表的情况至于属性如果是其他model涉及表与表之间的关系的放在下一博客。不过先介绍几个其他的知识点。这些都是参考官网http://www.mybatis.org/mybatis-3/zh/index.html大家也可以直接参考官网的。本篇博客还是在上一篇博客的基础上做的修改。一、Properties上一博客创建了一个DBConfig.xml,因为在上一博客只是做了关于数据库的配置其实它不仅仅可以配置数据库的属性还可以配置其他的好多属性比如properties。所以从这篇开始把DBConfig.xml的名字改为了Config.xml。这里为了使用properties先建了一properties文件:config.properties.drivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mybatis在Config.xml的configuration节点增加如下配置:如果再配置数据库连接的话就可以使用properties。View Code还有就是Properties在configuration节点设置的位置的问题可以按照下图的顺序设置各个属性节点因为在这个地方我也踩到了坑就是在使用typeAlias的时候我把typeAlias放在了mappers下面然后就报错了。二、typeAliasalias别名这个在sql种也经常用到在上一博客种我们在UserMapper.xml种如果要参数类型或返回值类型时都会这样Cuiyw.MyBatis.Model.User写上User的全称其实我们可以使用typeAlias来简化它来减少冗余。这样在用到Cuiyw.MyBatis.Model.User的地方都可以用别名User代替。如果还觉得麻烦可以直接指定包名就可以了。三、属性与列名映射这是今天的主题主要是两个内容一是枚举类型映射二是属性名与列名不一致怎么映射。1.自带枚举如果想使用mybatis自带的枚举类处理有2种方式一个是EnumTypeHandler一个是EnumOrdinalTypeHandler。2者的区别是EnumTypeHandler直接存储name值而EnumOrdinalTypeHandler会存储enum类里的序号值此时数据库表字段一般用int类型的处理。SELECT LAST_INSERT_ID()insert into user(name,age,status) values (#{name},#{age},#{status,typeHandlerorg.apache.ibatis.type.EnumTypeHandler})SELECT LAST_INSERT_ID()insert into user(name,age,status) values (#{name},#{age},#{status,typeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler})上面就是就是使用两种方式实现的新增下面截图是两种方式在数据库的存储情况。2.resultMap上面在sql中的status参数中配置但对于select的操作没有参数那该怎么办呢于是resultMap出现了。其实它的作用还有好多今天主要用它做个简单的例子同时也演示列名和属性名不一致的情况。虽然先只考虑单表的情况有时候数据库表的字段名与类的属性名也可能不是一一对应的这种怎么解决呢我们可以使用resultMap用它来做关系映射这样以后在用到的地方也只需要在select中增加属性resultMap,引用的它id就好也特别方便。这里要注意就是在resultMap设置的typeHandler与在insert中设置的要一致。select * from user where id#{id}还是使用昨天的代码先增加一个然后把增加的通过id查询出来。3.自定义枚举有时候mybatis自带的枚举并不能满足需求那我们也可以自定义枚举。MyBatis提供了org.apache.ibatis.type.BaseTypeHandler类用于我们自己扩展类型转换器上面的EnumTypeHandler和EnumOrdinalTypeHandler也都实现了这个接口。User类packageCuiyw.MyBatis.Model;public enumUserState {DISABLED(0),AVAILABLE(1);private intstatus;UserState(intstatus){this.statusstatus;}public static UserState fromValue(intvalue){for(UserState userState:UserState.values()){if(userState.statusvalue){returnuserState;}}throw new IllegalArgumentException(Cannot create evalue from value: value !);}public intgetStatus(){returnstatus;}}View CodeEnumStatusHandler自定义枚举类  这里采用的EnumOrdinalTypeHandler模式保存数字。在用的时候直接引用就好了。packageCuiyw.MyBatis.Model;importjava.sql.CallableStatement;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;public class EnumStatusHandler extends BaseTypeHandler{Overridepublic void setNonNullParameter(PreparedStatement ps, inti, UserState parameter, JdbcType jdbcType)throwsSQLException {//TODO Auto-generated method stubps.setInt(i, parameter.getStatus());}Overridepublic UserState getNullableResult(ResultSet rs, String columnName) throwsSQLException {//TODO Auto-generated method stubreturnUserState.fromValue(rs.getInt(columnName));}Overridepublic UserState getNullableResult(ResultSet rs, int columnIndex) throwsSQLException {//TODO Auto-generated method stubreturnUserState.fromValue(rs.getInt(columnIndex));}Overridepublic UserState getNullableResult(CallableStatement cs, int columnIndex) throwsSQLException {//TODO Auto-generated method stubreturnUserState.fromValue(cs.getInt(columnIndex));}}View Code4.自定义枚举优化上面是针对每个枚举类型创建一个TypeHandler,那如果多的话岂不是很麻烦那该怎么办呢有什么优化的方法没答案当然是有的啦。有单独的一个转到能应用多个那就会联想的泛型。1.定义接口packageCuiyw.MyBatis.Model;public interfaceValuedEnum {intgetValue();}2.枚举实现接口packageCuiyw.MyBatis.Model;public enum UserState implementsValuedEnum {DISABLED(0),AVAILABLE(1);private intstatus;UserState(intstatus){this.statusstatus;}//public static UserState fromValue(int value)//{//for(UserState userState:UserState.values())//{//if(userState.statusvalue)//{//return userState;//}//}//throw new IllegalArgumentException(Cannot create evalue from value: value !);//}////public int getStatus()//{//return status;//}public intgetValue() {//TODO Auto-generated method stubreturnstatus;}}View Code3.定义EnumTypeHandler在ValuedEnumTypeHandler构造函数中使用了getEnumConstants()方法它以声明顺序返回一个数组该数组包含构成此 class 对象所表示的枚举类的值或者在此 class 对象不表示枚举类型时返回 null这样就可以把枚举值与数字值对应起来放在map中。packageCuiyw.MyBatis.Model;importjava.sql.CallableStatement;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.HashMap;importjava.util.Map;importorg.apache.ibatis.type.BaseTypeHandler;importorg.apache.ibatis.type.JdbcType;public class ValuedEnumTypeHandler extends BaseTypeHandler{private Classtype;private Map map new HashMap();public ValuedEnumTypeHandler(Classtype) {if (type null) {throw new IllegalArgumentException(Type argument cannot be null);}this.type type;E[] enumstype.getEnumConstants();if (enums null) {throw new IllegalArgumentException(type.getSimpleName() does not represent an enum type.);}for(E e : enums) {ValuedEnum valuedEnum(ValuedEnum) e;map.put(valuedEnum.getValue(), e);}}Overridepublic void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throwsSQLException {//TODO Auto-generated method stubValuedEnum valuedEnum (ValuedEnum) parameter;ps.setInt(i, valuedEnum.getValue());}Overridepublic E getNullableResult(ResultSet rs, String columnName) throwsSQLException {int i rs.getInt(columnName);if(rs.wasNull()) {return null;}else{returngetValuedEnum(i);}}Overridepublic E getNullableResult(ResultSet rs, int columnIndex) throwsSQLException {int i rs.getInt(columnIndex);if(rs.wasNull()) {return null;}else{returngetValuedEnum(i);}}Overridepublic E getNullableResult(CallableStatement cs, int columnIndex) throwsSQLException {int i cs.getInt(columnIndex);if(cs.wasNull()) {return null;}else{returngetValuedEnum(i);}}private E getValuedEnum(intvalue) {try{returnmap.get(value);}catch(Exception ex) {throw newIllegalArgumentException(Cannot convert value to type.getSimpleName() by value., ex);}}}View Code4.使用
http://www.yutouwan.com/news/139072/

相关文章:

  • 移动 开发 网站建设wordpress 过滤插件
  • 岳阳做网站哪家好最专业的医疗网站建设
  • 济南微网站不下载直接登录qq聊天
  • 宜宾建设教育培训中心网站dw个人网页制作步骤
  • 怎么通过做网站挣钱医疗今科云平台网站建设技术开发
  • 网站和新媒体建设管理办法wordpress网站配置
  • 台州企业网站搭建厂家优客工场 网站开发
  • 网站加载动画效果loadingdw制作旅游网站教程
  • 国发网站建设wordpress调用描述
  • php网站的开发背景建设工程合同范本
  • 工会网站平台建设网易蜂巢 wordpress
  • 建网站哪个好做网站与网页有什么区别
  • 山西做网站的公司响应式 购物网站模板下载
  • 东莞网站优化的具体方案南京网页设计培训机构
  • 网网站建设与设计正确的网址格式怎么写
  • 网站点击排名网站备案为什么要闭站
  • 广阳网站制作网站建设能够不同地方
  • 那些语言可以建网站旅游网站建设的经济评价
  • 泸州网站公司seo指的是搜索引擎营销
  • 福州培训网站建设学校网页设计说明
  • 招生型网站建设怎样制作网站教程
  • 网站开发工程师制作kpi郑州市建设工程信息网官网
  • 局机关建设网站的意义wordpress网站如何
  • 江苏市场监督管理局app南昌seo外包公司
  • 可以做围棋题的网站苏州建站方法
  • 网站开发个人简介范文雷军做的网站
  • 如何构思公司网站想建网站须要什么条件
  • 建设网站教程论坛学网页设计有什么网站
  • 兰州网站制作wordpress 全站404
  • 公司注册流程及注意事项及细节网站页面优化技巧