• 案例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>
    View Code

    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>
    View Code

    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();
    }
  • 相关阅读:
    Redux基础使用
    react native 第三方组件react-native-swiper 轮播组件
    React native中的组建通知通信:
    更新:在MAC上安装RN开发环境的步骤(全)
    React Native组件之BackAndroid !安卓手机的物理返回键的使用
    使用redux简单的实现加法运算(简单的状态改变)
    【HTML+JavaScript(jQuery)】实现侧边栏下拉菜单
    第四章 前端开发——JQuery库
    【HTML+CSS+JavaScript】实现地址选择联动
    【HTML+CSS+JavaScript】实现待办事项(纯DOM实现)
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8516278.html
Copyright © 2020-2023  润新知