这两天又捡起来老司机的web端代码,需要增加一些新的功能,比如说充值卡(PrepaidCard)模块。在写Dao层的时候发现好麻烦呀,每个实体类都要写一个对应的Dao(还包括接口跟实现),而大部分Dao方法都是基本的增删查改操作(CRUD)。比如getById,save,update,count,query,delete。而这些基本操作的代码其实都是相差无几的,既然这样那我们是不是可以写一个BaseDao来实现基本操作,然后让其他Dao来继承他。 以我现在要写的PrepaidCard实体类为例: /** *…
spring mvc给freemarker传全局的值
通常spring mvc通过model给freemarker view传值,这是一个局部的概念,针对的是每个页面。有时候,我们会想给整个freemarker传一些全局的值。比如网站的url前缀,比如静态资源的路径,这些值在每个页面几乎都会需要用到,但我们不可能在每个model中传递这些值。 我们可以通过FreeMarkerViewResolver来给freemarker模板设置全局的值。 <beans:bean id="freemarkerResolver" class="…
在spring框架中发送邮件
spring封装了一个邮件发送类:org.springframework.mail.javamail.JavaMailSender,这个JavaMailSender底层实现依赖的是公开的JavaMail API。所以要让spring的JavaMailSender正常工作,就必须先导入JavaMail API的实现类,比如com.sun.mail:javax.mail。 发送的邮件有两种类型,一种是简单文本邮件,不支持html,即使邮件内容中出现html标签,对方邮箱收到邮件后显示的仍是原始文本;一种是富文本…
spring中Constructor、@Autowired、@PostConstruct的顺序
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。 如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。 Constructor >…
Spring的@Autowired与自动代理
我想Spring框架的优点,第一条应该就是Spring的依赖注入了吧。尤其@Autowired这个注解,甚至可以直接注解在私有成员变量上而不用去写setter方法。之前看《Spring实战》这书的时候,里面说autowired自动注入是byType的,当时一直以为就是byClass,就是根据变量的类类型,去Spring context中找这样类型的bean。但当我写Dao层、Service层代码的时候,发现情况根本不是这样的。 比如说我现有有一个BookmakerDao接口,以及接口的实现类Bookmake…
Entity的继承以及泛型Dao(二)
一、继承与泛型都是因为懒 接着先前的例子,我们已经把Odds1x2与OddsHandicap这两个实体类的共同属性抽离出来放在他们的抽象父类Odds中。那么接下来要做的就是实现实体类相应的Dao类型。最简单的实现方法就是每个Entity对应一个Dao,每个Dao内都要实现对Entity的增删查改操作,但实际上大部分的增删查改操作都是类似的,只是处理不同的Entity而已。为了少写些重复代码,我们有完全正当的理由写一个泛型Dao来实现这些基本的增删查改操作。 仍然以我们的Odds为例子,假设我们现在只需要实现…
Entity的继承以及泛型Dao(一)
一、两张类似的表与两个类似的实体类 现在我有一个betspider数据库,里面放着我自己的爬虫爬来的足球赔率,以bs_odds_1x2(胜负平赔率)、bs_odds_handicap(让球赔率)这两张表作为例子,他们在数据库中的表结构是这样的: 首先不考虑实体类的继承,这两张表对应着两个独立的实体类:(请暂时忽略下面实体类属性的数据类型与mysql的表字段类型的不完全匹配 =。=#) @Entity @Table(name = "bs_odds_1x2") public class Od…
Spring中@ModelAttribute以及超级坑爹的@SessionAttributes注解
重要的结论要先说出来,千万不要用@SessionAttributes来保存http session的属性!!! 在Spring MVC中,@ModelAttribute注解作用在方法或者方法参数上,表示将被注解的方法的返回值或者是被注解的参数作为Model的属性加入到Model中,然后Spring框架自会将这个Model传递给ViewResolver。Model的生命周期只有一个http请求的处理过程,请求处理完后,Model就销毁了。 @SessionAttributes(attrName)注解的意思就是…
在spring中使用hibernate
一、基本配置 在Spring的servlet-context.xml文件中添加 <!-- 配置数据库 --> <!-- 简单的使用jdbc的DriverManagerDataSource,没有连接池 --> <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <beans:propert…
奇葩的localhost:8080/announce访问
这是今天写spring boot程序时候遇到的奇葩问题。 首先,由于项目的静态资源我是放在如下项目的src/main/resources/static目录下面(这是使用spring boot项目默认创建的目录) 为了确保spring boot能够将 "http://localhost:8080/resources/css/main.css" 这样的静态文件匹配到该目录下,我在项目的application.properties添加了一行: spring.mvc.static-path-pattern = /r…