如何在id里面怎么设置页码做多个数据源

3915人阅读
iOS相关(20)
要在view之间传数据大家都知道用delegate,我这里谈一下心得,适合新手。
网上一搜一大把的传递数据,但是都是单个数据,比如-(void)passValue:(NSString*)
这有个毛用,我们手机界面那个大,传一个数据有个锤子用啊?听说罗永浩在富士康附近宾馆住了半个月,问题还解决不了,你说你一个搞英语的,非要去搞手机,好歹雷军和比尔盖茨也是程序员,这下玩大了。
回过来讲,要传递批量数据咋办呐?一开始我想用C++思路,传结构体,多简单呐!结果ARC不允许在结构体放NSString之类的(初学的,勿笑)。问了cocoachina后原来可以自己定义类,呵呵。
原型参考这篇文章,说的正好是批量传递的:
http://blog.csdn.net/ryantang03/article/details/7915045
不过里面的代码比较老了,我们现在用的是纯粹storyboard,没有了如下代码:
//点击进入第二个窗口的方法
- (IBAction)openBtnClicked:(id)sender {
SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@&SecondViewController& bundle:[NSBundle mainBundle]];
//设置第二个窗口中的delegate为第一个窗口的self
secondView.delegate =
[self.navigationController pushViewController:secondView animated:YES];
[secondView release];
取而代之的是prepareSegue,注意设置push的storyboard id
//在切换时此方法被调用,必须指定模态窗体的delegate为谁,否则模态窗体的delegate为nil
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@&segIDLeftWin&]){
LeftBtnViewController *srcView =segue.destinationViewC
srcView.delegate = //指定模态窗口的delegate
在切换到下一个view的时候调用prepareSegue,这样就可以提前指定delegate是谁,如果delegate按照上面那个网址定义的话,那编译器会报警告的,原因是类型不匹配。
总结一下:
1、新建一个h和m文件,专门定义数据结构类,注意类型要指定@property,m文件要指定@synthesize,这样才能像C语言一样用“点”来引用,OC是不是很强大?
2、可以把协议/代理也放到上面的h文件声明,这样对一个工程来说比较集中,各有所好
自定义delegate方法可以参考这里:http://blog.csdn.net/chengyingzhilian/article/details/7873365
3、修饰delegate的@property最好用id类型,否则容易引起编译器的类型不匹配警告:
@property (nonatomic,weak)
4、在实现代理函数的类加入:
#pragma mark - dataPassGroupDelegate
同时要在h文件的类定义里加入&&表示使用这个delegate
附代码:传递数据类的h文件:
//定义一个多个数据的类,用来传递数据
@interface dataPassGroup : NSObject{
NSString *userN
NSString *
@property(nonatomic,strong) NSString *userN
@property(nonatomic,strong) NSString *
@property(assign)
传递数据类的m文件
#import &DataPassGroup.h&
@implementation dataPassGroup
//#synthesize关键字: 根据@property设置,自动生成成员变量相应的存取方法,从而可以使用 点操作符 来方便的存取该成员变量
@synthesize userName,gender,
被调用view的delegate定义(h文件):
//实现一个delegate
@protocol dataPassGroupDelegate
-(void)LeftWindowDidC
-(void)LeftWindowDidDone:(dataPassGroup *)
//本窗口的类实现
@interface LeftBtnViewController : UIViewController{
__weak IBOutlet UITextField *edtDataI
__weak IBOutlet UITextField *edtNameI
__weak IBOutlet UITextField *edtAgeI
dataPassGroup *
- (IBAction)onBtnLeftWinBackPress:(id)
- (IBAction)onBtnLeftWinDonePress:(id)
//还需要声明这个delegate
@property (nonatomic,weak)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2085024次
积分:23102
积分:23102
排名:第225名
原创:264篇
转载:226篇
评论:529条
(1)(5)(1)(2)(3)(1)(2)(4)(4)(2)(1)(1)(1)(4)(1)(3)(7)(13)(1)(2)(2)(1)(3)(1)(4)(4)(3)(1)(15)(6)(6)(5)(7)(6)(2)(3)(2)(7)(3)(2)(3)(1)(1)(1)(2)(4)(2)(1)(1)(2)(6)(5)(3)(4)(8)(17)(4)(8)(17)(17)(5)(7)(5)(17)(2)(7)(7)(8)(15)(23)(21)(33)(30)(21)(10)(5)(15)(10)Spring 管理配置多个数据源
- 开源中国社区
当前访客身份:游客 [
当前位置:
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性。而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据。
Spring配置多数据源的方式和具体使用过程。
Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:
一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相同)。
二是,非表级上的跨数据库。即,多个数据源不存在相同的表。
Spring2.x的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从Client中分离出来。Client提供选择所需的上下文(因为这是Client所知道的),由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。
具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑。
步骤如下:
一、动态配置多数据源
1. 数据源的名称常量类:
package com.frogking.
public class DataSourceConst {
public static final String Admin=&12&;
public static final String User = &123&;
2. 建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称:
package com.frogking.
package com.frogking.
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal(); // 线程本地环境
// 设置数据源类型
public static void setDataSourceType(String dataSourceType) { contextHolder.set(dataSourceType);
// 获取数据源类型   
public static String getDataSourceType() {
return (String) contextHolder.get();
// 清除数据源类型
public static void clearDataSourceType () {
contextHolder.remove();
& 3. 建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法 determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串:
package com.frogking.
package com.frogking.
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataS
public class DynamicDataSource extends AbstractRoutingDataSource {
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
4. 编写spring的配置文件配置多个数据源
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&&
&!-- 数据源相同的内容 --&
class=&org.springframework.jdbc.datasource.DriverManagerDataSource&
id=&parentDataSource&&
&property name=&driverClassName&
value=&com.mysql.jdbc.Driver&&
&/property&
&property name=&username&&
&value&root&/value&
&/property&
&property name=&password&&
&value&root&/value&
&/property&
&!-- 数据库test --&
&bean parent=&parentDataSource& id=&adminDataSource&&
&property name=&url&&
&value&jdbc:mysql://localhost:3306/test&/value&
&/property&
&!-- 数据库test1 --&
&bean parent=&parentDataSource& id=&userDataSource&&
&property name=&url&&
&value&jdbc:mysql://localhost:3306/test2&/value&
&/property&
&!-- 编写spring 配置文件的配置多数源映射关系 --&
&bean class=&com.frogking.datasource.DynamicDataSource&
id=&dataSource&&
&property name=&targetDataSources&&
&map key-type=&java.lang.String&&
&entry value-ref=&adminDataSource& key=&12&&&/entry&
&entry value-ref=&userDataSource& key=&123&&&/entry&
&/property&
&property name=&defaultTargetDataSource&
ref=&adminDataSource&&
&/property&
&!-- sessionFactory的配置 --&
class=&org.springframework.orm.hibernate3.LocalSessionFactoryBean&
id=&sessionFactory&&
&property name=&dataSource&&
&ref local=&dataSource&&&/ref&
&/property&
&!-- 实体映射资源 --&
&property name=&mappingResources&&
&value&com/frogking/entity/User.hbm.xml&/value&
&value&com/frogking/entity/Admin.hbm.xml&/value&
&/property&
&!-- 为sessionFactory配置Hibernate属性 --&
&property name=&hibernateProperties&&
&prop key=&hibernate.dialect&&
org.hibernate.dialect.MySQLDialect
&prop key=&hibernate.show_sq&&true&/prop&
&prop key=&hibernate.connection.autocommit&&false&/prop&
&prop key=&hibernate.cache.use_query_cache&&false&/prop&
&prop key=&hibernate.max_fetch_depth&&2&/prop&
key=&hibernate.bytecode.use_reflection_optimizer&&
&/property&
&bean id=&userDao& class=&com.frogking.dao.impl.UserDaoImpl&&
&property name=&sessionFactory& ref=&sessionFactory&&&/property&
5.删除Hibernate中表的配置文件catalog,他会自动匹配数据库如果指定catalog匹配将不启用
&?xml version=&1.0& encoding=&utf-8&?&
&!DOCTYPE hibernate-mapping PUBLIC &-//Hibernate/Hibernate Mapping DTD 3.0//EN&
&http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&&
Mapping file autogenerated by MyEclipse Persistence Tools
&hibernate-mapping&
&class name=&com.frogking.entity.Admin& table=&admin& catalog=&test&&
&id name=&id& type=&java.lang.Integer&&
&column name=&id& /&
&generator class=&native& /&
&property name=&name& type=&java.lang.String&&
&column name=&name& length=&100& /&
&/property&
&property name=&passwrod& type=&java.lang.String&&
&column name=&passwrod& length=&100& /&
&/property&
&/hibernate-mapping&
六。写dao层
七。编写测试类测试是否成功
package com.frogking.
import static org.junit.Assert.
import org.junit.T
import org.springframework.context.ApplicationC
import org.springframework.context.support.ClassPathXmlApplicationC
import com.frogking.dao.IUserD
import com.frogking.datasource.DataSourceC
import com.frogking.datasource.DataSourceContextH
import com.frogking.entity.U
public class UserTest {
ApplicationContext
ac= new ClassPathXmlApplicationContext(&applicationContext.xml&);
IUserDao userDao =(IUserDao)ac.getBean(&userDao&);
public void testSave() {
//hibernate创建实体
DataSourceContextHolder.setDataSourceType(DataSourceConst.Admin);//设置为另一个数据源
User user=new User();
user.setName(&wzhhh&);
user.setPassword(&hhh&);
userDao.save(user);//使用dao保存实体
DataSourceContextHolder.setDataSourceType(DataSourceConst.User);//设置为另一个数据源
userDao.save(user);//使用dao保存实体到另一个库中
共有0个评论
更多开发者职位上
有什么技术问题吗?
鉴客的其它问题
类似的话题

我要回帖

更多关于 id里面字体怎么加粗 的文章

 

随机推荐