当前位置: 首页 > wzjs >正文

零售户电商网站订货网址网络营销招聘

零售户电商网站订货网址,网络营销招聘,wordpress判断手机,昆明二级站seo整站优化排名在传统的多层应用程序中,通常是Web层调用业务层,业务层调用数据访问层。业务层负责处理各种业务逻辑,而数据访问层只负责对数据进行增删改查。因此,实现数据访问层就是用JdbcTemplate实现对数据库的操作。 编写数据访问层的时候&…

在传统的多层应用程序中,通常是Web层调用业务层,业务层调用数据访问层。业务层负责处理各种业务逻辑,而数据访问层只负责对数据进行增删改查。因此,实现数据访问层就是用JdbcTemplate实现对数据库的操作。

编写数据访问层的时候,可以使用DAO模式。DAO即Data Access Object的缩写,它没有什么神秘之处,实现起来基本如下:

public class UserDao {@AutowiredJdbcTemplate jdbcTemplate;User getById(long id) {...}List<User> getUsers(int page) {...}User createUser(User user) {...}User updateUser(User user) {...}void deleteUser(User user) {...}
}

Spring提供了一个JdbcDaoSupport类,用于简化DAO的实现。这个JdbcDaoSupport没什么复杂的,核心代码就是持有一个JdbcTemplate

public abstract class JdbcDaoSupport extends DaoSupport {private JdbcTemplate jdbcTemplate;public final void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;initTemplateConfig();}public final JdbcTemplate getJdbcTemplate() {return this.jdbcTemplate;}...
}

它的意图是子类直接从JdbcDaoSupport继承后,可以随时调用getJdbcTemplate()获得JdbcTemplate的实例。那么问题来了:因为JdbcDaoSupportjdbcTemplate字段没有标记@Autowired,所以,子类想要注入JdbcTemplate,还得自己想个办法:

@Component
@Transactional
public class UserDao extends JdbcDaoSupport {@AutowiredJdbcTemplate jdbcTemplate;@PostConstructpublic void init() {super.setJdbcTemplate(jdbcTemplate);}
}

有的童鞋可能看出来了:既然UserDao都已经注入了JdbcTemplate,那再把它放到父类里,通过getJdbcTemplate()访问岂不是多此一举?

如果使用传统的XML配置,并不需要编写@Autowired JdbcTemplate jdbcTemplate,但是考虑到现在基本上是使用注解的方式,我们可以编写一个AbstractDao,专门负责注入JdbcTemplate

public abstract class AbstractDao extends JdbcDaoSupport {@Autowiredprivate JdbcTemplate jdbcTemplate;@PostConstructpublic void init() {super.setJdbcTemplate(jdbcTemplate);}
}

这样,子类的代码就非常干净,可以直接调用getJdbcTemplate()

@Component
@Transactional
public class UserDao extends AbstractDao {public User getById(long id) {return getJdbcTemplate().queryForObject("SELECT * FROM users WHERE id = ?",new BeanPropertyRowMapper<>(User.class),id);}...
}

倘若肯再多写一点样板代码,就可以把AbstractDao改成泛型,并实现getById()getAll()deleteById()这样的通用方法:

public abstract class AbstractDao<T> extends JdbcDaoSupport {private String table;private Class<T> entityClass;private RowMapper<T> rowMapper;public AbstractDao() {// 获取当前类型的泛型类型:this.entityClass = getParameterizedType();this.table = this.entityClass.getSimpleName().toLowerCase() + "s";this.rowMapper = new BeanPropertyRowMapper<>(entityClass);}public T getById(long id) {return getJdbcTemplate().queryForObject("SELECT * FROM " + table + " WHERE id = ?", this.rowMapper, id);}public List<T> getAll(int pageIndex) {int limit = 100;int offset = limit * (pageIndex - 1);return getJdbcTemplate().query("SELECT * FROM " + table + " LIMIT ? OFFSET ?",new Object[] { limit, offset },this.rowMapper);}public void deleteById(long id) {getJdbcTemplate().update("DELETE FROM " + table + " WHERE id = ?", id);}...
}

这样,每个子类就自动获得了这些通用方法:

@Component
@Transactional
public class UserDao extends AbstractDao<User> {// 已经有了:// User getById(long)// List<User> getAll(int)// void deleteById(long)
}@Component
@Transactional
public class BookDao extends AbstractDao<Book> {// 已经有了:// Book getById(long)// List<Book> getAll(int)// void deleteById(long)
}

可见,DAO模式就是一个简单的数据访问模式,是否使用DAO,根据实际情况决定,因为很多时候,直接在Service层操作数据库也是完全没有问题的。

小结

Spring提供了JdbcDaoSupport来便于我们实现DAO模式;

可以基于泛型实现更通用、更简洁的DAO模式。

http://www.dtcms.com/wzjs/436375.html

相关文章:

  • 做网站流量的方法衡阳seo排名
  • 江津区建设委员会网站seo研究中心骗局
  • 网站开发项目策划网站流量统计分析工具
  • 怎样做网站操作向导视频广告
  • 普陀专业做网站济南网站建设方案
  • 导航网站建设bt磁力在线种子搜索神器下载
  • 深圳高水平网站制作东莞seo排名优化
  • 网站建设 博采北京网站推广机构
  • 网站后台不显示文章内容百度热搜广告设计公司
  • 网站推广应该怎么做最新军事新闻今日最新消息
  • 建建建设网站首页登封网站建设公司
  • 地方门户网站模板太原seo软件
  • 如何用ps做网站标识app推广代理加盟
  • 网站运营做哪些工作呢太原seo推广
  • 中国工程建筑门户网站官网百度竞价怎么做
  • 网站建设在开封找谁做微信加人推码35一单
  • 男女做暖暖的试看网站盘古百度推广靠谱吗
  • 电脑系统做的好的网站好国产系统2345
  • 如何自己制作微网站全国最新的疫情数据
  • 做网站怎么存放视频网络推广方案范文
  • i岗网站建设广州最新重大新闻
  • 那个网站是专门做机械设备定制网站多少钱
  • 十堰城市建设网站岳阳seo公司
  • 全面的网站建设seo准
  • 如何选网站空间网络推广培训班
  • apsx做的网站怎么发布百度seo优化排名软件
  • 网站建设服务套餐营销推广有哪些形式
  • 水利部建设与安全中心网站windows优化大师的功能
  • 温州网站推广模板网络营销策划书范文
  • 网站开发的人李海涛原创代写文章平台