您的位置:首页 > 编程语言 > Java开发

java操作数据库的演进jdbc-datasource-hibernate-spring

2011-05-04 20:30 681 查看
java访问数据库最直接的方式便是JDBC,这里我们以Mysql数据库为例,来谈谈Java访问数据库上的演进,先建立一个数据库hib_test,然后建立一个用户表t_user,有三个字段,id,name,password:

create table `hib_test`.`t_user`(
`id` BIGINT not null auto_increment,
`name` VARCHAR(20) not null unique,
`password` VARCHAR(20) not null,
primary key (`id`)
);

create unique index `PRIMARY` on `hib_test`.`t_user`(`id`);
create unique index `name` on `hib_test`.`t_user`(`name`);


接着建立与表对应的域对象TUser:

package org.fn.dao;

/**
* TUser entity. @author MyEclipse Persistence Tools
*/

public class TUser implements java.io.Serializable {

// Fields

/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String password;

// Constructors

/** default constructor */
public TUser() {
}

/** full constructor */
public TUser(String name, String password) {
this.name = name;
this.password = password;
}

// Property accessors

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

}


这要的操作便是insert和select

1.jdbc带c3p0数据源操作

package org.fn;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceTest {

/**
* @param args
* @throws PropertyVetoException
* @throws SQLException
*/
public static void main(String[] args) throws PropertyVetoException, SQLException {
// TODO Auto-generated method stub
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.mysql.jdbc.Driver" ); //loads the jdbc driver
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/hib_test" );
cpds.setUser("root");
cpds.setPassword("root");

DataSource dataSource = cpds;

Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement("select id, name, password from t_user");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getLong(1) + " : " + rs.getString(2) + " : " + rs.getString(3));

}
rs.close();
pstmt.close();
conn.close();
}

}


2.hibernate数据库操作,其中两个配置文件如下:

TUser.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.fn.dao.TUser" table="t_user" catalog="hib_test">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" not-null="true" unique="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20" not-null="true" />
</property>
</class>
</hibernate-mapping>


hibernate.cfg.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/hib_test
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="c3p0.min_size">1</property>
<mapping resource="org/fn/dao/TUser.hbm.xml" />

</session-factory>

</hibernate-configuration>


package org.fn;

import java.util.List;

import hibernate.HibernateSessionFactory;

import org.fn.dao.TUser;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class TUserOp {

public static void main(String[] args) {
//save();
find();
}

/**
*
*/
public static void find() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();

Query query = session.createQuery("from TUser");
List<TUser> list = query.list();

for (TUser user : list) {
System.out.println(user.getId() + " : " + user.getName() + " : " + user.getPassword());
}

tx.commit();
session.close();
}

public static void save() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();

TUser user = new TUser();
user.setName("fnszb7");
user.setPassword("1234");

Long id = (Long) session.save(user);
System.out.println(id);

user.setPassword("4321");

tx.commit();
session.close();
}
}


3。通过spring的bean容器,和HibernateDaoSupport 与 HibernateTemplate操作数据库,配置文件如下:

applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--
<property name="configLocation" value="file:src/hibernate.cfg.xml">
-->
<property name="configLocation" value="hibernate.cfg.xml">
</property>
</bean>
</beans>


UserDao(进程HibernateDaoSupport):

package org.fn;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UserDao extends HibernateDaoSupport {
public List find(String queryString) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sf = (SessionFactory) ctx.getBean("sessionFactory");
super.setSessionFactory(sf);
HibernateTemplate ht = super.getHibernateTemplate();
return ht.find(queryString);
}
}


package org.fn;

import java.util.List;

import org.fn.dao.TUser;

public class SpringOp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//        SessionFactory sf = (SessionFactory) ctx.getBean("sessionFactory");

//        HibernateTemplate ht = new HibernateTemplate(sf);
UserDao userDao = new UserDao();
List<TUser> list = userDao.find("from TUser");

for (TUser user : list) {
System.out.println(user.getId() + " : " + user.getName() + " : " + user.getPassword());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: