JDBC的业务逻辑的应用
文件的定义规范:

Dao.java文件内容:
package com.sk.jdbc.dao;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.sk.jdbc.util.ConnectionUtil;
//Dao类中存放通用的数据访问方法
public class Dao<T> {
private Class<T> clazz;
private QueryRunner queryRunner = new QueryRunner();
public Connection conn = null;
@SuppressWarnings("unchecked")
public Dao() {
Type type = this.getClass().getGenericSuperclass(); //
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] types = parameterizedType.getActualTypeArguments();
if (types != null && types.length > 0) {
if (types[0] instanceof Class) {
clazz = (Class<T>) types[0];
}
}
}
}
public void openConnection() throws SQLException {
if (this.conn == null || this.conn.isClosed()) {
this.conn = ConnectionUtil.getConnection();
}
}
public void closeConnection() throws SQLException {
if (this.conn != null && !this.conn.isClosed() ) {
ConnectionUtil.release(this.conn);
}
}
public void beginTransaction() throws SQLException {
openConnection();
this.conn.setAutoCommit(false);
}
public void commit() throws SQLException {
if (this.conn != null) {
this.conn.commit();
}
}
public void rollback() throws SQLException {
if (this.conn != null) {
this.conn.rollback();
}
}
// 通用的update()方法:
public void update(String sql, Object... args) throws SQLException {
openConnection();
queryRunner.update(conn, sql, args);
}
// 通用的查询方法----查单个记录
public T queryOne(String sql, Object... args) throws SQLException {
T entity = null;
openConnection();
entity = queryRunner.query(conn, sql, new BeanHandler<>(clazz), args);
return entity;
}
// 通用的查询方法----查多个记录
public List<T> queryList(String sql, Object... args) throws SQLException {
List<T> list = null;
openConnection();
list = queryRunner.query(conn, sql, new BeanListHandler<>(clazz), args);
return list;
}
// 查单值
public Object queryValue(String sql, Object... args) throws SQLException {
Object result = null;
openConnection();
result = queryRunner.query(conn, sql, new ScalarHandler<>(), args);
return result;
}
public Map<String, Object> queryMap(String sql, Object... args)
throws SQLException {
Map<String, Object> phoneMap = null;
openConnection();
phoneMap = queryRunner.query(conn, sql, new MapHandler(), args);
return phoneMap;
}
public List<Map<String, Object>> queryMapList(String sql, Object... args)
throws SQLException {
List<Map<String, Object>> phoneMapList = null;
openConnection();
phoneMapList = queryRunner.query(conn, sql, new MapListHandler(), args);
return phoneMapList;
}
}
UserDao.java 文件:
package com.sk.jdbc.dao;
import java.sql.SQLException;
import com.sk.jdbc.entity.User;
public class UserDao extends Dao<User> {
public void updateAccount(int id,double amount) throws SQLException{
String sql="update t_user set account=account+? where id=?";
update(sql, amount,id);
}
}
User.java文件
package com.sk.jdbc.entity;
//ORM
public class User {
private Integer id;
private String username;
private String password;
private int role;
private Double account;
public User() {
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
public Double getAccount() {
return account;
}
public void setAccount(Double account) {
this.account = account;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + ", role=" + role + ", account=" + account + "]";
}
}
UserService.java文件
package com.sk.jdbc.service;
import java.sql.SQLException;
import com.sk.jdbc.dao.UserDao;
public class UserService {
public void transfer(int outId, int inId, double amount)
throws SQLException {
UserDao userDao = new UserDao();
try {
userDao.beginTransaction(); // 开启事务
userDao.updateAccount(outId, -amount);
// int i=100/0;
// System.out.println(i);
userDao.updateAccount(inId, amount);
userDao.commit(); // 提交事务
} catch (SQLException e) {
userDao.rollback(); // 回滚事务
e.printStackTrace();
throw e;
} finally {
userDao.closeConnection();
}
}
}
ConnetcionUtil.java文件
package com.sk.jdbc.util;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class ConnectionUtil {
private static ComboPooledDataSource ds=null;
static {
ds = new ComboPooledDataSource("mysqlc3p0");
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void release( Connection conn) throws SQLException {
conn.close();
}
}
c3p0-config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-config name="mysqlc3p0"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/userdb?characterEncoding=utf8 </property> <property name="user">root</property> <property name="password">1234</property> <property name="initialPoolSize">10</property> <property name="maxPoolSize">50</property> <property name="minPoolSize">10</property> <property name="maxStatements">0</property> <property name="acquireIncrement">5</property> <property name="maxStatementsPerConnection">10</property> </named-config> <named-config name="orclc3p0"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/stuinfodb?characterEncoding=utf8 </property> <property name="user">lal</property> <property name="password">root</property> <property name="initialPoolSize">10</property> <property name="maxPoolSize">50</property> <property name="minPoolSize">10</property> <property name="maxStatements">0</property> <property name="acquireIncrement">5</property> <property name="maxStatementsPerConnection">10</property> </named-config> </c3p0-config>
TransferAccountTest.java文件
package com.sk.jdbc.test;
import java.sql.SQLException;
import com.sk.jdbc.service.UserService;
public class TransferAccountTest {
public static void main(String[] args) {
UserService userService=new UserService();
try {
userService.transfer(1,2,1000);
System.out.println("转账成功!");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("转账失败!");
}
}
}
sql.sql文件
select * from t_course where c_no='450101'; SELECT c_no,c_name,c_time FROM t_course WHERE c_time=(select max(c_time) from t_course); select s_id,s_no,s_name,s_birth,s_gender,s_class,s_phone from t_student where s_id=1; select count(s_no) males from t_student where s_gender='M'; select r_result from t_result where r_s_no='18302012301' and r_c_no='450101';
数据库样式:


本文来自博客园,作者:极地阳光-ing,转载请注明原文链接:https://www.cnblogs.com/Polar-sunshine/p/13672245.html

浙公网安备 33010602011771号