zoukankan      html  css  js  c++  java
  • Struts学习-Hibernate2

    一、

    1.配置

    <!-- hibernate-core -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>5.2.12.Final</version>
        </dependency>
    
        <!-- mysql-connector-java
         当前最新测试版本:8.0.8-dmr
         当前最新版稳定版本:6.0.6
         上一代的稳步版本:5.1.44
         -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.8-dmr</version>
        </dependency>
    
        <!-- jstl支持 -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
    
    
        <!-- struts2核心包-core -->
        <dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-core</artifactId>
          <version>2.5.13</version>
        </dependency>
    
        <!-- struts2-spring-plugin 插件-->
        <dependency>
          <groupId>org.apache.struts</groupId>
          <artifactId>struts2-spring-plugin</artifactId>
          <version>2.5.13</version>
        </dependency>
    
        <!--
    spring-context 包含:core,beans,aop
    注意:没有包含web
    -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.0.0.RELEASE</version>
        </dependency>
    
        <!--
        spring-core(防止struts降低版本)
         -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.0.0.RELEASE</version>
        </dependency>
    
        <!--
        spring-beans(防止struts降低版本)
         -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>5.0.0.RELEASE</version>
        </dependency>
    
        <!-- spring-web的支持 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.0.0.RELEASE</version>
        </dependency>
    View Code

    2.建包,建类,建立xml

    2.(1)建立实体类(2)数据库连接hibernate.cfg.xml,User.hbm.xml

    (3)编写两个接口和继承接口的类

    package com.nf.dao;
    
    import com.nf.entity.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.query.Query;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Repository;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Repository
    @Scope("prototype")
    public class UserDaoImpl implements UserDao {
    
        private SessionFactory factory = null;
    
        public List<User> getAllUser() {
            List<User> userList = null;
            //spring将直接替代掉下面3行代码
            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");
            factory = configuration.buildSessionFactory();
            Session session = factory.openSession();
    
            Query query = session.createQuery("from User");
            userList = query.getResultList();
    
            session.close();
            factory.close();
    
    
    
            return userList;
        }
    }
    View Code
    package com.nf.service;
    
    import com.nf.dao.UserDao;
    import com.nf.entity.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Service
    @Scope("prototype")
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao = null;
    
        public List<User> getAllUser() {
    
            return userDao.getAllUser();
        }
    }
    View Code

    (4)编写Action类

    package com.nf.action;
    
    import com.nf.entity.User;
    import com.nf.service.UserService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import java.util.List;
    
    @Controller
    @Scope("prototype")
    
    public class UserAction extends ActionSupport {
    
        @Autowired
        private UserService userService = null;
    
        @Override
        public String execute() throws Exception {
            List<User> userList = userService.getAllUser();
            System.out.println(userList.size());
    
            ActionContext.getContext().getValueStack().set("userList",userList);
            return this.SUCCESS;
        }
    }
    View Code

    (5)编写解析器applicationContext.xml

    (6)编写struts.xml

    <constant name="struts.objectFactory" value="spring"></constant>
    
        <package name="mypackage" extends="struts-default">
    
            <action name="hello" class="userAction">
                <result name="success">/WEB-INF/jsp/ok.jsp</result>
            </action>
    
        </package>

    (7)jsp

    (8)猫,运行(注意包的导入)

    地址:https://gitee.com/MuNianShi/Hibernate004.git

     二、不够详细莫怪

    与上面的代码相比

    package com.nf.action;
    
    import com.nf.entity.User;
    import com.nf.service.UserService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import java.util.List;
    
    @Controller
    @Scope("prototype")
    
    public class UserAction extends ActionSupport {
    
        @Autowired
        private UserService userService = null;
    
    
        @Override
        public String execute() throws Exception {
            List<User> userList = userService.getAllUser();
            System.out.println(userList.size());
    
            ActionContext.getContext().getValueStack().set("userList",userList);
            return this.SUCCESS;
        }
    }
    package com.nf.dao;
    
    import com.nf.entity.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.query.Query;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Repository;
    
    import java.util.ArrayList;
    import java.util.List;
    
    @Repository
    @Scope("prototype")
    public class UserDaoImpl implements UserDao {
    
        private SessionFactory factory = null;
    
        public List<User> getAllUser() {
            List<User> userList = null;
            //spring将直接替代掉下面3行代码
            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");
            factory = configuration.buildSessionFactory();
            Session session = factory.openSession();
    
            //Query query = session.createQuery("from User u where u.id>:myid");
            Query query = session.createNamedQuery("selectUserById");
            //Query query = session.createNamedQuery("myQuery",User.class);
            query.setParameter("myid",1);
            userList = query.getResultList();
    
            for (User u:userList){
                System.out.println("id:"+u.getId());
            }
    
            session.close();
            factory.close();
    
            System.out.println(userList+" 大小:"+userList.size());
    
            return userList;
        }
    }
    View Code
    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.nf.entity">
        <!--
        private Integer id;
        private String name;
        private String sex;
        -->
        <class name="User" table="t_student">
            <id name="id" column="id888">
                <!--generator生成的意思
                mysql:native
                -->
                <generator class="native"></generator>
            </id>
            <property name="name" type="java.lang.String" column="name888" length="20" not-null="true"></property>
            <property name="sex" type="java.lang.String" column="sex888" length="4"></property>
    
        </class>
    
        <query name="selectUserById">
            <![CDATA[from User u where u.id>:myid]]>
        </query>
    
        <sql-query name="myQuery">
            <return class="com.nf.entity.User"></return>
            <!--自定义的语句-->
            <![CDATA[
    select
      id888 as id888,
      concat(name888,'(vip)') as name888,
      sex888 as sex888
    from t_student where id888=:myid
    union
    select
      id888 as id888,
      concat(name888,'(普通用户)') as name888,
      sex888 as sex888
    from t_student where name888='ttt'
            ]]>
        </sql-query>
    
    
    </hibernate-mapping>
    View Code

    地址:https://gitee.com/MuNianShi/Hibernate004.git

    三、数据库连接池

     

    1. 配置
    2. <!--
      https://mvnrepository.com/artifact/org.springframework/spring-orm
      Spring
      配置文件的SessionFactory   org.springframework.orm.hibernate5.LocalSessionFactoryBean
       -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-orm</artifactId>
          <version>5.0.1.RELEASE</version>
      </dependency>

      <!--
      https://mvnrepository.com/artifact/com.mchange/c3p0
      spring
      配置文件的DataSource
          com.mchange.v2.c3p0.ComboPooledDataSource
      -->
      <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
      </dependency>
    4.  package com.nf.dao;

    import com.nf.entity.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.query.Query;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Repository;

    import java.util.List;

    @Repository
    @Scope("prototype")
    public class UserDaoImpl implements UserDao {

        @Autowired
        private SessionFactory sessionFactory = null;

        public List<User> getAllUser() {
            List<User> userList = null;
            //spring将直接替代掉下面3行代码
            //Configuration configuration = new Configuration();
            //configuration.configure("hibernate.cfg.xml.bak");
            //factory = configuration.buildSessionFactory();
            //Session session = factory.openSession();
           
    System.out.println("SessionFactory"+sessionFactory);
            Session session = sessionFactory.openSession();

            //Query query = session.createQuery("from User u where u.id>:myid");
           
    Query query = session.createNamedQuery("selectUserById");
            //Query query = session.createNamedQuery("myQuery",User.class);
           
    query.setParameter("myid",1);
            userList = query.getResultList();

            for (User u:userList){
                System.out.println("id:"+u.getId());
            }

            session.close();
            //factory.close();
           
    sessionFactory.close();

            System.out.println(userList+" 大小:"+userList.size());

            return userList;
        }
    }
    1. XML
    6.  <!--创建一个C3P0的数据库连接池,用于提高性能-->
    <bean id="myDateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
        <!--几个个性化的信息-->
        <!--每300秒检查所有连接池中空闲的连接-->
       
    <property name="idleConnectionTestPeriod" value="300"></property>
        <!--最大的空闲时间-->
       
    <property name="maxIdleTime" value="2000"></property>
        <!--最大连接数-->
       
    <property name="maxPoolSize" value="5"></property>
    </bean>
    1.  <!--创建一个C3P0的数据库连接池,用于提高性能-->
    <bean id="myDateSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
        <!--几个个性化的信息-->
        <!--每300秒检查所有连接池中空闲的连接-->
       
    <property name="idleConnectionTestPeriod" value="300"></property>
        <!--最大的空闲时间-->
       
    <property name="maxIdleTime" value="2000"></property>
        <!--最大连接数-->
       
    <property name="maxPoolSize" value="5"></property>
    </bean>
    <!--构造SessionFactory,需要3项内容:1.连接 2.配置 3.实体类映射关系-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!--1.数据库连接池-->
       
    <property name="dataSource" ref="myDateSource"></property>
        <!--2.相关hibernate的配置信息-->
       
    <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect"></prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
            </props>
        </property>
        <!--3.实体类映射关系-->
       
    <property name="mappingResources">
            <list>
                <value>hbm/User.hbm.xml</value>
            </list>
        </property>
    </bean>

    地址:https://gitee.com/MuNianShi/Hibernate004.git

    五、 

    地址:https://gitee.com/MuNianShi/Hibernate004.git

    六、

     地址:https://gitee.com/MuNianShi/Hibernate004.git

    七、声明式事务管理

    PS:事务管理的MYSQL引擎要用

     

    声明式事务管理的代码

    UserServiceImpl里增加这段

     地址:https://gitee.com/MuNianShi/Hibernate004.git

  • 相关阅读:
    Java 重写(Override)与重载(Overload)
    Java 继承
    Java 异常处理
    Java Scanner 类
    Java 流(Stream)、文件(File)和IO
    Java 方法
    Java 正则表达式
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——凡事预则立
    Beta冲刺——问题总结博客(事后诸葛亮和组员交换事宜)
  • 原文地址:https://www.cnblogs.com/junhua4254/p/7736787.html
Copyright © 2011-2022 走看看