应用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中 ...
随机推荐
- iOS 相似QQ空间表视图下拉头部视图放大效果实现
UITableView 是 UIScrollView 的子类. 所以 UIScrollView 的代理方法.在UITableView 上相同可以得到适用. 既然如此那么我们就行知道.在表格下拉的过程中 ...
- unity3d教程运行物理机制
首先,我们将把Hooke定律写Euler方法结合在一起找到新坐标.加速和速度. Hooke定律是F=kx,这里的F是指由水流产生的力(记住,我们将把水体表面模拟为水流),k是指水流的常量.x则是位移. ...
- angular 兼容ie11 ie11兼容
兼容一(new Date()用法) new Date('2018-01-01 00:00:00').getHours(); new Date('2018-01-01 00:00:00').getMin ...
- 阿里云服务器用Docker配置运行nginx并访问
一.Docker拉取nginx镜像 docker pull nginx:1.12.2 这里是下载的是nginx的1.12.2版本,其他版本的镜像请访问https://hub.docker.com/r/ ...
- 几种AutoLayout自动布局所经常使用的布局约束类型
width表示约束ui控件的固定宽度 height表示约束ui控件的固定高度 Leading Space to Superview 与父视图的左边界线保持固定距离 Trailing Space to ...
- 使用Jquery Ajax请求 下载压缩文件
使用第三方组件: ICSharpCode.SharpZipLib 给按钮绑定一个点击事件 后台处理: public ActionResult DownZip(string ids) { if (st ...
- POJ 3252 组合数学?
大神们的题解我一个都没看懂........... 十分的尴尬 题意:算出闭区间内二进制中0的个数大于等于1的个数的数字有多少个 思路: 组合数学(n小于500的时候都可以出解,只不过高精比较麻烦). ...
- Java之Foreach语句
Foreach是for语句的特殊简化版本,但任何时候的foreach语句都可以改写成for语句.Foreach语句在遍历数组等方面为程序员提供了很大的方便 语法如下: For(元素变量 x:遍历对象o ...
- shell-6.环境变量配置文件
1. 2. 3. 4. 5. 6.
- ajax第一天总结
AJAX开发步骤 步一:创建AJAX异步对象,例如:createAJAX() 步二:准备发送异步请求,例如:ajax.open(method,url) 步三:如果是POST请求的话,一定要设置AJAX ...