1、数据库配置:
#MySQL
jdbc3.driverClassName=com.mysql.jdbc.Driver
#jdbc.url=jdbc\:mysql\://0.0.0.0\:3306/sss?useUnicode\=true&characterEncoding\=UTF-8
jdbc3.url=jdbc\:mysql\://0.0.0.0\:3306/sss?useUnicode\=true&characterEncoding\=UTF-8
#jdbc.url=jdbc\:mysql\://0.0.0.0\:3306/sss?useUnicode\=true&characterEncoding\=UTF-8
#jdbc.url=jdbc:mysql://0.0.0.0\:3306/sss?useUnicode=true&characterEncoding=UTF-8
jdbc3.username=root
jdbc3.password=123456
jdbc3.dbType=mysql
2、mvc配置:
<!--补录系统库 -->
<!-- 配置数据源3 -->
<bean id="dataSource_jdbc3" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc3.driverClassName}" />
<property name="jdbcUrl" value="${jdbc3.url}" />
<property name="user" value="${jdbc3.username}" />
<property name="password" value="${jdbc3.password}" />
<property name="acquireIncrement">
<value>${c3p0.acquireIncrement}</value>
</property>
<property name="initialPoolSize">
<value>${c3p0.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${c3p0.maxPoolSize}</value>
</property>
<property name="maxIdleTime">
<value>${c3p0.maxIdleTime}</value>
</property>
<property name="idleConnectionTestPeriod">
<value>${c3p0.idleConnectionTestPeriod}</value>
</property>
<property name="maxStatements">
<value>${c3p0.maxStatements}</value>
</property>
<property name="numHelperThreads">
<value>${c3p0.numHelperThreads}</value>
</property>
</bean>
<bean id="jdbcTemplate_jdbc3"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource_jdbc3" />
</bean>
3、java代码
@Autowired
@Qualifier("jdbcTemplate_jdbc3")
private NamedParameterJdbcTemplate jdbcTemplate_jdbc3;
Map<String, Object> param
//KeyHolder keyHolder = new GeneratedKeyHolder();
SqlParameterSource sqlp = new MapSqlParameterSource(param);
//update(insertSql, sqlp, keyHolder)//增量
Map<String, Object> map = new HashMap<String, Object>();
int map1 = jdbcTemplate_jdbc3.queryForInt(sqlCount, sqlp);//列表数字
map.put("total", map1);
List<Map<String, Object>> list = jdbcTemplate_jdbc3.queryForList(sqlDygc+sqlLimit, sqlp);//list《map》
map.put("rows", list);
当sql等查询方式不能满足性能或灵活性的要求,必须使用SQL时,大家有三种选择:
第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。
第二、使用Hibernate Session的getConnection 获得JDBC Connection,然后进行纯JDBC API操作;
第三、选择把Spring的JDBCTemplate作为一种很不错的JDBC Utils来使用。
JDBCTemplate---方法介绍和简单示例JDBCTemplate---方法介绍和简单示例
/*使用jdbcTemplate查询数据的时候可以使用queryForXXX等方法。下面我们就一一解析一下:*/
1、jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong() //使用queryForInt返回user表中的记录数量,queryForInt搭配这样的sql可以在分页的时候计算总记录数 jdbcTemplate.queryForInt("select count(*) from user");
2、jdbcTemplate.queryForObject() //本质上和queryForInt相同,只是可以返回不同的对象,例如返回一个String对象 String name = (String) jdbcTemplate.queryForObject( --3个参数: 1、sql 2、要传递的参数数组 3、返回来的对象class "SELECT name FROM USER WHERE id = ?", new Object[] {id}, java.lang.String.class);
3、jdbcTemplate.queryForList(???) //返回一个装有map的list,每一个map是一条记录,map里面的key是字段名 List rows = jdbcTemplate.queryForList("SELECT * FROM user"); //得到装有map的list for(int i=0;i<rows.size();i++){ //遍历 Map userMap=rows.get(i); System.out.println(userMap.get("id")); System.out.println(userMap.get("name")); System.out.println(userMap.get("age")); }
4、jdbcTemplate.queryForMap(SQL) //这个查询只能是查询一条记录的查询,返回一个map,key的值是column的值 Map map = jdbcTemplate.queryForMap("select count(*) as keyval from user"); map.get("keyval")
5、jdbcTemplate.queryForRowSet(???) //返回一个RowSet 然后调用.getString或者getInt等去取值
6、jdbc1.query(sql, new RowCallbackHandler() //返回一个ResultSet对象, processRow有自动循环的机制,它会自动执行processRow中的语句直到 //rs的size执行完了为止。我们可以在这其中用list完成对象的转移,只不过list要用final来修饰 jdbc1.query(sql, new RowCallbackHandler() { //editing public void processRow(ResultSet rs) throws SQLException { VideoSearch vs = new VideoSearch(); vs.setRECORDINGFILENAME(rs.getString("RECORDINGFILENAME")); vs.setCALLID(rs.getString("CALLID")); list.add(vs); } }
7.更新操作 //执行sql语句,无返回执,可用于插入等操作 jdbcTemplate.execute(sql); //更新操作,返回受影响的行数 jdbcTemplate.update(strSql.toString()); //执行批量更新,参数为string数组 jdbcTemplate.batchUpdate(sql); //更新,args为对象数组 jdbcTemplate.update(strSql, args); /* 说明: JDBCTemplate的使用方法: 在ApplicationContext.xml中定义一个jdbcTemplate的节点,使用POJO注入,获得注入后可以执行操作 不需要继承什么基类 */ <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, params); /* jdbcTemplate有很多的ORM化回调操作将返回结果转为对象列表, 但很多时候还是需要返回ResultSet,Spring有提供一个类似ResultSet的,实现JDBC3.0 RowSet接口的Spring SqlRowSet 注意 jdbcTemplate尽量只执行查询操作,莫要进行更新,否则会破坏Hibernate的二级缓存体系 */
使用Hibernate 的sql 多数据源查询
最新推荐文章于 2022-05-19 11:19:16 发布