-
相关maven依赖
4.0.0
org.hive
mars
war
1.0-SNAPSHOT
Plato
http://maven.apache.org
1.8
1.8
1.8
UTF-8
4.1.0.RELEASE
4.11
1.2.17
7.0
4.3.6.Final
5.1.15
junit
junit
${junit-version}
provided
org.springframework
spring-core
${spring-version}
org.springframework
spring-context
${spring-version}
org.springframework
spring-beans
${spring-version}
org.springframework
spring-aop
${spring-version}
org.springframework
spring-jdbc
${spring-version}
org.springframework
spring-orm
${spring-version}
log4j
log4j
${log4j-version}
org.aspectj
aspectjrt
1.6.11
org.aspectj
aspectjweaver
1.6.11
cglib
cglib
2.1
org.hibernate
hibernate-core
${hibernate-version}
jboss-logging-annotations
org.jboss.logging
jboss-logging-annotations
org.jboss.logging
jboss-logging-annotations
org.jboss.logging
mysql
mysql-connector-java
${MySql-version}
c3p0
c3p0
0.9.1.2
javax
javaee-web-api
${j2ee-version}
org.slf4j
slf4j-log4j12
1.7.2
即使是持久层 跟spring整合 依然导入了 j2ee 的包 是因为 在整合过程中发现了一个问题
如果J2EE 的包是6.0的任何版本 都会发生 ClassFormatError的 错误 原因是 6.0版本仅仅是做了规范 并没有实现 在实际运用中要避免引用
-
工程目录结构如下
这里仅仅贴一个 简单dao层的代码段 service 层 可以后面通过依赖注入实现
- 接口
package org.hive.dao;
import org.hive.bean.Admin;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Author: Dax
* Date: 2016/10/10
* Time: 17:54
*/
/* 通过注解来声明事务则该接口下的方法都会实现事务 如果不需要事务可在相关实现类下来实现 */
@Transactional
public interface AdminDao {
/**
* Select all list.
*
* 查询全部用户 返回清单
*
* @return the list
*/
List selectAll();
/**
* Add.
*
* 添加一个用户
*
* @param admin the admin
*/
void add(Admin admin);
/**
* Remove.
*
* 移除一个用户
*
* @param admin the admin
*/
void remove(Admin admin);
/**
* Update.
*
* 修改用户信息
*
* @param admin the admin
*/
void update(Admin admin);
/**
* Select one admin.
*
*通过用户的id来查询用户
*
* @param id the id
* @return the admin
*/
Admin selectOne(Integer id);
}
- 实现类
仅仅实现了简单的查询 其他不再一 一实现
package org.hive.dao.impl;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hive.bean.Admin;
import org.hive.dao.AdminDao;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Author: Dax
* Date: 2016/10/10
* Time: 16:17
*/
/* 通过注解注入IOC容器 */
@Repositorypublic class AdminDaoImpl implements AdminDao { @Resource(name = "sessionFactory") private SessionFactory factory; public SessionFactory getFactory() { return factory; } public void setFactory(SessionFactory factory) { this.factory = factory; } @Override public List- 实体类
package org.hive.bean;
import org.springframework.stereotype.Repository;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.sql.Timestamp;
/**
* Created with IntelliJ IDEA.
* Author: Dax
* Date: 2016/10/10
* Time: 17:51
*/
/* 通过注解注入IOC容器 */
@Repository
/* hibernate 相关的注解配置 */
@Entitypublic class Admin { private Integer adminId; private String adminName; private String adminPassword; private Timestamp loginTime; @Id @Column(name = "ADMINID") public Integer getAdminId() { return adminId; } public void setAdminId(Integer adminId) { this.adminId = adminId; } @Basic @Column(name = "ADMINNAME") public String getAdminName() { return adminName; } public void setAdminName(String adminName) { this.adminName = adminName; } @Basic @Column(name = "ADMINPASSWORD") public String getAdminPassword() { return adminPassword; } public void setAdminPassword(String adminPassword) { this.adminPassword = adminPassword; } @Basic @Column(name = "LOGINTIME") public Timestamp getLoginTime() { return loginTime; } public void setLoginTime(Timestamp loginTime) { this.loginTime = loginTime; }}
- spring配置文件
hh.properties
# 数据源 driver= com.mysql.jdbc.Driver url= jdbc:mysql://localhost:3306/test user= root password= admin max= 30 min= 5 initSize= 8 #session 工厂 dialect= org.hibernate.dialect.MySQL5Dialect show_sql= true hbm2ddl.auto= update format_sql= true
<context:component-scan /> 用法
在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
注意:如果配置了
1.
2.
在说明这两个子标签前,先说一下
Use-default-filter此时为true那么会对base-package包或者子包下的所有的进行java类进行扫描,并把匹配的java类注册成bean。
可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?此时子标签
这样就会只扫描base-package指定下的有@Controller下的java类,并注册成bean
但是因为use-dafault-filter在上面并没有指定,默认就为true,所以当把上面的配置改成如下所示的时候,就会产生与你期望相悖的结果(注意base-package包值得变化)
此时,spring不仅扫描了@Controller,还扫描了指定包所在的子包service包下注解@Service的java类
此时指定的include-filter没有起到作用,只要把use-default-filter设置成false就可以了。这样就可以避免在base-packeage配置多个包名这种不是很优雅的方法来解决这个问题了。
另外在我参与的项目中可以发现在base-package指定的包中有的子包是不含有注解了,所以不用扫描,此时可以指定
Use-dafault-filters=”false”的情况下:
转自 :http://blog.csdn.net/chunqiuwei/article/details/16115135
根据上面的结构 可以看出 通过声明依赖 然后 注入依赖 层层进行操作 对同样的业务流程 采取AOP的思想 进行切面编程 理清思路其实 还是很简单的