• 案例44-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>
                <result name="toList" type="redirectAction">
                     <param name="actionName">CustomerAction_list</param>
                     <param name="namespace">/</param>
                 </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>
    View Code

    3 web-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 com.opensymphony.xwork2.ModelDriven;
    
    import www.test.domain.Customer;
    import www.test.service.CustomerService;
    import www.test.service.impl.CustomerServiceImpl;
    
    public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
        private CustomerService cs = new CustomerServiceImpl();
        private Customer customer = new Customer();
        
        //1 获取客户列表
        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";
        }
    
    
    
        //2 新增客户
        public String add() throws Exception{
            //调用service保存客户
            cs.save(customer);
            //重定向到列表Action方法
            return "toList";
        }
    
        @Override
        public Customer getModel() {
            
            return customer;
        }
    }

    4 service层

    public void save(Customer c) {
        Session session =  HibernateUtils.getCurrentSession();
        //打开事务
        Transaction tx = session.beginTransaction();
        //调用Dao保存客户
        try {
            customerDao .save(c);
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }
        //关闭事务
        tx.commit();
    }

    5 dao层

    public void save(Customer c) {
        //1 获得session
        Session session = HibernateUtils.getCurrentSession();
        //3 执行保存
        session.save(c);
    }
  • 相关阅读:
    2021-06-10 Summary: 阶段总结
    java中有符号和无符号数据类型发生转换
    关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException
    Intellij IDEA打开多项目窗口
    使用Idea从github上获取项目
    用Intellij Idea从Github上获取代码
    Python-列表常用操作方法
    Python-字符串常用操作方法
    Python-不可变对象和可变对象的理解
    Python-内置数据类型
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8523424.html
Copyright © 2020-2023  润新知