RowMapper问题
Posted 三更灯火五更鸡,正是男儿编程时
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RowMapper问题相关的知识,希望对你有一定的参考价值。
sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类.
我们在数据库查询中,如果返回的类型是用户自定义的类型是需要包装,如果是Java自定义的类型,如:String则不需要.。之后的hibernate和spring整合了就不会用这个Rowmapper,毕竟太不方便了,只有spring单独使用的时候我们才会用到这个
如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到.
可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现.
总结:Spring单独进行数据库操作过于复杂,每次都要进行数据库连接,而且下面没有事物操作,出现异常出现中断,但是数据进行了操作。因此没有hibernate的封装类操作方便,安全,所以这里仅仅是一个练习,了解一下即可。没有必要做深入研究,主要的是spring文件的bean.xml文件注入要进行大量练习和研究,后面的复杂情况才能得心应手。
具体代码如下
@Test public void testQuery() { /*加载连接池*/ ComboPooledDataSource dataSource=new ComboPooledDataSource(); dataSource.setDescription("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql:///admin"); dataSource.setUser("root"); dataSource.setPassword("1234"); JdbcTemplate jdbc=new JdbcTemplate(dataSource); String sql="select *from jdbc where username=?"; User user=jdbc.queryForObject(sql,new MyRowMapper(),"yang"); System.out.println("user:"+user); } class MyRowMapper implements RowMapper<User>{ public User mapRow(ResultSet rs, int num) throws SQLException { String username=rs.getString("username"); String password=rs.getString("password"); User user=new User(); user.setUsername(username); user.setPassword(password); return user; } }
如果是一个list集合,就需要用到query方法,这个返回的是一个集合
@Test
public void testQuery2()
{
/*加载连接池*/
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDescription("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///admin");
dataSource.setUser("root");
dataSource.setPassword("1234");
JdbcTemplate jdbc=new JdbcTemplate(dataSource);
String sql="select *from jdbc";
List<User> list=jdbc.query(sql,new MyRowMapper());
System.out.println("user:"+list);
}
关于c3po连接问题:MVC框架进行数据库插入操作(入门操作)
UserDao代码:
import org.springframework.jdbc.core.JdbcTemplate; public class UserDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void add() { String sql="insert into jdbc values(?,?)"; jdbcTemplate.update(sql,"jsdk","4568"); } }
UserService代码
public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public UserDao getUserDao() { return userDao; } public void add() { userDao.add(); } }
c3p0.xml代码:
<!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 注入里面的属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///hibernate"></property> <property name="user" value="root"></property> <property name="password" value="1234"></property> </bean> <!-- 创建service和dao对象 --> <bean id="userService" class="cn.ismy.c3p0.UserService"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="cn.ismy.c3p0.UserDao"> <!-- 在dao里面注入jdbcTemplate模板对象 --> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> <!-- 创建jdbcTemplate模板对象 用jdbcTemplate类进行crud(增删改查)操作--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 把DataSource传到jdbcTemplate里面去 --> <property name="dataSource" ref="dataSource"></property> </bean>
测试类
public void queryC3p0() { ApplicationContext context=new ClassPathXmlApplicationContext("c3p0.xml"); UserService uservice=(UserService) context.getBean("userService"); uservice.add(); }
以上是关于RowMapper问题的主要内容,如果未能解决你的问题,请参考以下文章
Spring中JdbcTemplate中使用RowMapper