spring 中的 RowMapper 类

来源:互联网 发布:unity3d 就业 编辑:程序博客网 时间:2024/05/17 23:56
1、spring 中的 RowMapper

 sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类。

 我们在数据库查询中,如果返回的类型是用户自定义的类型(其实我们在数据库查询中大部分返回的都是自定义的类)则需要包装,如果是Java自定义的类型,如:String则不需要。

 如果sping与hibernate 相结合了,基本上是用不到,大多数都是在spring单独使用时用到,常见的情况就是与JdbcTemplate一起使用。

 可以通过建立内部类实现RowMapper接口,RowMapper中有一个mapRow方法,所以实现RowMapper接口一定要实现mapRow方法,而对自定义类的包装就在mapRow方法中实现。

 这里只是一个简单的例子:

 public class TestDao {
 private JdbcTemplate jt;
 public void setJt(JdbcTemplate jt) {
 this.jt = jt;
 }
 public List<TNpc> getAll(){
 String sql = "select * from t_npc";
 //使用
 List list = jt.query(sql, new NpcRowMapper());
 return list;
 }
 /**
 * 定义内部类实现RowMapper接口
 */
 public class NpcRowMapper implements RowMapper{
 //实现mapRow方法
 public Object mapRow(ResultSet rs, int num) throws SQLException {
 //对类进行封装
 TNpc npc = new TNpc();
 npc.setId(rs.getLong("id"));
 npc.setName(rs.getString("name"));
 return npc;
 }
 }

}




2、spring JdbcTemplate 查询方法中的RowMapper实现汇总

 在内部建立内联类实现RowMapper接口
 package hysteria.contact.dao.impl;

 import Java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
 import java.util.List;

 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;

 import hysteria.contact.dao.ItemDAO;
 import hysteria.contact.domain.Item;

 public class ItemDAOImpl implements ItemDAO {
 private JdbcTemplate jdbcTemplate;

 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
 this.jdbcTemplate = jdbcTemplate;
 }

 public Item insert(Item item) {
 String sql = "INSERT INTO items(user_id,name,phone,email) VALUES(?,?,?,?)";
 Object[] params = new Object[]{item.getUserId(),item.getName(),item.getPhone(),item.getEmail()};
 int[] types = new int[]{Types.INTEGER,Types.VARCHAR,Types.CHAR,Types.VARCHAR};
 jdbcTemplate.update(sql,params,types);
 return item;
 }

 public Item update(Item item) {
 String sql = "UPDATE items SET name = ?, phone = ?, email = ? WHERE id = ?";
 Object[] params = new Object[] {item.getName(),item.getPhone(),item.getEmail(),item.getId()};
 int[] types = new int[] {Types.VARCHAR,Types.CHAR,Types.VARCHAR,Types.VARCHAR,Types.INTEGER};
 jdbcTemplate.update(sql,params,types);

 return item;
 }

 public void delete(Item item) {
 String sql = "DELETE FROM items WHERE id = ?";
 Object[] params = new Object[] {item.getId()};
 int[] types = new int[]{Types.INTEGER};
 jdbcTemplate.update(sql,params,types);
 }

 public Item findById(int id) {
 String sql = "SELECT * FROM items WHERE id = ?";
 Object[] params = new Object[] {id};
 int[] types = new int[] {Types.INTEGER};
 List items = jdbcTemplate.query(sql,params,types,new ItemMapper());
 if(items.isEmpty()){
 return null;
 }
 return (Item)items.get(0);
 }

 public List<Item> findAll() {
 String sql = "SELECT * FROM items";
 return jdbcTemplate.query(sql,new ItemMapper());
 }


 public List<Item> findAllByUser(int user_id) {
 String sql = "SELECT * FROM items WHERE user_id = ?";
 Object[] params = new Object[]{user_id};
 int[] types = new int[]{Types.INTEGER};
 List items = jdbcTemplate.query(sql,params,types,new ItemMapper());
 return items;
 }

 protected class ItemMapper implements RowMapper {

 public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
 Item item = new Item();
 item.setId(rs.getInt("id"));
 item.setUserId(rs.getInt("user_id"));
 item.setName(rs.getString("name"));
 item.setPhone(rs.getString("phone"));
 item.setEmail(rs.getString("email"));

 return item;
 }

 }


 }

欢迎各位程序猿&程序媛批评指正!
 
      .
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办 六个月婴儿着凉拉肚子怎么办 怀孕六个月着凉拉肚子怎么办 六个月的婴儿消化不好怎么办 六个月婴儿不好好吃奶怎么办 六个月婴儿消化不好怎么办 六个月婴儿肠胃不好怎么办 受了惊吓后睡眠不好怎么办 宝宝夏季吃饭不爱带围嘴怎么办 3岁宝宝爱看电视怎么办 新生儿晚上哭闹不睡觉怎么办 档案丢了怎么办失业证 三岁宝宝不合群怎么办 阴唇手术半月了疤痕增生怎么办 宝宝小阴唇黏连怎么办 6个月宝宝阴唇粘连怎么办? 高一孩子不爱上学怎么办 3岁宝宝外阴发红怎么办 40爸妈离婚我该怎么办 小儿吃糖卡住了怎么办 额头撞墙上肿了怎么办 宝宝额头撞肿了怎么办 小孩额头撞肿了怎么办 宝宝撞到额头肿了怎么办 小孩子上一年级语文很差了怎么办? 楼下说小孩太吵怎么办 托班的小孩太吵怎么办 宝宝两岁只会简单的词怎么办 我儿子的视力低怎么办 小孩子课文看书都不会读怎么办 宝宝衣服买小了怎么办 拉拉裤腰围小了怎么办 一周九个月宝宝发烧怎么办 8个月的婴儿37.7怎么办 宝宝发烧37度3怎么办 2岁宝宝发烧37度怎么办 3个月新生儿发烧怎么办 生完孩子肚子松弛怎么办 6个月婴儿高烧怎么办 7个月婴儿高烧怎么办