一、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用来设置容器配置文件

应用Spring和Hibernate(C3P0数据池)写数据库交互项目的更多相关文章

  1. BAE hibernate c3p0数据库连接池

    根据BAE官方文档:bae是不支持连接池的,但今天试验却能实现hibernate c3p0连接池,避免mysql连接超时 hibernate主配置文件hibernate.cfg.xml代码 <! ...

  2. Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑

    标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报  分类: Spring/Spring MVC(6)  Hibernate ...

  3. Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目

    原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...

  4. c3p0数据库连接池+mysql数据库基本使用方法

           一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒), 连接就会被自动释放掉. ...

  5. 【转】通过Hibernate将数据 存入oracle数据库例子

    一. Hibernate介绍 Hibernate是基于对象/关系映射(ORM,Object/Relational Mapping)的一个解决方案.ORM方案的思想是将对象模型表示的对象映射到关系型数据 ...

  6. hibernate 插入数据时让数据库默认值生效

    用hibernate做数据库插入操作时,在数据库端已经设置了对应列的默认值,但插入的数据一直为null.查找资料发现,原来是hibernate的配置项在作怪. Hibernate允许我们在映射文件里控 ...

  7. 关于hibernate插入数据到mysql数据库中文乱码问题的解决

    要想解决这个问题就要找到问题的症结所在 1.首先将数据提交到action输出看action里的数据是不是中文乱码,结果很遗憾并不是这里的问题 2.设置数据库连接url: 3.打开mysql安装文件里的 ...

  8. tushare获取的数据与mysql数据库交互简单范例

    #!/usr/bin/python2.7# -*- coding: UTF-8 -*- import tushare as tsimport pandas as pdfrom sqlalchemy i ...

  9. C3P0连接池在hibernate和spring中的配置

    首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...

随机推荐

  1. Deming管理系列(1)——开车仅仅看后视镜

    问题: 当业务经理被要求为未来的业务做计划时,他会提出一个自觉得不错的数字,而董事会往往希望能获得更大的收益,多次与其谈判.而业务经理在这方面不是新手,他有非常多可用的报告. 为什么不能让业务规划流程 ...

  2. 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查

    (1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...

  3. 2015.04.24,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 34

    1.no fatigue indefatigable([indi'fætigәb(ә)l] adj. 不知疲倦的)来自faigue,in-是反义词缀:后缀-able表示able to be,因此ind ...

  4. lightoj--1294--Largest Box(三分)

    Largest Box Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Sta ...

  5. oracle 11gR2 如何修改vip

    因为业务需要,需要将p570a主机和p570b主机上的vip做修改 修改前ip 192.168.128.12   p570a-vip 192.168.128.13   p570b-vip 修改后ip ...

  6. BigInteger类型转换成Long类型或int类型问题

            BigInteger bi = new BigInteger("123");           int i = bi.intValue();         lo ...

  7. 利用JDBC或者事物或者调用存储过程实现往MySQL插入百万级数据

    转自:http://www.cnblogs.com/fnz0/p/5713102.html 想往某个表中插入几百万条数据做下测试, 原先的想法,直接写个循环10W次随便插入点数据试试吧,好吧,我真的很 ...

  8. Migrations有两个文件迁移数据的方法

    不分开迁移报错如下; 解决方案 1 迁移Migration/nfoManage EntityFramework\Enable-Migrations -ContextTypeName InfoModel ...

  9. js 转化为几天前,几小时前,几分钟前...

    转换标准时间为时间戳: function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/" ...

  10. MyEclipse安装TestNG

    1.获取TestNG运行包. (1).直接下载*.jar包并导入项目中. (2).maven下载. http://testng.org/doc/download.html 2.为IDE加载TestNG ...