一、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. string转utf8后解决TTS识别中文的问题

    今天遇到string字符编码的问题,由于遇到了用TTS将文本转语音的一个API,里面的中文必须是utf8的,我传了一个uncode编码的中文进去,就一直不能正常读出来.后来才发现是编码的问题.这里在网 ...

  2. Impala ODBC 安装笔记

    Impala在线文档介绍了 Impala ODBC接口安装和配置 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5 ...

  3. Jasperreport+ireport 实践操作及web应用

    Jasperreport+ireport 实践操作及web应用   学习完jasperreports+ireport,给我感觉深刻,不仅掌握了报表开发技术,还掌握了怎样在web中生成pdf,xls,r ...

  4. c 语言函数可变參数的处理

    /************************************************************************* > File Name: va_list.c ...

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

    1. the great and the small 拉丁词语animus(mind的意思),animus和另一个拉丁词根anima(life principle.soul.spirit),是许多单词 ...

  6. NOI.AC: NOIP2018 全国模拟赛习题练习

    闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...

  7. 0x01 位运算

    都比较基础吧. 知识点 1.快速幂和快速乘(这里有一个用long double舍弃精度的做法,但是感觉既不稳又没用) 2.懒人写边目录的时候的k^1 3.lowbit,得到的是低到高第一个1的位.求一 ...

  8. 多年iOS开发经验总结(一)

    总结了几个月的东西终于能和大家分享了,不多说,直接看东西! 1.禁止手机睡眠 1 [UIApplication sharedApplication].idleTimerDisabled = YES; ...

  9. 第七章 用户输入和while 循环

    7.1 创建多行字符串的方式: 01 prompt="if you tell me who you are, we can personalize the message you see.& ...

  10. Xml实现图片旋转

    1. 需求:不使用Java代码,实现旋转图片动画 2.实现:使用Progressbar控件 3. anim/anim_loading.xml <?xml version="1.0&qu ...