案例43-crm练习获取客户列表使用struts2
1 src下配置文件
1 struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 指定struts2是否以开发模式运行 1.热加载主配置.(不需要重启即可生效) 2.提供更多错误信息输出,方便开发时的调试 --> <constant name="struts.devMode" value="true"></constant> <package name="crm" namespace="/" extends="struts-default" > <action name="CustomerAction_*" class="www.test.web.action.CustomerAction" method="{1}" > <result name="list" >/jsp/customer/list.jsp</result> </action> </package> </struts>
2 hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- #hibernate.dialect org.hibernate.dialect.MySQLDialect #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect #hibernate.connection.driver_class com.mysql.jdbc.Driver #hibernate.connection.url jdbc:mysql:///test #hibernate.connection.username gavin #hibernate.connection.password --> <!-- 数据库驱动 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库url --> <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property> <!-- 数据库连接用户名 --> <property name="hibernate.connection.username">root</property> <!-- 数据库连接密码 --> <property name="hibernate.connection.password">root</property> <!-- 数据库方言 不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成. sql99标准: DDL 定义语言 库表的增删改查 DCL 控制语言 事务 权限 DML 操纵语言 增删改查 注意: MYSQL在选择方言时,请选择最短的方言. --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- #hibernate.show_sql true #hibernate.format_sql true --> <!-- 将hibernate生成的sql语句打印到控制台 --> <property name="hibernate.show_sql">true</property> <!-- 将hibernate生成的sql语句格式化(语法缩进) --> <property name="hibernate.format_sql">true</property> <!-- ## auto schema export 自动导出表结构. 自动建表 #hibernate.hbm2ddl.auto create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用) #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用) #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据). #hibernate.hbm2ddl.auto validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败. --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 指定hibernate操作数据库时的隔离级别 #hibernate.connection.isolation 1|2|4|8 0001 1 读未提交 0010 2 读已提交 0100 4 可重复读 1000 8 串行化 --> <property name="hibernate.connection.isolation">4</property> <!-- 指定session与当前线程绑定 --> <property name="hibernate.current_session_context_class">thread</property> <!-- 引入orm元数据 路径书写: 填写src下的路径 --> <mapping resource="www/test/domain/Customer.hbm.xml" /> <mapping resource="www/test/domain/LinkMan.hbm.xml" /> </session-factory> </hibernate-configuration>
2 web层
1 web.action下的CustomerAction
package www.test.web.action; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.ServletActionContext; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; import com.opensymphony.xwork2.ActionSupport; import www.test.domain.Customer; import www.test.service.CustomerService; import www.test.service.impl.CustomerServiceImpl; public class CustomerAction extends ActionSupport { private CustomerService cs = new CustomerServiceImpl(); public String list() throws Exception { //1 接受参数 String cust_name = ServletActionContext.getRequest().getParameter("cust_name"); //2 创建离线查询对象 DetachedCriteria dc =DetachedCriteria.forClass(Customer.class); //3 判断参数拼装条件 if(StringUtils.isNotBlank(cust_name)){ dc.add(Restrictions.like("cust_name", "%"+cust_name+"%")); } //4 调用Service将离线对象传递 List<Customer> list = cs.getAll(dc); //5 将返回的list放入request域.转发到list.jsp显示 ServletActionContext.getRequest().setAttribute("list", list); return "list"; } }
3 service层
public List<Customer> getAll(DetachedCriteria dc) { Session session = HibernateUtils.getCurrentSession(); //打开事务 Transaction tx = session.beginTransaction(); List<Customer> list = customerDao.getAll(dc); //关闭事务 tx.commit(); return list; }
4 dao层
public List<Customer> getAll(DetachedCriteria dc) { //1 获得session Session session = HibernateUtils.getCurrentSession(); //2 将离线对象关联到session Criteria c = dc.getExecutableCriteria(session); //3 执行查询并返回 return c.list(); }