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

原文地址:https://www.cnblogs.com/junhua4254/p/7736787.html