浅谈JDBC的概念理解与学习
来源:优易学  2011-11-29 15:34:40   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  ----------------------------------------------------
  创建数据源
  Propertiesprop=newProperties();
  prop.setProperty("driverClassName","com.mysql.jdbc.Driver");
  prop.setProperty("url","jdbc:mysql://localhost:3306/jdbc");
  prop.setProperty("username","root");
  prop.setProperty("password","root");
  #dbcp使用这个方法创建数据源,需要一个Property参数,参数中的键值对就为.properties文件中的配置
  #可以直接load进来,省的写了
  Propertiesprop=newProperties();
  InputStreamis=JdbcUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
  prop.load(is);
  DataSourcemyDataSource=BasicDataSourceFactory.createDataSource(prop);
  -------------------------------------------------------------------------
  模板模式对查询抽象,采用继承的方式(对查询来说,不够灵活,查询的列一变化,就得修改超类)
  策略模式(采用接口的方式传递一个接口的参数,通过匿名类为各种需求实现)
  -----------------------------------------------------------------------
  使用JdbcTemplate工具类,在spring框架中提供了一个JdbcTemplate工具类,这个类对JDBCAPI进行了很好的封装
  这个类就像我们自己对JDBC进行封装一样。只是代码列健壮,功能更强大而已。
  我们以后在实际项目中可以使用JdbcTemplate类来完全替代直接使用JDBCAPI这与直接使用jdbcapi没有太大性能区别
  使用JdbcTemplate工具类需要额外从spring开发包中导入spring.jar和commons-logging.jar
  关于jdbcTemplate查询,更新相关使用方法见练习
  如果想获取connection,自由进行操作,可以使用
  jdbc.execute(newConnectionCallback()
  {
  publicObjectdoInConnection(Connectionconn)throwsSQLException,
  DataAccessException
  {}
  });//拿到了Connction随你怎么用了
  Spring的NameParameterJdbcTemplate
  NameParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情它都能做
  NameParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能
  publicObjectqueryForObject(Stringsql,MapparamMap,RowMapperrowMapper)
  publicObjectqueryForObject(Stringsql,SqlParameterSourceparamSource,RowMapperrowMapper
  SqlParameterSource的两个主要实现MapSqlParameterSource和BeanPropertyParameterSource
  SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate,所以NamedParameterJdbcTemplate
  能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要
  增加了JDK5.0的泛型技术和可变长度参数支持
  simpleJdbcTemplate中有些方法不全,比如拿到主键的方法就没有,可以获取到NamedParameterJdbcTemplate
  调用它里面的方法
  getNamedParameterJdbcOperations()返回的是NamedParameterJdbcOperations其实现就是NamedParameterJdbcTemplate这个类
  getJdbcOperations()返回的是JdbcOperation其实现就是JdbcTemplate
  ++++++++++++++++++++++++++++++++++++++++++++++++++
  Map参数源:采用键值对方式传参(参数别名可任意,如:m,:n)
  staticUserfindUser(Useruser)
  {
  NamedParameterJdbcTemplatenamed=newNamedParameterJdbcTemplate(dataSource);
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:mandid<:n";
  Mapmap=newHashMap();
  map.put("m",user.getMoney());
  map.put("n",user.getId());
  Objectu=named.queryForObject(sql,map,newBeanPropertyRowMapper(User.class));//这个方法当查询对象多于一个或为null时会抛异常
  return(User)u;
  }
   Bean属性参数源使用方法(参数别名要与bean类的属性对应,如:money,:id)(通过&号也可以命名别名,不建议使用)
  staticUserfindUser(Useruser)
  {
  NamedParameterJdbcTemplatenamed=newNamedParameterJdbcTemplate(dataSource);
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:moneyandid<:id";
  SqlParameterSourceps=newBeanPropertySqlParameterSource(user);
  Objectu=named.queryForObject(sql,ps,newBeanPropertyRowMapper(User.class));//这个方法当查询对象多于一个或为null时会抛异常
  return(User)u;
  } //保存数据获得主键
  publicintupdate(Stringsql,SqlParameterSourceparamSource,KeyHoldergeneratedKeyHolder)staticvoidaddUser(Useruser)
  {
  NameParameterJdbcTemplatenamed=newNameParameterJdbcTemplate(dataSource);
  Stringsql="insertintouser(name,birthday,money)values(:name,:birthday,:money";
  SqlParameterSourceps=newBeanPropertySqlParameterSource(user);
  KeyHolderkeyHolder=newGeneratedKeyHolder();
  named.update(sql,ps,keyHolder);
  intid=keyHolder.getKey().intValue();user.setId(id);//如果不是整型的主键呢,使用Mapmap=keyHolder.getKeys();}
  JDBC的概念:使用泛型技术与可变长度的参数(JDK1.5版本以上)
  //泛型技术(JDK1.5以上版本可使用)
  //使用泛型技术与可变长度的参数(JDK1.5版本以上)
  staticUserfindUserSimple(Stringname)
  {
  SimpleJdbcTemplatesimple=newSimpleJdbcTemplate(JdbcUtil.getDataSource());
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:moneyandid<:id";
  //用这个泛型,返回结果就不用向下转型了
  //publicTqueryForObject(Stringsql,ParameterizedRowMapperrm,Object...args)throwsDataAccessException
  Useru=simple.queryForObject(sql,
  ParameterizedBeanPropertyRowMapper.newInstance(
  User.class),name);//这个行映射器的参数是可变长的Object...
  returnu;
  }

  //代码
  importjava.util.HashMap;
  importjava.util.Map;
  importorg.springframework.jdbc.core.BeanPropertyRowMapper;
  importorg.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
  importorg.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
  importorg.springframework.jdbc.core.namedparam.SqlParameterSource;
  importcom.feihu.domain.User;
  importcom.feihu.jdbc.JdbcUtil;
  publicclassSimpleJdbcTemplate
  {
  privatestaticNamedParameterJdbcTemplatenamed=newNamedParameterJdbcTemplate(
  JdbcUtil.getDataSource());
  ///参数命名方法查询NamedParameterJdbcTemplate
  //两种参数传递方法BeanPropertySqlParameterSource(user)、MapSqlParameterSource
  //bean属性参数源
  staticUserfindUser(Useruser)
  {
  //Bean属性参数源使用方法(参数别名要与bean类的属性对应,如:money,:id)(通过&号也可以命名别名,不建议使用)
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:moneyandid<:id";
  SqlParameterSourceps=newBeanPropertySqlParameterSource(user);
  Objectu=named.queryForObject(sql,ps,newBeanPropertyRowMapper(
  User.class));//这个方法当查询对象多于一个或为null时会抛异常
  return(User)u;
  }
  //Map参数源
  staticUserfindUser2(Useruser)
  {
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:mandid<:n";
  Mapmap=newHashMap();
  map.put("m",user.getMoney());
  map.put("n",user.getId());
  Objectu=named.queryForObject(sql,map,newBeanPropertyRowMapper(
  User.class));//这个方法当查询对象多于一个或为null时会抛异常
  return(User)u;
  }
  //泛型技术(JDK1.5以上版本可使用)
  //使用泛型技术与可变长度的参数(JDK1.5版本以上)
  staticUserfindUserSimple(Stringname)
  {
  SimpleJdbcTemplatesimple=newSimpleJdbcTemplate(JdbcUtil.getDataSource());
  Stringsql="selectid,name,money,birthdayfromuserwheremoney>:moneyandid<:id";
  //用这个泛型,返回结果就不用向下转型了
  //publicTqueryForObject(Stringsql,ParameterizedRowMapperrm,Object...args)throwsDataAccessException
  Useru=simple.queryForObject(sql,
  ParameterizedBeanPropertyRowMapper.newInstance(
  User.class),name);//这个行映射器的参数是可变长的Object...
  returnu;
  }
  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训