应用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&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数据池)写数据库交互项目的更多相关文章
- BAE hibernate c3p0数据库连接池
根据BAE官方文档:bae是不支持连接池的,但今天试验却能实现hibernate c3p0连接池,避免mysql连接超时 hibernate主配置文件hibernate.cfg.xml代码 <! ...
- Spring MVC+Hibernate JPA搭建的博客系统项目中所遇到的坑
标签: springmvc hibernate 2016年12月21日 21:48:035133人阅读 评论(0) 收藏 举报 分类: Spring/Spring MVC(6) Hibernate ...
- Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目
原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...
- c3p0数据库连接池+mysql数据库基本使用方法
一般我们在项目中操作数据库时,都是每次需要操作数据库就建立一个连接,操作完成后释放连接.因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒), 连接就会被自动释放掉. ...
- 【转】通过Hibernate将数据 存入oracle数据库例子
一. Hibernate介绍 Hibernate是基于对象/关系映射(ORM,Object/Relational Mapping)的一个解决方案.ORM方案的思想是将对象模型表示的对象映射到关系型数据 ...
- hibernate 插入数据时让数据库默认值生效
用hibernate做数据库插入操作时,在数据库端已经设置了对应列的默认值,但插入的数据一直为null.查找资料发现,原来是hibernate的配置项在作怪. Hibernate允许我们在映射文件里控 ...
- 关于hibernate插入数据到mysql数据库中文乱码问题的解决
要想解决这个问题就要找到问题的症结所在 1.首先将数据提交到action输出看action里的数据是不是中文乱码,结果很遗憾并不是这里的问题 2.设置数据库连接url: 3.打开mysql安装文件里的 ...
- tushare获取的数据与mysql数据库交互简单范例
#!/usr/bin/python2.7# -*- coding: UTF-8 -*- import tushare as tsimport pandas as pdfrom sqlalchemy i ...
- C3P0连接池在hibernate和spring中的配置
首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...
随机推荐
- 本地 配置 Memcache
如果帮到了您,可以支持一下,谢谢您的支持! Windows下的Memcache安装: 64bit:如果需要win64版,下载 memcached-win64-1.4.4-14.zip(直接下),里面有 ...
- nyoj--74--小学生算术(水)
小学生算术 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 很多小学生在学习加法时,发现"进位"特别容易出错.你的任务是计算两个三位数在相加时需要多少 ...
- Java IO 基础
早上复习了IO.NIO.AIO相关的概念,将其中一些要点记录一下. 从编程语言层面 BIO | NIO | AIO 以Java的角度,理解,linux c里也有AIO的概念(库),这些概念不知道什么原 ...
- DBS-Oracle:表的连接查询
ylbtech-DBS-Oracle:表的连接查询 链接查询是指基于两个或两个以上表或试图的查询.在实际应用中,查询单个表可能无法满足应用程序的实际需求(例如显示雇员的部门名称以及雇员名),在这种情况 ...
- [C#] 隐式类型var —— 示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
博客背景和目的 最近在用C++写一个底层的东西,需要读取和创建shp文件.虽然接触shp文件已经几年了,但是对于shp文件内到底包含什么东西一直是一知半解.以前使用shp文件都是利用软件(如ArcGI ...
- 洛谷P3357 最长k可重线段集问题(费用流)
题目描述 给定平面 x-O-yx−O−y 上 nn 个开线段组成的集合 II ,和一个正整数 kk .试设计一个算法,从开线段集合 II 中选取出开线段集合 S\subseteq IS⊆I ,使得在 ...
- SQL学习——基础语句(1)
简序 1.SQL,指结构化查询语言,全称是 Structured Query Language. 2.SQL 让您可以访问和处理数据库. 3.SQL 是一种 ANSI(American Nationa ...
- Linux crontab 定时任务设置
第1列分钟1-59第2列小时1-23(0表示子夜)第3列日1-31第4列月1-12第5列星期0-6(0表示星期天)第6列要运行的命令 下面是crontab的格式:分 时 日 月 星期 要运行的命令 这 ...
- rmi 工作原理
rmi 工作原理 (转) 工作SocketJava应用服务器网络应用 RMI(Remote Method Invocation,远程方法调用)是Java的一组拥护开发分布式应用程序的API.RMI使 ...