??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码国产丝袜在线观看,亚洲熟妇少妇任你躁在线观看无码,亚洲欧洲日本天天堂在线观看 http://m.tkk7.com/yxhxj2006/category/52368.htmlzh-cn Sun, 12 Apr 2015 06:48:50 GMT Sun, 12 Apr 2015 06:48:50 GMT 60 从程序员到CTO的Java技术\U图 http://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.html奋斗成就男h 奋斗成就男h Sat, 11 Apr 2015 05:41:00 GMT http://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.html http://m.tkk7.com/yxhxj2006/comments/424308.html http://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/424308.html http://m.tkk7.com/yxhxj2006/services/trackbacks/424308.html 在技术方面无论我们怎么学习QL觉需要提升自已不知道自己处于什么水q了。但如果有清晰的指示图供参考还是非怸错的Q这h们清楚的知道我们大概处于那个阶段和水q?nbsp;
JavaE序?/span> 高Ҏ(gu)?/p>
反射、泛型、注释符、自动装和拆箱、枚丄、可?/p>
参数、可变返回类型、增强@环、静态导?/p>
核心~程
IO、多U程、实体类?/p>
集合cR正则表辑ּ?/p>
XML和属性文?/p>
囑Ş~程
AWTQJava2D/JavaSound/JMFQ、Swing、SWT、JFace
|\~程
Applet、Socket/TCP/UDP、NIO、RMI、CORBA
Java语法基础
cR抽象类、接口、最l类、静态类、匿名类、内部类、异常类、编码规?/p>
Java开发环?/p>
JDK、JVM、Eclipse、Linux
Java核心~程技?/p>
JavaQ设计而又非常_y的语a。学习JavaQ须从Java开发环境开始,到Java语法Q再到Java的核心API?/p>
1.Java开发入门:Java开发环境的安装与用,包括JDK命o、EclipseIDE、Linux下JavaE序的开发和部v{?/p>
2.Java语法基础Q基于JDK和Eclipse环境Q进行Java核心功能开发,掌握Java面向对象的语法构成,包括cR抽象类、接口、最l类、静态类、匿名类、内部类、异常的~写?/p>
3.Java核心APIQ基于JDK提供的类库,掌握三大核心功能Q?/p>
A。Java核心~程:包括Java~程的两大核心功?#8212;—Java输入/输出和多线E,以及常用的辅助类?#8212;—实体cR集合类、正则表辑ּ、XML和属性文件?/p>
B。Java囑Ş~程Q包括Sun的GUI库AWTQJava2D、JavaSound、JMFQ和SwingQIBM和GUI库SWT和Jface;
C. Java|\~程QAppletlg~程QSocket~程QNIO非阻塞Socket~程、RMI和CORBA分布式开发?/p>
4.Java高Ҏ(gu):掌握JDK1.4、JDK5.0、JDK6.0中的Java高Ҏ(gu),包括反射、泛型、注释,以及java高Ҏ(gu)?#8212;—自动装箱和拆、枚丄、可变参数、可变返回类型、增强@环、静态导入等?/p>
JavaEE初软g工程?/span> JSF框架开发技?/p>
配置文gQ页面导航、后台BeanQ、JSFlg库(JSF EL语言、HTML标签、事件处理、)、JSF核心库(格式转换、输入验证、国际化Q?/p>
Javaweb核心开发技?nbsp;
开发环境(Eclipse、LinuxQ?/p>
三大lgQJSP、JavaBean、ServletQ?/p>
扩展技术(EL、JSTL、TaglibQ?/p>
|页开发技?/p>
HTML、XML、CSS、JavaScript、AJAX
数据库设计技?/p>
SQL、MySql、Oracle、SQLServer、JDBC
Web服务器(Tomcat/Jetty/Resin/JBossWebQ?/p>
JavaWeb核心技术:
JavaWeb目开发的全过E可以分解ؓQ?/p>
|页开?数据库设?#8212;—>JavaWeb目开发,其中QjavaWeb?基本技术组成:JSP+JavaBean+Servlet+EL+JSTL+TaglibQ而JSF正是这6U技术进行有机结合的技术框Ӟ
JavaEE中软g工程?/span> 四种l典架构SSH1、SSI1、SSH2、SSI2
Struts1表现层框?/p>
入门配置、核心组件、标{ֺ、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS
Struts2表现层框?/p>
入门配置、核心组件、标{ֺ、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS
Spring业务层框?/p>
入门配置、IoC容器、MVC、标{ֺ、国际化、数据校验、数据库开?/p>
Hibernate持久层框?/p>
MySQL、Oracle、SQLServer iBATIS持久层框?/p>
MySQL、Oracle、SQLServer
Web服务器(Tomcat/Jetty/Resin/JBossWebQ?/p>
Java高软g工程?/span> javaWeb开源技术与框架
工作?/p>
规则引擎
搜烦引擎?/p>
~存引擎 ?/p>
d调度?/p>
w䆾认证
报表服务?/p>
pȝ试?/p>
集群?/p>
负蝲q?/p>
故障转移
JavaWeb分布式开发技?/p>
JTAQJava事物理Q?/p>
JAASQJava验证和授权服务)
JNDIQJava命名和目录服务)
JavaMailQJava邮g服务Q?/p>
JMSQjava信息服务Q?/p>
WebService(web服务)
JCAQjavaq接体系Q?/p>
JMSQjava理体系Q?/p>
应用服务器(JBossAS/WebLogic/WebSphereQ?/p>
JavaEEpȝ架构?/span> 面向云架构(COAQ?/p>
COA、SaaS、网D、集计、分布式计算、云计算
面向资源架构QROAQ?/p>
ROA、RESI
面向web服务架构QSOAQ?/p>
WebService、SOA、SCA、ESB、OSGI、EAI
Java设计模式
创徏式模式:抽象工厂/建造?工厂Ҏ(gu)/原型/单例
构造型模式Q适配?桥接/l合/装饰/外观/享元/代理
行ؓ型模式:责Q?命o/解释?q代?中介?备忘?观察?状?{略/模板Ҏ(gu)/讉K?/p>
Java与UML建模
对象图、用例图、组件图、部|图、序列图、交互图、活动图、正向工E与逆向工程
CTO首席技术官 发展战略
技术ȝ
团队提升
团队
目理
产品理
企业U项目实?带源?地址 Q?/strong> http://zz563143188.iteye.com/blog/1825168
攉五年的开发资料下载地址Q?nbsp; http://pan.baidu.com/share/home?uk=4076915866&view=share
下面的更深入的有兴趣可以了解一下,我的目的不是要大家掌握下面的知识Q只是希望扩展自q思维Q摘自牛人的技术博客?/span>
/**************************************************牛h必看*****************************************************************/
pȝ后台框架Q?/p>
前端工程师技能:
B2C?sh)子商务基础pȝ架构解析 q营B2C?久,来深ȝ意识到ITpȝ对确保规范化业务{Q支撑消费者端的均一服务有着军_性的作用。于是,一直想好好整理下相关的pȝ架构Q怎奈俗务~nQ?一直拖C日,猛然发现下周娃很可能p出生Q拖无可拖,快马加笔Q居然整出来了。本文的重点是理清系l的逻辑关系Q详l的功能模块请参见结N上的pȝ 架构图?br />首先Q聊下对pȝ逻辑架构的看法;我个人始l坚持认为,pȝ的开发与演化Q前C格follow消费者的购买程Q后台则盯牢订单{Q牢牢抓住这两条ȝQ才能高屋徏瓴的看清B2C的逻辑铑֒数据,更深ȝ规划功能模块Q从而更有效支撑实际业务的流转?br />前台pȝ包括Q商品展C,内容展示Q订单确认,支付pȝQ用户中心四大模?br />一Q商品展C?br />按照Ebay的内部分c,M商品以单个或批量的方式展示l消费者的功能均应归入此系l。因此,该系l至包括: AQ站内搜索(搜烦提示Q搜索规则,搜烦成功,搜烦不成功页Q相似推荐) BQ导航(频道DQ其他导航如销售排行,q告位,推荐位,文字链,Also buy{) CQ商品分c(品牌分类Q品cdc,属性分cd剪裁形式Q?br />DQ?登陆(商品列表,商品详细,商品zd) q里的访问逻辑是:A /B/C分流消费者去往相对个性化的页面,q陆页体现商家的核心诉求和价g递,完成call-to-action的第一步?br />二,内容展示 内容展示较ؓ单,对纯购物品牌而言包括Q?br />AQ公告区 BQ帮助中?br />CQ论坛(如需商城与论坛发生交互,则需自行开发,否则可集成discuz做同步登陆即可) 大家都知道,׃多说了?br />三,订单认 订单认Q就是帮助消费者正提交订单信息的环节Q看似简单,实则非常复杂Q需要对很多信息逻辑判断和处理,一般由2个部分组成: AQ购物RQ购物R层Q购物R面Q无注册购买Q?br />无注册购买是需要慎用的功能Q除非刻意追求用L短^快下单,如团?换购Q一般不推荐使用Q会造成pȝ异常复杂Q开发量也很大?br />BQ订单提交(q回购物车,收货地址&地址薄,支付方式判断Q配送方式,发票Q订单标讎ͼ实付金额计算{等Q?br />值得一提的是,几乎大多数的促销逻辑q算在这个环节完成,充分考虑各种促销方式之间的互斥与重叠是系l设计的核心Q需要充分考虑各种情况Q避免出现逻辑漏洞?br />四,支付pȝ 与一般的惌不同Q支付系l其实ƈ不简单等于第三方支付工具接入Q?br />AQ外部支付系l(支付宝将接口Q胦付通接口,|银直联端口Q信用ka分期端口Q?br />BQ内部支付系l(账户余额Q积分,C品卡,优惠券) 支付pȝ的逻辑设计不但需要考虑到各U极端情늚发生Q如一张订单先用礼品卡Q再用积分,最后网银支付)Q还要预留胦务做账所需的相兛_D,q充分考虑订单取消之后如何回滚各类内部账户?br />五,用户中心 用户中心的实质是用户自助功能的dashboardQ一?个部分组成: AQ注?amp;登陆Q快速注册,完整注册Q注册有C|推荐注册Q密码找回,ȝid登陆Qopen-id登陆如QQQ新微博等Q?br />BQ订单中心(历史订单状态,中间状态订单修改,物流q踪Q?br />CQ服务中心(各类自助服务如退ƄP退换货甌Q徏议与投诉{) DQ?信息理Q用户基本信息管理和账户信息理Q?br />用户中心的h(hun)值在于:可能引导用戯行获取所需的信息ƈ提交所需的服务,在提升服务准率Q及时性的同时降低对h工成本?br />后台pȝ包括Q商?amp;促销QCRMQ订单处理,WMSQ采购管理,财务理Q报表管理,pȝ讄QWApȝ9大模?br />一Q?商品&促销 商品&促销模块的核心在于确保消费者下单之前,前台内容所见即所?br />AQ?商品理Q品cȝ理,品牌理Q单品管理) BQ?促销理Q活动管理和自定义活动模板管理) 在上q模块中Q最重要的是2个部分:单品理中的扚w产品生成的自动程序和zd理?#8220;׃n与互?#8221;理。前者用于大q提升上新速度Q后者避免促销zd失控?br />二, CRM CRM是对B2C核心资源—会员的管理,服务与再营销pȝQ包括如下部分: AQ会员管理(会员信息的增删改查和到其他系l的链接Q?br />BQ用户关怀Q条件触发和人工触发相关EDM & 短信 & OBQ?br />CQ定向营销Q会员分l和营销zd理Q?br />DQ?客服理Q内定w常多Q集成所有需前台与后C互的功能Q详情还是看囑Q?br />EQ?呼叫中心QIVRQ坐席管理,l计报表Q参C递与H口嵌入Q?br />值得注意的,EDM和短信通道市面上已l有成熟的外包服务商Q一般都会外包;呼叫中心和在U客服自行开发成本太高,特别是呼叫中心系l,业务初期也都是外包的?br />三, 订单处理 订单处理是在订单未正式进入仓储部门处理之前,对订单的前置性处理环节?br />AQ订单录入(?sh)话订购Q网上下单,外部团购订单Q无金额订单录入如礼品单Q?br />BQ订单审核(自动审核和h工审核) CQRMA处理QRMA甌单和RMA处理单) RMA的逻辑也异常复杂,需要在效率和成本之间找qQ确保在不拖垮仓储部门的正常出入库的前提下对消费者端快速有效close工单Q对内部则需要控制成本,货损不能过预算上限?br />四, WMSQWarehouse Management system仓库理pȝQ?br />WMS的流E很长,功能模块也很多,大致分ؓ入库理Q库存管理,出库理和票据管?个模块四个模块,l细道来是另外一文章了Q各位可以参?我这文章:庖丁解牛—B2C仓储内部q作解密Q上Q中Q下Q?a style="color: #108ac6;">http://blog.sina.com.cn/wangxida0855 五, 采购理 采购理的核心是有效跟进采购合同/发票的状态,大货的采购入?退库,财务l算和在仓库存查询和处理?br />AQ供应商理Q供应商信息理Q合同发管理) BQ采购单理QPO单管理,负PO单管理) CQ库存管理(库存查询Q库存占用单Q库存变动logQ?br />六, 财务理 B2C的胦务管理,主要是对供应商,渠道和内部费用支出的成本控制?br />AQ供应商l算 BQ渠道结?br />CQ配送结?br />DQ?内部l算 说实在的Q哥对胦务这块也不算很了解,大家就看看Q图片上有明l?br />七, 报表理 报表是B2C业务的宏观表玎ͼ理论上说Q每个部门的KPI都应该从中找到?br />AQ搜索报表(站内搜烦量查询) BQ销售报表(多个l度销量查询,优惠怋用情况,报表导出Q?br />CQ胦务报?br />DQ?客服报表Q客服日报和坐席报表Q?br />前者反映与消费者发生的日常交互Q包括正怸异常Q,后者考核客服的工作W?br />EQ?仓储物流报表 q几块报表,是业务运作的核心Q涉及到公司机密Q就不能写的太细了,见谅?br />八, pȝ讄 q块大家都知道是q嘛的,也就不多说了Q分成三块?br />AQ基讄Q和业务有关的一些字D| BQ权限设|(不同账号的操作权限和操作记录Q?br />CQ其他设|?br />?ji)?WApȝQWeb AnalytcisQ?br />|站分析p?l,几乎全是外购Q很有能够自徏的,即自徏Q最多做几个单的模块。用于实战的Q要么是免费的GAQGoogle AnalyticsQ,要么是昂늚Omniture。这块的知识Q细l说来也是另外一文章了Q有兴趣的同学可以看我这科普文章:揭秘—我所知道的网 站分析(上,下) http://blog.sina.com.cn/wangxida0855 最后,上全pȝ大图Q再感慨一句,B2CpȝQ真是一个大工程啊?/p>
fr http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html
]]> Z注解?Spring MVC 单入?/title> http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html奋斗成就男h 奋斗成就男h Mon, 04 Nov 2013 15:23:00 GMT http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html http://m.tkk7.com/yxhxj2006/comments/405982.html http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/405982.html http://m.tkk7.com/yxhxj2006/services/trackbacks/405982.html 以下内容是经q自己整理资料、官Ҏ(gu)档所得:
web.xml 配置Q?/span>
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>加蝲/WEB-INF/spring-mvc/目录下的所有XML作ؓSpring MVC的配|文?lt;/description> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc/*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
q样Q所有的 .htm 的请求,都会?/span>DispatcherServlet 处理Q?/span>
初始?DispatcherServlet Ӟ该框架在 web 应用E序WEB-INF 目录中寻找一个名为[servlet-名称] - servlet.xml的文Ӟq在那里定义相关?/span>Beans Q重写在全局中定义的M Beans Q像上面?/span>web.xml 中的代码Q对应的是dispatcher -servlet.xml Q当然也可以使用 <init-param> 元素Q手动指定配|文件的路径Q?/span>
dispatcher -servlet.xml 配置Q?/span>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 使Spring支持自动组Ӟ如注解的Controller --> <context:component-scan base-package="com.minx.crm.web.controller"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans>
W一?/span>Controller Q?/span>
package com.minx.crm.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController { @RequestMapping("/index") public String index() { return "index"; } } @Controller 注解标识一个控制器Q?/span>@RequestMapping 注解标记一个访问的路径Q?/span>/index.htm Q, return "index" 标记q回视图Q?/span>index.jsp Q;
注:如果 @RequestMapping 注解在类U别上,则表CZ相对路径Q在Ҏ(gu)U别上,则标记访问的路径Q?/span>
?/span>@RequestMapping 注解标记的访问\径中获取参数Q?/span>
Spring MVC 支持 RESTful 风格?/span>URL 参数Q如Q?/span>
@Controller public class IndexController { @RequestMapping("/index/{username}") public String index(@PathVariable("username") String username) { System.out.print(username); return "index"; } } ?/span>@RequestMapping 中定义访问页面的 URL 模版Q?/span>{} 传入面参数Q?/span>@PathVariable 获取传入参数Q即可通过地址Q?/span>http://localhost:8080/crm/index/tanqimin.htm 讉KQ?/span>
Ҏ(gu)不同?/span>Web hҎ(gu)Q映到不同的处理方法:
使用登陆面作示例,定义两个Ҏ(gu)分L对?/span>GET h和?/span>POST h讉K login.htm 时的响应?/span>可以使用处理 GET h的方法显C图,使用 POST h的方法处理业务逻辑 Q?/span>
@Controller public class LoginController { @RequestMapping(value = "/login", method = RequestMethod.GET) public String login() { return "login"; } @RequestMapping(value = "/login", method = RequestMethod.POST) public String login2(HttpServletRequest request) { String username = request.getParameter("username").trim(); System.out.println(username); return "login2"; } } 在视N面,通过地址栏访?/span>login.htm Q是通过 GET h讉K面Q因此,q回登陆表单视图 login.jsp Q当在登陆表单中使用 POST h提交数据Ӟ则访?/span>login2 Ҏ(gu)Q处理登陆业务逻辑Q?/span>
防止重复提交数据Q可以?span style="padding: 0px; margin: 0px; font-weight: bold; ">重定向视图:
return "redirect:/login2" 可以传入Ҏ(gu)的参数类型:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session) { String username = request.getParameter("username"); System.out.println(username); return null; }
可以传入 HttpServletRequest ?/span>HttpServletResponse ?/span>HttpSession Q值得注意的是Q如果第一ơ访问页面, HttpSession 没被创徏Q可能会出错Q?/span>
其中Q?span style="padding: 0px; margin: 0px; color: blue; ">String username = request.getParameter("username");可以转换Z入的参数Q?/p>
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session,@RequestParam("username") String username) { String username = request.getParameter("username"); System.out.println(username); return null; }
使用 @RequestParam 注解获取 GET h?/span>POST h提交的参敎ͼ
获取 Cookie 的|使用 @CookieValue Q?/span>
获取 PrintWriter Q?/span>
可以直接?/span>Controller 的方法中传入 PrintWriter 对象Q就可以在方法中使用Q?/span>
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, @RequestParam("username") String username) { out.println(username); return null; }
获取表单中提交的|q封装到 POJO 中,传入 Controller 的方法里Q?/span>
POJO 如下Q?/span>User.java Q:
public class User{ private long id; private String username; private String password; …此处省略getter,setter... }
通过表单提交Q直接可以把表单值封装到 User 对象中:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, User user) { out.println(user.getUsername()); return null; }
可以把对象, put 入获取的 Map 对象中,传到对应的视图:
@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(User user, Map model) { model.put("user",user); return "view"; }
在返回的 view.jsp 中,可以根?/span>key 来获?/span>user 的|通过 EL 表达式, ${user } 卛_Q;
Controller 中方法的q回|
void Q多数用于?/span>PrintWriter 输出响应数据Q?/span>
String cd Q返回该 String 对应?/span>View Name Q?/span>
Lcd对象Q?/p>
q回 ModelAndView Q?/span>
自定义视图( JstlView Q?/span>ExcelView Q:
拦截器( Inteceptors Q:
public class MyInteceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { return false; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView mav) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception excptn) throws Exception { } }
拦截器需要实?/span>HandleInterceptor 接口Qƈ实现其三个方法:
preHandleQ拦截器的前端,执行控制器之前所要处理的Ҏ(gu)Q通常用于权限控制、日志,其中Q?/span>Object o 表示下一个拦截器Q?/span>
postHandle Q控制器的方法已l执行完毕,转换成视图之前的处理Q?/span>
afterCompletion Q视囑ַ处理完后执行的方法,通常用于释放资源Q?/span>
?/span>MVC 的配|文件中Q配|拦截器与需要拦截的 URL Q?/span>
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/index.htm" /> <bean class="com.minx.crm.web.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors>
国际化:
?/span>MVC 配置文g中,配置国际化属性文Ӟ
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="message"> </bean>
那么Q?/span>Spring ׃在项目中搜烦相关的国际化属性文Ӟ如: message.properties ?/span>message_zh_CN.properties
?/span>VIEW 中,引入 Spring 标签Q?lt;%@taglib uri=" http://www.springframework.org/tags " prefix="spring" %>Q?/span><spring:message code="key" /> 调用Q即可;
如果一U语aQ有多个语言文gQ可以更?/span>MVC 配置文g为:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message01</value> <value>message02</value> <value>message03</value> </list> </property> </bean> ]]>Struts2拦截器的使用 http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 17:10:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.html http://m.tkk7.com/yxhxj2006/comments/388129.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388129.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388129.html 阅读全文 ]]> struts2原理(? http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 17:10:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.html http://m.tkk7.com/yxhxj2006/comments/388130.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388130.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388130.html 1.Struts 2的基本流E?nbsp;Struts 2框架?个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑lg。在q?个部分里QStruts 2框架提供了核心控制器FilterDispatcherQ而用户需要实C务控制器和业务逻辑lg?nbsp; 2.核心控制器:FilterDispatcher FilterDispatcher是Struts 2框架的核心控制器Q该控制器作Z个Filterq行在Web应用中,它负责拦截所有的用户hQ当用户h到达Ӟ该Filter会过滤用戯求。如果用戯求以actionl尾Q该h被转入Struts 2框架处理?nbsp; Struts 2框架获得?.actionh后,根?.actionh的前面部分决定调用哪个业务逻辑lgQ例如,对于login.actionhQStruts 2调用名ؓlogin的Action来处理该h?nbsp; Struts 2应用中的Action都被定义在struts.xml文g中,在该文g中定义ActionӞ定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户hQ而class属性决定了该Action的实现类?nbsp; Struts 2用于处理用户h的Action实例Qƈ不是用户实现的业务控制器Q而是Action代理——因ؓ用户实现的业务控制器q没有与Servlet API耦合Q显然无法处理用戯求。而Struts 2框架提供了系列拦截器Q该pd拦截器负责将HttpServletRequesth中的h参数解析出来Q传入到Action中,q回调Action 的executeҎ(gu)来处理用戯求?nbsp; 昄Q上面的处理q程是典型的AOPQ面向切面编E)处理方式。图3.19昄了这U处理模型?nbsp; ?.19 Struts 2的拦截器和Action 从图3.19中可以看出,用户实现的ActioncM仅是Struts 2的Action代理的代理目标。用户实现的业务控制器(ActionQ则包含了对用户h的处理。用Lh数据包含?HttpServletRequest对象里,而用LActioncL需讉KHttpServletRequest对象。拦截器负责?HttpServletRequest里的h数据解析出来Qƈ传给业务逻辑lgAction实例?nbsp; 3.业务控制?nbsp; 正如从图3.19所看到的,业务控制器组件就是用户实现Actioncȝ实例QActionc里通常包含了一个executeҎ(gu)Q该Ҏ(gu)q回一个字W串——该字W串是一个逻辑视图名,当业务控制器处理完用戯求后Q根据处理结果不同,executeҎ(gu)q回不同字符?——每个字符串对应一个视囑?nbsp; E序员开发出pȝ所需要的业务控制器后Q还需要配|Struts 2的ActionQ即需要配|Action的如下三个部分定义: — Action所处理的URL?nbsp; — Actionlg所对应的实现类?nbsp; — Action里包含的逻辑视图和物理资源之间的对应关系?nbsp; 每个Action都要处理一个用戯求,而用戯求L包含了指定URL。当Filter Dispatcher拦截到用戯求后Q根据请求的URL和Action处理URL之间的对应关pL处理转发?nbsp; 4.Struts 2的模型组?nbsp; 实际上,模型lg已经出了MVC框架的覆盖范围。对于Struts 2框架而言Q通常没有为模型组件的实现提供太多的帮助?nbsp; 文本? ?.20 控制器调用模型组件Java EE应用里的模型lgQ通常指系l的业务逻辑lg。而隐藏在pȝ的业务逻辑lg下面的,可能q包含了DAO、领域对象等lg?nbsp; 通常QMVC框架里的业务控制器会调用模型lg的方法来处理用户h。也是_业务逻辑控制器不会对用户hq行M实际处理Q用戯求最l由模型lg负责处理。业务控制器只是中间负责调度的调度器Q这也是UAction为控制器的原因?nbsp; ?.20昄了这U处理流E?nbsp; 提示 在图3.20中看到Action调用业务逻辑lg的方法。当控制器需要获得业务逻辑lg实例Ӟ通常q不会直接获取业务逻辑lg实例Q而是通过工厂模式来获得业务逻辑lg的实例;或者利用其他IoC容器Q如Spring容器Q来理业务逻辑lg的实例?nbsp; 5.Struts 2的视囄?nbsp; Struts 2已经改变了Struts 1只能使用JSP作ؓ视图技术的现状QStruts 2允许使用其他的模板技术,如FreeMarker、Velocity作ؓ视图技术?nbsp; 当Struts 2的控制器q回逻辑视图名时Q逻辑视图q未与Q何的视图技术关联,仅仅是返回一个字W串Q该字符串作为逻辑视图名?nbsp; 当我们在struts.xml文g中配|?ActionӞ不仅需要指定Action的name属性和class属性,q要为Action元素指定pdresult子元素,每个result子元素定义一个逻辑视图和物理视图之间的映射。前面所介绍的应用都使用了JSP技术作图,故配|result子元素时没有指定type属性,默认使用JSP 作ؓ视图资源?nbsp; 如果需要在Struts 2中用其他视图技术,则可以在配置result子元素时Q指定相应的type属性即可。例如,如果需要用FreeMarkerQ则为result指定gؓfreemarker的type属性;如果想用Velocity模板技术作图资源,则ؓresult指定gؓvelocity的type属?#8230;… 6.Struts 2的运行流E?nbsp; l过上面介绍Q我们发现Struts 2框架的运行流E非常类gWebWork框架的流E?nbsp; 提示 在Struts 2的官方站点,我们可以扑ֈ如下说法QEssentiallyQStruts 2.0 is the technical equivalent of WebWork 2.3。Aside from the package and property renamingQit isn't much different thanQsayQmigrating from WebWork 2.1 to 2.2——意思是_Struts 2.0技术等同于WebWork 2.3框架Q除了包和属性被改名外。从WebWork 2.2q移到Struts 2不会比从WebWork 2.1q移到WebWork 2.2更复杂?nbsp; q里我们可以看到QStruts 2其实是WebWork 2.2的升U版Q这也就不难理解Qؓ什么WebWork和Struts 2如此怼Q?nbsp; 因此QStruts 2的运行流E与WebWork的运行流E完全相同,读者可以参看图1.8来了解Struts 2的运行流E?/span> ]]> struts2 的基?-拦截?/title> http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 17:09:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html http://m.tkk7.com/yxhxj2006/comments/388128.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388128.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388128.html 阅读全文 ]]> Struts2的注解功?/title> http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 17:08:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html http://m.tkk7.com/yxhxj2006/comments/388127.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388127.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388127.html 我们知道通常情况下, Struts2 是通过 struts.xml 配置的。但是随着pȝ规模的加大我们需要配|的文g会比较大Q虽然我们可以根据不同的pȝ功能不同模块的配置文g单独书写Q然后通过 <include> 节点不同的配置文g引入到最l的 struts.xml 文g中,但是毕竟q是要维护和理q些文gQ因此也会给l护工作带来很大的困扰。ؓ了解册个问题,可以考虑使用 struts2 的注解。实际上 struts2 中最主要的概念就?/span>package ?/span>action 以及 Interceptor {等概念Q所以只要明白这些注解就可以了?/span>如果希望使用 struts2 的注解功能,必须使用一个包 struts2-convention-plugin-2.1.8.1.jar Q我使用的环境是 struts2.1.8.1 。如果你使用了不同的版本Q找名字p?/span>
在以上所q的 jar 文g中定义了一pd的注解,其中比较主要的是Q?/span>
实际上, struts2 中的主要注解是q些Q当然了Q还有上面提到的 @interceptorRef ?/span>@exceptionMapping Q基本上Q掌握了q些注解可以了?/span>
但是如果惌q些注解真正工作Q必d配置文g增加几个帔R的定义:
struts.convention.default.parent.package Q这个常量表C缺省的包名是什么,因ؓ在实际应用中Q我们常常定义一个缺省的包,q个包中定义了一大堆的拦截器{等Q然后其他的包承自q个包。这个常量可以配也可以不配; struts.convention.package.locators Q这个常量表CZ?/span>action cȝ java 包的包名的后~是啥Q比?/span>action 。这个常量也可以不配Q?/span> struts.convention.package.locators.basePackage Q这个常量表CZ?/span>action cȝ java ?/span>package 的名字是啥;q个帔R也可以不配; 以上三个帔R都是辅助作用的,Z让注解真正的工作Q必d配置文g中增?/span><package> 节点的配|,臛_?/span><package name="myPackage" extends="struts-default" /> Q这h解就可以使用了?/span>
]]> ibatis 开发指?3 http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 16:56:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.html http://m.tkk7.com/yxhxj2006/comments/388123.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388123.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388123.html 阅读全文 ]]> ibatis 开发指?3 http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 16:55:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.html http://m.tkk7.com/yxhxj2006/comments/388122.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388122.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388122.html ibatis的调试相对困?出错的时候主要依据是log4生成的log文g?net的出错提C?q方面要能比较熟l的看懂. 下面q个配置基本上包含了最复杂的功?分页\搜烦\排序\~存\传值Hash表\q回hash表\动态sql 如果对下面这D配|能信手_来的话,那开发速度会大大的提? <statement id="XinxiTable_SelectAll" listClass="ArrayList" > resultMap="SimpleXinxi" parameterClass="Hashtable" cacheModel="xinxi-cache" > SELECT <dynamic prepend="top"> <isNotEqual prepend="top" property="TopNum" compareValue = "0"> $TopNum$ </isNotEqual> </dynamic> * FROM (select a.[iXinxiID],a.[sXinxiTitle],a.[iXinxiClassId],b.[sClassName], a.[dXinxiDate],a.[dXinxiYxq],a.[iXinxiHits],a.[sXinxiUser],a.[sRedirectUrl], ROW_NUMBER() OVER( <dynamic prepend="order by"> <isEqual prepend="order by" property="Sort" compareValue = "0"> a.iXinxiID desc </isEqual> <isEqual prepend="order by" property="Sort" compareValue = "1"> a.iXinxiID asc </isEqual> <isEqual prepend="order by" property="Sort" compareValue = "2"> a.iXinxiHits desc </isEqual> <isEqual prepend="order by" property="Sort" compareValue = "3"> a.iXinxiHits asc </isEqual> </dynamic> ) as row FROM [dbo].[XinxiTable] as a,[dbo].[XinxiClass] as b <dynamic prepend="where"> <isParameterPresent> <isNotEmpty prepend="and" property="XinxiType" > a.[iXinxiState]= $XinxiType$ </isNotEmpty> <isNotEqual prepend="and" property="XinxiClass" compareValue = "0"> a.[iXinxiClassID]= $XinxiClass$ </isNotEqual> <isEqual prepend="and" property="SearchType" compareValue = "1"> a.[sXinxiTitle] LIKE '%$Keyword$%' </isEqual> <isEqual prepend="and" property="SearchType" compareValue = "2"> (a.[sXinxiTitle] LIKE '%$Keyword$%' or a.[sXinxiContent] LIKE '%$Keyword$%') </isEqual> </isParameterPresent> </dynamic> and a.iXinxiClassId=b.iClassId )a <dynamic prepend="where"> <isParameterPresent> <isEqual prepend="and" property="IsPage" compareValue = "1"> row between $PageLower$ and $PageUpper$ </isEqual> </isParameterPresent> </dynamic> </statement> ]]> JSTL 学习、应用记?/title> http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 16:53:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html http://m.tkk7.com/yxhxj2006/comments/388120.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388120.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388120.html 阅读全文 ]]> 开发dao模型 http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 16:48:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.html http://m.tkk7.com/yxhxj2006/comments/388116.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388116.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388116.html 开发dao模型: 接口是用来定义操作的Q在q里应该定义Q添、删、改、查QID查、查询全部、模p查询){操作?nbsp; import java.util.* ; // 规定Z操作person表在此项目里的全部方?nbsp; public interface PersonDAO { // 增加操作 public void insert(Person person) throws Exception; // 修改操作 public void update(Person person) throws Exception; // 删除操作 public void delete(String id) throws Exception; // 按ID查询操作 public Person queryById(String id) throws Exception; // 查询全部 public List queryAll() throws Exception; // 模糊查询 public List queryByLike(String cond) throws Exception; } 另创Z个类 import java.util.*; public class PersonDAOImpl implements PersonDAO { // 增加操作 public void insert(Person person) throws Exception { } // 修改操作 public void update(Person person) throws Exception { } // 删除操作 public void delete(String id) throws Exception { } // 按ID查询操作 public Person queryById(String id) throws Exception { } // 查询全部 public List queryAll() throws Exception { } // 模糊查询 public List queryByLike(String cond) throws Exception { } } 接下来我们按Ҏ(gu)一个一个的实现功能Q?nbsp; Q?Q添加操作,传入参数是Person personQ同学们要理解ؓ什么传入PersonQ因为Person是数据beanQ是用来存放数据的不从前台到后台数据库q是从后台数据库到前収ͼPerson的角色都是用来传送数据的?nbsp; sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ; Q?Q修Ҏ(gu)作与d操作cM传入参数也ؓperson对象Q只是SQL的执行语句不同,当然修改要有条gQ即修改谁,q里是以id作ؓ修改条g的?nbsp; sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ; Q?Q删除操作,Z么这里没有以Person做参数呢Q原因是使用的过E中删除操作都是通过id来标志一行记录的Qؓ了用方便所以传一个id可以实现删除操作?nbsp; sql = "DELETE FROM person WHERE id=?" ; Q?Q查询操作一般分ZU:按ID查询、查询全部、模p查询?nbsp; W一U:按ID查询操作Q传入一个id可回一条记录,也就是一个person对象Qperson对应着数据库里的一行记录,所以返回值应该ؓPersoncd?nbsp; sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ; W二U:查询全部Q也是查询整张表的全部数据Q因为整张表有多条记录,所以对应就应该有多个person对象Q查询的时候我们可以用list存放多个person对象Q查询之后将该listq回?nbsp; sql = "SELECT id,name,password,age,email FROM person" ; W三U:模糊查询Q所谓模p查询是指在数据表中查找与指定字W串部分相匹配的字段的行Q如我们可以在一个用L数据库中查找姓名中含?#8220;?#8221;字的所有记录,可以用like语句来实现。由于结果可能有多条记录Q所以返回值好是存放Person对象的List?nbsp; sql = "SELECT id,name,password,age,email FROM person "+"WHERE name LIKE ? or email LIKE ?" ; ]]> 全注解SSH http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.html奋斗成就男h 奋斗成就男h Wed, 19 Sep 2012 16:43:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.html http://m.tkk7.com/yxhxj2006/comments/388114.html http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/388114.html http://m.tkk7.com/yxhxj2006/services/trackbacks/388114.html 阅读全文 ]]> struts2表单传?/title> http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html奋斗成就男h 奋斗成就男h Thu, 30 Aug 2012 14:49:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html http://m.tkk7.com/yxhxj2006/comments/386642.html http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html#Feedback 2 http://m.tkk7.com/yxhxj2006/comments/commentRss/386642.html http://m.tkk7.com/yxhxj2006/services/trackbacks/386642.html struts2表单传值类似栈,然后在action中把表单的各个名U用cd性表C就可以了。然后只需要加上get和setҎ(gu) Q?Q: 文本框:< s:textfield /> 提交Q?<s:textfield name="paramname"/> Ation处理Q用String或者intcd?/span>paramname 表示 接收Q(1Q: <s:textfield name=" paramname " value="%{ paramname }"/> Q?Q: < s:property value = " paramname " / "# paramname" > Q?Q:单选框Q?lt;s:radio /> 提交和接? <s:radio list="{'?,'?}" name="sex" label="性别"/> Q?Q:多选框Q?/span><s:select /> 提交和接Ӟ <s:checkboxlist name="hobby" listKey="key" listValue="value" list="#{'1':'球', '2':'球', '3':'乒乓?}" label="爱好"/> 其中key表示|而value指显C的文字?/span> Action处理Q用一个list集合表示 Q注意:千万不要用String[] 数组表示Q否则,值无法传回) Q?Q:下拉框: <s:select /> 提交和接受: <s:select list="#{1:'北京',2:'上v',3:'q东'}" label="abc" listKey="key" listValue="value" name="address"/> Action处理Q?/span>可以用一个list数组或者String 字符串表C都可以?/span>===================================================================================== 其中Q一般的表单都有三种方式传| Q?Q:cM于set集合Q只昄|其中里面是?/span><s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select>
(2)Q类gmapQlist前面是value|后面是显C的?/span>
<s:select list="#{1:'aa',2:'bb',3:'cc'}" label="abc" listKey="key" listValue="value" headerKey="0" headerValue="aabb">
3.从action-->jsp面Q?/span>
<%
HashMap map = new LinkedHashMap();
map.put(1,"aaa");map.put(2,"bbb");
map.put(3,"ccc");
request.setAttribute("map",map);
request.setAttribute("aa","2");
%>
JSP面Q?/span> <s:select list="#request.map" label="abc" listKey="key" listValue="value" value="#request.aa" headerKey="0" headerValue="aabb"></s:select>
]]> iBatis2之SqlMap配置ȝQ?8条) http://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.html奋斗成就男h 奋斗成就男h Mon, 27 Aug 2012 16:42:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.html http://m.tkk7.com/yxhxj2006/comments/386392.html http://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/386392.html http://m.tkk7.com/yxhxj2006/services/trackbacks/386392.html iBatis2之SqlMap配置ȝQ?8条) 订阅
SqlMap的配|是iBatis中应用的核心。这部分d占据了iBatis开发的70的工作量?br />1、命名空_
<sqlMap namespace="Account">Q在此空间外要引用此I间的元素,则需要加上命名空间名?/div>
2、实体的别名Q?/div>
<typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/>
如果有用到的全名的地方,可以用别名代替,受命名空间约束?/div>
3、插入操?/div>
对于自增主键的表Q插入可以不配置插入的主键列。否则是必须的?/div>
4、获取主?/div>
插入语句之前配置Q主要是针对Sequence主键而言Q插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,Ҏ(gu)是在插入语句标签<insert....>之前配置上:
<insert id="insertAccount" parameterClass="Account"> <selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL </selectKey>
insert into .... ........
</insert>
插入语句之后配置Q蛀牙是针对自增主键的表而言Q这c表在插入时不需要主键,而是在插入过E自动获取一个自增的主键。比如MySQL
<insert id="insertAccount" parameterClass="Account"> <selectKey resultClass="long" keyProperty="sctId"> SELECT LAST_INSERT_ID()
</selectKey>
insert into .... ........
</insert>
当然Q是否需要配|?lt;selectKey>Ҏ(gu)情况Q只要能保证记录有主键即可。一旦配|了<selectKey>Q就可以在执行插入操作时获取到新增记录的主键?nbsp;
6、SQL入参parameterClass
插入语句入参QparameterClass="cd? 来设定?/div>
查询语句入参Q可以设定类别名Q也可以讑֮为mapQ也可以讑֮为iBatis支持的原生类型(比如string、int、long{)Q当只有一个原生类型入参时Q则在SQL中用value关键字来引用。比如:
<select id="getById" parameterClass="long" resultMap="result_base"> select * from customer where id = #value# </select>
map是最强大的入参方式,M入参方式都可以{换ؓq种入参方式Q因为iBatis仅接受一个入参,当几个参数分布在不同对象中的时候,这些对象的属性(或者对象本wputQ到map中,然后一ơ传递给sql语句是非常有效。可以自己写一个将对象或者对象集合{换ؓmap的工P我已l实C个了Q?/div>
另外Qmap的中的元素(比如pobjQ是个复杂对象,则还可以在SQL中以#pobj.protyename#的格式来引用其中内嵌的属性。当然不推荐q么qӀ?/div>
7、返回值参数类?/div>
q回值参C同样有两U类型,一U是对象cdresultClass="Account"Q一U是resultMap="AccountResult"。这两种cd的选择常常会o惑不解,一a明其理:
当结果集列名和类属性名完全对应的时候,则应该用resultClass来指定查询结果类型。当然有些列明不对应Q可以在sql中用as重命名达C致的效果?/div>
当查询结果列名和cd性名对应不上的时候,应该选择resultMap指定查询l果集类型。否则,则查询出来填充的对象属性ؓI(数字的ؓ0Q对象的为nullQ?/div>
但是实际上resultMap是对一个Java Bean的映,需要先定义xml的映后Q才可以引用Q例如:
<resultMap id="AccountResult" class="Account"> <result property="id" column="ACC_ID"/> <result property="firstName" column="ACC_FIRST_NAME"/> <result property="lastName" column="ACC_LAST_NAME"/> <result property="emailAddress" column="ACC_EMAIL"/> </resultMap>
resultMap映射的结果的目的是要将查询的结果集l定到映对象的属性上?/div>
不管使用哪种q回值参数类型,其最l目的就是要把每条记录映到一个类的对象或者对象集合上Q如果有某个cd性映不上,则在得到的这个对象或对象集合中这个属性ؓI。映的属性可以是表与实体中的一部分。不要同时用两U返回值参数类型,q样只会令hqh?/div>
8、查询结果集分组
查询l果集排序有两种方式Q一是在l果集映上定义<resultMap id="result" class="bar" groupBy="id">Q另一U就是在SQL语句中分l。徏议在SQL语句中分l,以获得更大的可控制性?/div>
9、SQL中参数的引用
SQL中引用parameterClass的参数有三种方式Q?/div>
iBatis内置支持的类型,比如int、stringQ?value#来引用,q个value是关键字Q不可变?/div>
mapcd的参敎ͼ使用#keyName#来引用,keyName为键名?/div>
复杂对象的参敎ͼ使用#propertyName#来引用,propertyNamecd性的名字?/div>
10、模p查询中参数的引?/div>
模糊查询是针对字W串而言的,如果遇到两个单引可包含一个参敎ͼ则不能再?来引用变量了Q而应该改?Q比如:'%$varName$%'Q当Ӟ也可以?'%' || #varname# || '%' 来绕q此问题?/div>
11、SQL片段
可以通过<sql id="sql_xxx">...</sql>定义SQL片段Q然?lt;include refid="sql_xxx"/>来在各种语句中引用。达到服用目的,
12、动态SQL
可以通过使用动态SQL来组l灵zL更大的更通过的SQLQ这h大减了~码量,是iBatis应用的第二大亮点?/div>
比如Q一个动态的where条g
<dynamic prepend="where"> <isNotEmpty prepend="and" property="$$$$$"> $name like '%'|| #$name# ||'%' </isNotEmpty> <isGreaterThan prepend="and" property="$$$$$" compareValue="$$$number"> $code like '%'|| #$code# ||'%' </isGreaterThan> </dynamic>
当然Qprepend表示链接关键字,可以ZQ何字W串Q当为sql关键字时QiBatis自动判断是否应该d该关键字。该语法也很单,关键是要会用心思考组l动态SQL?/div>
q里面有一点要注意Q区?lt;isNotEmpty>?lt;isNotNull>区别Q当为空IZ?lt;isNotEmpty>q回trueQ当为空串时<isNotNull>q回真。哈哈,自己体会吧,说了反而啰嗦?/div>
13、结果集映射l承
l果集映的l承的目的是Z映射定义的复用,比如下面定义了两个映,AccountResultl承了baseQ?br /> <resultMap id="base" class="Account"> <result property="id" column="ACC_ID"/> <result property="firstName" column="ACC_FIRST_NAME"/> <result property="lastName" column="ACC_LAST_NAME"/> </resultMap> <resultMap id="AccountResult" class="Account" extends="Account.base"> <result property="emailAddress" column="ACC_EMAIL"/> </resultMap> q样Q就很容易扩展了一个映策略?br />
14、查询注?/div>
查询注入是在一个查询中嵌入另外一个查询,q样做的目的是ؓ了实现实体对象之间的兌兌关系Q一对一、一对多、多对多Q分单项双向。有兌些内容,是比较复杂的Q笔者对此做了深入研IӞq分别写了三来讲述?/div>
查询注入的实现就是在实体属性ؓ另外一个实体或者实体集合的时候,引入一个相关的查询来实玎ͼ例如Q客户和订单的映关p:
public class Customer { private Long id; private String name; private String address; private String postcode; private String sex; private List<Orders> orderlist = new ArrayList<Orders>();
<resultMap id="result" class="customer"> <result property="id" column="id"/> <result property="name" column="name"/> <result property="address" column="address"/> <result property="postcode" column="postcode"/> <result property="sex" column="sex"/> <result property="orderlist" column="id" select="orders.findByCustomerId"/> </resultMap>
在这个映中Qؓ了查询客L时候,能查询到相关的订单,可以在映?strong>orderlist属性的时候,其指向另外一个查?strong>orders.findByCustomerIdQ这个查询是以Customer?strong>id为参数来查询的?/div>
select="orders.findByCustomerId" q个查询定义如下Q?/div>
<select id="findByCustomerId" resultMap="result_base" parameterClass="long"> select * from orders where customerId = #value# </select>
原理是q么单,然后Ҏ(gu)实际情况Q可以自由实现实体间的关联关pR?/div>
14、iBatis的分|?/div>
iBatis的分|两种方式Q一炚w不神U,不要被网上的言所qh?/div>
W一U方式:l果集筛选分c先执行部分늚SQL查询语句Q然后得C个ResultSetQ然后根据分范围选择有效的记录填充到对象中,最l以集合的Ş式返回。对?0w条一下的记录的表Q不存在性能问题Q如果存在,你可以选择W二中方式?/div>
W二U方式:SQL分页Q通过l装分页cd的SQL来实现分c这个关键在于分参数的传递和分页SQL的构建。分SQL构g每种数据库都不一P不说了。分参数的传递却可以通用。我d用map分装入参Q连同分参C块传递进来,搞定了。如果原来没有考虑到分,而用的是对象做参敎ͼ则可以通过apache ?beanutilslg来实C个object到map之间的{换工P问题q刃而解?/div>
当然Q这q不是分|询应用的最高境界。思考,分页需要计一个总记录数Q记录数执行的sqlq回值是count(?)Q条件是除了分页以外的条Ӟ因此应该查询SQL静态分开Q以MySQLZQ可以将查询分ؓ查什么,和什么条件两部分Q在条g部分对分参数进行动态判断,如果分页参数׃分页Q如果有则分c这h后只需要两个组装的sql可以计L和分|询了。大大简化了问题的难度?Oracle的解x\也一P不一L地方是D分页SQL改变了?/div>
15、执行存储过E的配置
SQL Map 通过<procedure>元素支持存储q程。下面的例子说明如何使用h输出参数
的存储过E?nbsp;
<parameterMap id="swapParameters" class="map">
<parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="swapEmailAddresses" parameterMap="swapParameters">
{call swap_email_address (?, ?)}
</procedure>
调用上面的存储过E将同时互换两个字段Q数据库表)和参数对象(MapQ中的两?email地址。如果参数的 mode 属性设?INOUT ?OUTQ则参数对象的D修改。否则保持不变?nbsp;
注意Q要保始终只?JDBC 标准的存储过E语法。参?JDBC ?CallableStatement
文档以获得更详细的信息?/div>
16、就是iBatis中各Uid的命名了Q这个看h菜一,但是搞砸了会很痛苦。徏议如果有DAO层的话,DAO接口的名字和SQL语句id的名字保持一致。同Ӟ在DAO中将save和update装Z个方法(从Hibernate中学来的Q,q是非常好的。也可以直接在SQL层将插入和更新柔和在一块,太复杂,有点影响效率Q这见机行事了?/div>
另外Spring提供了各U数据操作模板,通过模板Q擦做数据也是“一句话”的问题,写个DAOq有必要么,其对iBatis来说Q根本没有必要。这P需要在领域zd层的设计上下功夫了?/div>
17 、iBatis的查询也可以配置~存{略Q缓存的配置很复杂,分很多中情况Q可以参看附件中?span style="line-height: 21px; font-size: 12px; ">
iBATIS-SqlMaps-2_cn.pdf ?9内容,有详l介l?/span>
18、偷懒的最高境界,让程序去q哪?0%的体力活。自׃仅把把关。Q何重复的zd都有规律可@的,一旦发C其中的规律,你就可以惛_法把自己从中解脱出来?/div>
iBatis也不例外Q每个表都有增删Ҏ(gu)、分늭操作。对应在每个DAOҎ(gu)上亦如此。可以通过数据库生成sqlmap、entity、daoQ然后将q些东西改吧改吧完成大部分的工作量。本人已l实现过了,当然开发这个工L前提是你对iBatis有深入研I和理解?/div>
-------------------------------------------------
下面是iBatis开发指南中内容Q?/div>
附录Q容易出错的地方
本附录是译者添加的Q列Z初学者容易出错的地方Q作为完成快速入门课E后的学?br />W记Q可以让初学者少C弯\。仅供参考?nbsp;
1) ?parameterMap ?resultMap 中,字段数据cd?java.sql.Types cd义的帔R?br />U。常用的数据cd包括 BLOBQCHARQCLOBQDATEQLONGVARBINARYQ?nbsp;
INTEGERQNULLQNUMERICQTIMEQTIMESTAMP ?VARCHAR {?nbsp;
2) 对于数据表中 NULLABLE 的字D,必须?parameterMap ?resultMap 中指定字D?br />的数据类型?nbsp;
3) 对于数据cd?DATEQCLOB ?BLOB 的字D,最好在 parameterMap ?resultMap中指定数据类型?nbsp;
4) 对于二进制类型的数据Q可以将 LONGVARBINARY 映射?byte[]?nbsp;
5) 对于文本cd较大的数据,可以?CLOB 映射?String?nbsp;
6) Java Bean 必须拥有~省的构造器Q即无参数的构造器Q?nbsp;
7) Java Bean 最好实?Serializable 接口Q以备应用的q一步扩展?/div>
本h认ؓQ尽量避免在每个入参后面附加参数的类型。以保持配置z,q且本h在长期开发中Q没有发现必要那么做?/div>
]]>
struts2传?/title> http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html奋斗成就男h 奋斗成就男h Mon, 27 Aug 2012 15:30:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html http://m.tkk7.com/yxhxj2006/comments/386388.html http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/386388.html http://m.tkk7.com/yxhxj2006/services/trackbacks/386388.html Struts2传值比struts1.X要方便多了。主要包括:面--->Action Action--->面两个斚w Q?Q:面?-->Action Q其中页面写法如下: < s:form action = " /ssh/reg.action " method = " post " > <s:textfield label="UserName:" name="username"></s:textfield> //在action中直接写username属性和get和setҎ(gu) <s:textfield label="Age:" name="person.age"></s:textfield> //在action中写对象Person person和get和setҎ(gu)。注意:此处l对不能写类名:PersonQ而应该是对象person <s:textfield label="Address:" name="person.address"></s:textfield> // 和person.agecM <s:submit value="Login"></s:submit> </s:form>
Q?Q:actioncd法:可以l承或者不l承ActionSupportcR注意是属性和get和setҎ(gu) public class RegAction extends ActionSupport{ private Person person; private String username; private List<Person> personList; public List<Person> getPersonList() { return personList; } public void setPersonList(List<Person> personList) { this .personList = personList; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public Person getPerson() { return person; } public void setPerson(Person person) { this .person = person; } /**其中q可以加单一属性,对象Q集?包括list和map)**/ @Override public String execute() throws Exception { List<Person> personList1 = new ArrayList<Person>(); Person person = new Person(); person.setAddress("hunan"); person.setAge(25); Person person1 = new Person(); person1.setAddress("beijing"); person1.setAge(35); personList1.add(person); personList1.add(person1); this .setPersonList(personList1); return SUCCESS; } }
Q?Q:action---->面 (1):单一属性:<s:property value="username"/> //属性名 (2):对象Q?lt;s:property value="person.address"/> // 对象?属性名 (3):list对象QList对象和Map对象 < s:iterator value = " personList " id = " Person " > // value是集合对象名Qid是别名,可以随便?/span> <s:property value="#Person.age"/> // #+别名+属性名 其中#W号不可以缺?/span> <s:property value="#Person.address"/> // 同上 </s:iterator>
Q?Q?span style="background-color: #eeeeee; font-size: 13px; ">< s:iterator value = " map " id = " id " status = " st " > // value是集合对象名Qid是别名,也可省,status也可以省?/span> key : <s:property value='key'/> // map的key|其中Qvalues只能为key或者valueQ不能ؓ其他?/span> value:<s:property vlaue='value'/> //同上 </s:iterator>
ȝQ在传值的时候,也可以采用servlet或者struts1.X的方式用 requestQsession q行传倹{比如:request/session.setAttribute(name,values){方式?/span>然后在页面中Q在使用request/session.getAttribute(name);但是不徏议这么去做,q是用struts2的方式传倹{?/span> ]]> struts2基础 http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.html奋斗成就男h 奋斗成就男h Mon, 27 Aug 2012 15:08:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.html http://m.tkk7.com/yxhxj2006/comments/386387.html http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/386387.html http://m.tkk7.com/yxhxj2006/services/trackbacks/386387.html struts2不是从strus1.Xl承Q而是从xworkl承而来。在使用struts中,量用到struts的内宏V?/span> Q?/span>1 Q:导入 strusts2 的基?/span>jar 包: struts2-core-2.2.3.1.jar xwork-core-2.2.3.1.jar ognl-3.0.1.jar freemarker-2.3.16.jar commons-logging-1.1.1.jar commons-lang-2.5.jar commons-io-2.0.1.jar commons-fileupload-1.2.2.jar commons-beanutils-1.7.0.jar javassist-3.11.0.GA.jar
Q?/span>2 Q:~写 jsp 面。注意: form 表单gؓQ?/span>form= “ / 工程?/span>/ 包的命名I间 (namespace) / 包名U?/span>(package) / 处理名( action Q?#8221;
Q?/span>3 Q:~写 web.xml 配置文gQ?/span>
<? xml version = "1.0" encoding = "UTF-8" ?>
< web-app version = "2.5"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
< filter >
< filter-name > struts2 </ filter-name >
< filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter-class >
</ filter >
< filter-mapping >
< filter-name > struts2 </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
Q?/span>4 Q编写处理类。该处理cM般承于 ActionSupport Q只需重新 excute() Ҏ(gu)卛_。注意:此处理类也可以是一般的c:Q不l承 ActionSupport Q?/span>. 其中的方法名也可以是L的。但是该处理Ҏ(gu)必须要有q回?/span>String Qƈ且这个返回g struts 中的 resutl ?/span>name 值必M致。比如:
public class Test {
public String testaa(){
System. out .println( "Testaa-------Testaa-------Testaa" );
return "abc" ;
}
}
Q?/span>5 Q: 配置 struts.xml 文g (struts.xml 文g必须要放?/span>src 目录下,而不是与 action cd在同一个目?/span>) 。其?/span>
Q?/span>i Q?/span>:package 里面的命名空_ namespace 可以?/span>package 名称不一致?/span>
(ii):action ?/span>Method Ҏ(gu)默认?/span>excute Q也可以是其他的Ҏ(gu)?/span>
(iii):result 中的 name g一定是 success 或?/span>fail 。可以是L|只需要这个g处理cM的处理方法返回g致就可以了?/span>
Q?/span>iv Q: struts.xml 可以有多?/span>package ?/span>
Q?/span>xv Q: <constant name="struts.action.extension" value="action,do" />
表示提交地址必须要以 .action 或?/span>.do l尾格式才能有效?/span>
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< package name = "j2eetest" extends = "struts-default" namespace = "/j2eetestaa" >
< action name = "test" class = "com.wsw.struts.action.Test" method = "testaa" >
< result name = "abc" > /main/success.jsp </ result >
< result name = "fail" > /main/fail.jsp </ result >
</ action >
</ package >
</ struts >
]]> Hibernate映射解析——七U映关p? http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.html奋斗成就男h 奋斗成就男h Wed, 15 Aug 2012 04:31:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.html http://m.tkk7.com/yxhxj2006/comments/385517.html http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/385517.html http://m.tkk7.com/yxhxj2006/services/trackbacks/385517.html 首先我们了解一个名词ORMQ全U是Q?/span>Object Relational Mapping Q,卛_象关pL。ORM的实现思想是关pL据库中表的数据映成对象Q以对象的Ş式展玎ͼq样开发h员就可以把对数据库的操作转化为对q些对象的操作。Hibernate正是实现了这U思想Q达C方便开发h员以面向对象的思想来实现对数据库的操作?/span>
Hibernate在实现ORM功能的时候主要用到的文g有:映射c(*.javaQ、映文Ӟ*.hbm.xmlQ和数据库配|文Ӟ*.properties/*.cfg.xmlQ,它们各自的作用如下?/p>
映射c?/span> Q?/span>*.java Q?/span>Q它是描q数据库表的l构Q表中的字段在类中被描述成属性,来可以实现把表中的记录映成cȝ对象了?/p>
映射文gQ?/span>*.hbm.xml Q?/span> Q它是指定数据库表和映射cM间的关系Q包括映类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字D和cd性名U的对应关系{?/p>
数据库配|文Ӟ *.properties/*.cfg.xml Q?/span> Q它是指定与数据库连接时需要的q接信息Q比如连接哪U数据库、登录数据库的用户名、登录密码以及连接字W串{。当然还可以把映类的地址映射信息攑֜q里?/p>
接下来让我们׃赯q?/span>Hibernate 的七U映关p:
1、单向一对一兌映射Qone-to-oneQ:
两个对象之间一对的关系Q例如:PersonQhQ?IdCardQn份证Q?/p>
有两U策略可以实C对一的关联映:
*主键兌Q即让两个对象具有相同的主键|以表明它们之间的一一对应的关p;数据库表不会有额外的字段来维护它们之间的关系Q仅通过表的主键来关联。如下图Q?/p>
例子Q?strong>单向一对一主键兌例子q接
*唯一外键兌Q外键关联,本来是用于多对一的配|,但是加上唯一的限制之后(采用 <many-to-one> 标签来映,指定多的一?/span>unique ?/span>true Q这样就限制了多的一端的多重性ؓ一 Q,也可以用来表CZ对一兌关系Q其实它?yu)是多对一的特D情c如下图Q?/p>
例子Q?strong>单向一对一唯一外键兌例子q接
注意Q因Z对一的主键关联映扩展性不好,当我们的需要发生改变想要将其变Z对多的时候变无法操作了,所以我们遇C对一兌的时候经怼采用唯一外键兌来解决问题,而很用一对一主键兌?/span>
2、单向多对一兌映射Qmany-to-oneQ:
多对一兌映射原理Q在多的一端加入一个外键,指向一的一端,如下图:
关键映射代码 ——在多的一端加入如下标{映:
<many-to-one name="group" column="groupid"/>
3?strong>单向一对多兌映射Qone-to-manyQ?/strong>Q?/p>
一对多兌映射和多对一兌映射原理是一致的Q都是在多的一端加入一个外键,指向一的一端。如下图Q学生和班Q:
注意Q它与多对一的区别是l护的关pM?/span>
*多对一l护的关pLQ多指向一的关p,有了此关p,加蝲多的时候可以将一加蝲上来
*一对多l护的关pLQ一指向多的关系Q有了此关系Q在加蝲一的时候可以将多加载上?/p>
关键映射代码 ——在一的一端加入如下标{映:
<set name="students"> <key column="classesid"/> <one-to-many class ="com.hibernate.Student"/> </set>
~陷Q因为多的一?/span>Student 不知?/span>Classes 的存在(也就?/span>Student 没有l护?/span>Classes 的关p)所以在保存 Student 的时候关pdD?/span>classesid 是ؓ null 的,如果该关系字段讄为非I,则将无法保存数据Q常用解军_法是改用双向兌映射Q参?/span>6 ?/span>
4?strong>单向多对多映(many-to-manyQ?/strong>Q?/p>
多对多关联映?span style="color: red">新增加一张表
才完成基本映,如下图:
关键映射代码 ——可以在User的一端加入如下标{映:
<set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class ="com.hibernate.Role" column="role_id"/> </set>
5?strong>双向一对一兌映射Q?/p>
Ҏ(gu)单向一对一映射Q需要在IdCard加入<one-to-one>标签Q它不媄响,只媄响加载。如下图Q?/p>
双向一对一主键映射关键映射代码——?/span>IdCard 端新加入如下标签映射 Q?/p>
<one-to-one name="person"/>
双向一对一唯一外键映射关键映射代码——?/span>IdCard 端新加入如下标签映射 Q?/p>
<one-to-one name="person"property-ref="idCard"/>
注意Q一对一唯一外键兌双向采用 <one-to-one> 标签映射Q必L?/span><one-to-one> 标签中的 property-ref 属性ؓ关系字段的名U?/span>
6?strong>双向一对多兌映射Q?span style="color: red">非常重要
Q?/strong>Q?/p>
采用一对多双向兌映射的目的主要是Z主要是ؓ了解决一对多单向兌的缺陯不是需求驱动的?/p>
一对多双向兌的映方式:
* 在一的一端的集合上采?lt;key>标签Q在多的一端加入一个外?/p>
* 在多的一端采?lt;many-to-one>标签
注意Q?/span><key> 标签?/span><many-to-one> 标签加入的字D保持一_否则会生数据?/span>
关键映射代码Q?/span>
在Classes的一端加入如下标{映:
<set name="students"inverse="true"> <key column="classesid"/> <one-to-many class ="com.hibernate.Student"/> </set>
在Student的一端加入如下标{映:
<many-to-one name="classes" column="classesid"/>
注释Q?/span>inverse 属?/span>
* inverse属性可以用在一对多和多对多双向兌上,inverse属性默认ؓfalseQؓfalse表示本端可以l护关系Q如果inverse为trueQ则本端不能l护关系Q会交给另一端维护关p,本端失效。所以一对多兌映射我们通常在多的一端维护关p,让一的一端失效?/p>
* inverse是控制方向上的反转,只媄响存?/p>
7?strong>双向多对多关联映?/strong>Q?/p>
双向的目的就是ؓ了两端都能将Ҏ(gu)加蝲上来Q和单向多对多的区别是双向需要在两端都加入标{映,需要注意的是:
* 生成的中间表名称必须一?/p>
* 生成的中间表中的字段必须一?/p>
Role Q角Ԍ端关键映代码:
<set name="users" table="t_user_role"> <key column="role_id"/> <many-to-many class ="com.hibernate.User" column="user_id"/> lt;/set>
User Q用P端关键映代码:
<set name="roles" table="t_user_role"> <key column="user_id"/> <many-to-many class ="com. hibernate.Role" column="role_id"/> lt;/set>
ȝQ对于上面这七种兌映射中,最重要的就是一对多的映,因ؓ它更贴近我们的现实生z,比如Q教室和学生可以是典型的一对多的关p,而我们开发Y件的目的之一是Z解决一些生zM重复性问题,把那些重复的问题交给计算机帮助我们完成,从而来提高我们的工作效率。一句话Q?span style="color: red">生活d不开~程Q编E更M开生活
?/p>
]]>
L上手SpringMVC http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.html奋斗成就男h 奋斗成就男h Wed, 15 Aug 2012 04:30:00 GMT http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.html http://m.tkk7.com/yxhxj2006/comments/385516.html http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.html#Feedback 0 http://m.tkk7.com/yxhxj2006/comments/commentRss/385516.html http://m.tkk7.com/yxhxj2006/services/trackbacks/385516.html 阅读全文 ]]>
վ֩ģ壺
һػƬ |
114һëƬ |
ŷ͵Ʒ |
Թ |
ѾƷպȾþ |
þþƷAVӰ |
òֻƵ |
Ʒþþþþþþ͵Ů |
Ƶ |
Ʒ߹ۿ97 |
Ļ߾Ʒ |
ۺרӰ |
ձxxxxɫƵ߹ۿ |
ĻƵ߹ۿ |
һëƬۿ |
91Ƶѿ |
ƷƷþþƷ
|
Ʒ߲ |
ŮƵaŮȫƤ |
þƷ |
Ӱ߹ۿ |
һӰԺ |
߲˳Ƶ߹ۿ |
av߹ۿ |
avֻ߹ۿ |
ɫˬƵ |
ɫ999þվ |
ѵɫƵ |
aŹavۺav |
һ߹ۿ |
ѾƷAVƬ߹ۿ |
www77777 |
LƷþ |
˳߹ۿվƷ
|
Ʒ߲ |
v߹ۿ |
þþþƷƵ |
һ߹ۿվ
|
AV鶹
|
վɫȫ |
վɫƬѸ |