日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring jdbc 对象Mapper的简单封装

發布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring jdbc 对象Mapper的简单封装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一般查詢實體的時候,都需要這么使用/**
? ???* 根據id查詢
? ???*?
? ???* @return
? ???*/
? ? public Emp queryEmpById(Integer id)
? ? {
? ?? ???String sql = "select * from emp where empno = ?";
? ?? ???ParameterizedRowMapper<Emp> mapper = new ParameterizedRowMapper<Emp>()
? ?? ???{

? ?? ?? ?? ?public Emp mapRow(ResultSet rs, int rowNum) throws SQLException
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? Emp emp = new Emp();
? ?? ?? ?? ?? ? System.out.println("row:" + rowNum);
? ?? ?? ?? ?? ? emp.setEmpno(rs.getInt("empno"));
? ?? ?? ?? ?? ? emp.setEname(rs.getString("ename"));
? ?? ?? ?? ?? ? return emp;
? ?? ?? ?? ?}
? ?? ???};

? ?? ???return this.getSimpleJdbcTemplate().queryForObject(sql, mapper, id);
? ? }
??
能不能像Hibernate那樣自動set這些值呢,用反射可以實現.package orm;

import?JAVA.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;

/**
* 通用的Object包裝類(類型問題,依然是個瓶頸,如果有好的解決方案請pm我)
*?
* 功能:查詢對象類型或對象集合時的通用包裝類
*?
* @author zdw
*?
*/
@SuppressWarnings("unchecked")
public class ObjectMapper implements ParameterizedRowMapper
{
? ? private Class clazz;

? ? public ObjectMapper(Class clazz)
? ? {
? ?? ???this.clazz = clazz;
? ? }

? ? /**
? ???* 重寫mapRow方法
? ???*/
? ? @Override
? ? public Object mapRow(ResultSet rs, int rowNum) throws SQLException
? ? {
? ?? ???try
? ?? ???{
? ?? ?? ?? ?Object obj = clazz.newInstance();
? ?? ?? ?? ?Field fields[] = obj.getClass().getDeclaredFields();
? ?? ?? ?? ?for (int i = 0; i < fields.length; i++)
? ?? ?? ?? ?{
? ?? ?? ?? ?? ? Field field = fields[i];
? ?? ?? ?? ?? ? // 暴力訪問
? ?? ?? ?? ?? ? field.setAccessible(true);
? ?? ?? ?? ?? ? this.typeMapper(field, obj, rs);
? ?? ?? ?? ?? ? // 恢復默認
? ?? ?? ?? ?? ? field.setAccessible(false);
? ?? ?? ?? ?}
? ?? ?? ?? ?return obj;
? ?? ???}
? ?? ???catch (Exception e)
? ?? ???{
? ?? ?? ?? ?e.printStackTrace();
? ?? ???}
? ?? ???return null;
? ? }

? ? /**
? ???* 數據類型包裝器
? ???*?
? ???* @param field
? ???*? ?? ?? ?? ?目標屬性
? ???* @param obj
? ???*? ?? ?? ?? ?目標對象
? ???* @param rs
? ???*? ?? ?? ?? ?結果集
? ???* @throws Exception
? ???*/
? ? private void typeMapper(Field field, Object obj, ResultSet rs)
? ?? ?? ?? ?throws Exception
? ? {
? ?? ???String type = field.getType().getName();
? ?? ???if (type.equals("java.lang.String"))
? ?? ???{
? ?? ?? ?? ?field.set(obj, rs.getString(field.getName()));
? ?? ???}
? ?? ???else if (type.equals("int") || type.equals("java.lang.Integer"))
? ?? ???{
? ?? ?? ?? ?field.set(obj, rs.getInt(field.getName()));
? ?? ???}
? ?? ???else if (type.equals("long") || type.equals("java.lang.Long"))
? ?? ???{
? ?? ?? ?? ?field.set(obj, rs.getLong(field.getName()));
? ?? ???}
? ?? ???else if (type.equals("boolean") || type.equals("java.lang.Boolean"))
? ?? ???{
? ?? ?? ?? ?field.set(obj, rs.getBoolean(field.getName()));
? ?? ???}
? ?? ???else if (type.equals("java.util.Date"))
? ?? ???{
? ?? ?? ?? ?field.set(obj, rs.getDate(field.getName()));
? ?? ???}
? ? }
}
??
dao:/**
? ???* 查詢操作 (自動setEmp類型所有值)
? ???*?
? ???* @return
? ???*/
? ? public List queryList()
? ? {
? ?? ???return this.getJdbcTemplate().query("select * from emp",
? ?? ?? ?? ?? ? new ObjectMapper(Emp.class));
? ? }
??
單個查詢:public Emp queryEmpById2(Integer id)
? ? {
? ?? ???String sql = "select * from emp where empno = ?";
? ?? ???ObjectMapper om = new ObjectMapper(Emp.class);
? ?? ???return (Emp) this.getSimpleJdbcTemplate().queryForObject(sql, om, id);
? ? }
??
測試通過:7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
??
上面是我的一個簡單封裝,在Spring2.5中及以后版本,已經提供了便捷方法:/**
? ???* 查詢操作 (自動setEmp類型所有值)
? ???*?
? ???* @return
? ???*/
? ? public List queryList()
? ? {
? ?? ???return this.getSimpleJdbcTemplate().query(? ?
? ?? ?? ?? ?? ? "SELECT * from emp",? ?
? ?? ?? ?? ?? ? ParameterizedBeanPropertyRowMapper.newInstance(Emp.class));??
? ? }
? ??
? ? /**
? ???* 根據id查詢
? ???*?
? ???* @return
? ???*/
? ? public Emp queryById(Integer id)
? ? {
? ?? ???return this.getSimpleJdbcTemplate().queryForObject(? ?
? ?? ?? ?? ?? ? "SELECT * from emp where id = ?",? ?
? ?? ?? ?? ?? ? ParameterizedBeanPropertyRowMapper.newInstance(Emp.class),7369);??
? ? }
??
這樣就簡單多了,也是用反射實現的http://www.shengshiyouxi.com.

?

總結

以上是生活随笔為你收集整理的Spring jdbc 对象Mapper的简单封装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。