应用Spring和Hibernate(C3P0数据池)写数据库交互项目

一、xml的配置文件(application.xml)

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
          destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl"
                  value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8" />
        <property name="user" value="root" />
        <property name="password" value="root" />
        <property name="maxPoolSize" value="20" />
        <property name="minPoolSize" value="1" />
        <property name="initialPoolSize" value="1" />
        <property name="maxIdleTime" value="20" />
    </bean>

    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
            <list>
                <value>com.zxc.po</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext
                </prop>
            </props>
        </property>
    </bean>
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut expression="execution(* com.zxc.service.*Impl.*(..))"
                      id="zxcpointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="zxcpointcut"/>
    </aop:config>
    <bean id="userService" class="com.zxc.service.UserServiceImpl">
        <property name="dao" ref="dao"/>
    </bean>
    <bean id="dao" class="com.weikun.zxc.UserDAOHibernate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
</beans>

datasource标签配置数据库的链接,此处使用的是C3P0,也可以换成dbcp,但是使用德鲁伊时候要另外使用ini配置文件。

sessionFatory标签配置回话工厂,将datasource数据库连接放入工厂中,设置好其自动扫描的po层的包(用list标签,值用value),然后设置Hibernate的配置

transactionManager标签配置事务管理,tx标签专门配置事务管理。

aop:config用来配置aop

 

二、dao层

  

package com.zxc.dao;

import com.zxc.po.PageBean;
import com.zxc.po.User;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.Iterator;
import java.util.List;
public class UserDAOHibernate {
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }


//    static{
//        Configuration configuration=new Configuration().configure("hibernate.cfg.xml");
//        sf=configuration.buildSessionFactory();
//    }不用每次都写这段话了,有AOP的配置,所以每次运行到UserServiceImpl类中的方法时,自动在方法前进行sessionfactory的创建

    public UserDAOHibernate(){

    }

    public PageBean queryAll(int pageNo,int pageSize){
        PageBean page =new PageBean();
        Session session=sessionFactory.openSession();
        Query q=session.createQuery("from User as a order by a.id desc");
        q.setCacheable(true);
        q.setFirstResult((pageNo-1)*pageSize);
        q.setMaxResults(pageSize);
        List<User> list=q.list();

        page.setPageNo(pageNo);//当前页
        page.setPageSize(pageSize);//每页多少行


        page.setList(list);//当前页数据
        q=session.createQuery("select count(*) from User as a");
        List list1=q.list();
        Iterator it=list1.iterator();

        while(it.hasNext()){
            Object o=it.next();
            page.setMaxCount(new Integer(o.toString()).intValue());//一共多少行
        }

        page.setMaxPage((int)Math.ceil(page.getMaxCount()/page.getPageSize()));//最大页数

        session.close();
        return page;
    }
    public boolean addUser(User user){
        Session session=sessionFactory.openSession();
        boolean flag=false;
        Transaction transaction=session.beginTransaction();
        try {
            session.save(user);
            transaction.commit();
            flag=true;
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally{
            session.close();
        }

        return flag;
    }
    public boolean delUser(String id){
        boolean flag=false;
        Session session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        try {
            User user=session.load(User.class,Integer.parseInt(id));
            session.delete(user);
            transaction.commit();
            flag=true;
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally{
            session.close();
        }

        return flag;
    }
    public boolean updateUser(User user){
        boolean flag=false;
        Session session=sessionFactory.openSession();
        Transaction transaction=session.beginTransaction();
        try {
            session.saveOrUpdate(user);
            transaction.commit();
            flag=true;
        }catch(Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally{
            session.close();
        }

        return flag;

    }
    public User queryUserById(String id){
        Session session=sessionFactory.openSession();
        User user=session.load(User.class,Integer.parseInt(id));
        if (!Hibernate.isInitialized(user)){
            Hibernate.initialize(user);
        }
        session.close();

        return user;

    }
}

三、service层

  

package com.zxc.service;
import com.zxc.dao.UserDAOHibernate;
import com.zxc.po.PageBean;
import com.zxc.po.User;
import java.util.List;
public class UserServiceImpl {
    private UserDAOHibernate dao;//;=new UserDAOHibernate();

    public UserDAOHibernate getDao() {
        return dao;
    }

    public void setDao(UserDAOHibernate dao) {
        this.dao = dao;
    }

    public boolean addUser(User user){
        return dao.addUser(user);
    }
    public User queryUserById(String id){
        return dao.queryUserById(id);
    }
    public boolean delUser(String id){

        return dao.delUser(id);
    }
    public PageBean queryAll(int pageNo, int pageSize){

        return dao.queryAll(pageNo,pageSize);
    }
    public boolean updateUser(User user){

        return dao.updateUser(user);
    }
}

 四、control层

  InitControl类用来当spring总大脑,管理servlet,创建getBean类,

package com.zxc.control;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@WebServlet(name = "initControl",urlPatterns = {"/init"},loadOnStartup =1 )
public class InitControl extends HttpServlet{
    private static ApplicationContext ctx=null;
    @Override
    public void init() throws ServletException {
        ctx= WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());//加载本身的配置文件web.xml
    }
    public static Object getBean(String beanName){
        return ctx.getBean(beanName);
    }
}

userControl类

package com.zxc.control;

import com.alibaba.fastjson.JSON;
import com.zxc.po.PageBean;
import com.zxc.po.User;
import com.zxc.service.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(
        name = "userControl",urlPatterns = {"/user"}
)
public class UserControl extends HttpServlet{
    private UserServiceImpl service=(UserServiceImpl)InitControl.getBean("userService");
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action=req.getParameter("action");

        switch (action){
            case "query":
                String pageNo=req.getParameter("no");//当前页
                int pageSize=2;
                PageBean pageBean=service.queryAll(Integer.parseInt(pageNo),pageSize);//每次页面的数据传过来,还需要传输pagebean
                resp.setContentType("text");
                resp.setCharacterEncoding("utf-8");
                String json=JSON.toJSON(pageBean).toString();
                System.out.println(json);
                PrintWriter out=resp.getWriter();
                out.print(json);
                out.flush();
                out.close();
                break;
            case "del":
                String id=req.getParameter("id");
                service.delUser(id);
                break;
            case "add":
                String myid=req.getParameter("myid");
                User user=new User();
                user.setUsername(req.getParameter("username"));
                user.setPassword(req.getParameter("password"));

                if(!myid.equals("")){//修改
                    user.setId(Integer.parseInt(myid));
                    service.updateUser(user);
                    break ;
                }

                service.addUser(user);

                break;
            case "up"://通过主键 定位本条记录
                id=req.getParameter("id").toString();
                user=service.queryUserById(id);
                resp.setContentType("text");
                resp.setCharacterEncoding("utf-8");
                json=JSON.toJSONString(user);//

                out=resp.getWriter();
                out.print(json);
                out.flush();
                out.close();
                break;
            default:
                break;
        }
    }
}

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>
            contextConfigLocation
        </param-name>
        <param-value>
            classpath*:applicationContext.xml
        </param-value>
    </context-param>
    <listener>
        <!-- Application context=new ClassPathXmlApplicationConext() -->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

以上是spring配置web项目时的xml配置方法,welcom-file-list标签用来设置初始页面,context-parme用来设置容器配置文件

posted @ 2018-04-06 15:22  彩电  阅读(605)  评论(0编辑  收藏  举报