JavaBean 是在编写 Java 时专门创建的 Java 类,根据 JavaBean API 规范进行编码 。 以下是区分
1. 它提供了一个默认的无参数构造函数。
2. 它应该是可序列化的,实现 serializable 接口。
3. 它可能有大量可以读或写的属性。
它可能有大量“getter”和“setter”方法的属性。
JavaBean 属性是一个命名属性,这个属性是用户可以访问的对象。属性可以是任何 Java 数据类型,包括自定义的类。
JavaBean 属性可以读、写、只读或只写。JavaBean 属性是在 JavaBean 实现类中通过两种方法访问的:
方法 描述
getPropertyName() 例如,如果属性名称是 firstName,你的方法名称应该是 getFirstName(),它可以读该属性。该方法叫做访问器。
setPropertyName() 例如,如果属性名称是 firstName,你的方法名称应该是 setFirstName(),它可以写该属性。该方法叫做赋值方法。
一个只读属性只会有一个 getPropertyName() 方法,而一个只写属性将只有一个 setPropertyName() 方法。
考虑一个带有一些属性的 student 类:
package com.tutorialspoint;
public class StudentsBean implements java.io.Serializable
{
private String firstName = null;
private String lastName = null;
private int age = 0;
public StudentsBean() {
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
public int getAge(){
return age;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public void setAge(Integer age){
this.age = age;
}
}
了解以上内容,即可按照数据库的logininfo表中的字段进行映射到javabean对象User中的私有属性中去。
代码如下:
package com.sc1230.JDBC.JavaBean;
@SuppressWarnings("serial")
public class User implements java.io.Serializable {
public User() { //必须要提供一个空构造
}
private int uid;
private String username;
private String upassword;
private String addTime;
private String notifion;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUpassword() {
return upassword;
}
public void setUpassword(String upassword) {
this.upassword = upassword;
}
public String getAddTime() {
return addTime;
}
public void setAddTime(String addTime) {
this.addTime = addTime;
}
public String getNotifion() {
return notifion;
}
public void setNotifion(String notifion) {
this.notifion = notifion;
}
public Object[] getBeaninfo() {
Object[] objects = new Object[]{uid,username,upassword,addTime,notifion};
return objects;
}
}
有了以上的基础后,即可直接使用DBUtils组件,对数据库进行操作;
具体的分析详看代码中的注解,代码如下:
/**
*此段代码通过jdpc获取一个连接池,并提供数据源对象(dataSource)
*
*/
package com.sc1230.JDBC.BDUtils;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class DBDbcp {
private static DataSource dataSource;
static
{
try {
InputStream is = new FileInputStream("config/db1.properties");
Properties prop = new Properties();
prop.load(is);
dataSource = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取数据源
public static DataSource getDataSource() {
return dataSource;
}
//获取连接,不过这里用不上
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
此段代码即是具体的实现
package com.sc1230.JDBC.TestJDBC;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import com.sc1230.JDBC.BDUtils.DBDbcp;
import com.sc1230.JDBC.JavaBean.User;
public class TestDBUtils {
/**
* 以下三个都是测试DBUtils组件的update方法对数据库的内容进行维护
* 其的用法非常的单一和简单,故不再对其进行赘述;
*/
@Test
public void testDBUtilsInsert()
{
// 1,通过数据源来获取封装好的组件对象
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "insert into loginInfo values(?,?,?,?,?)";
Object[] params = {null,"dzh","dzh",null,"HELLO,WORLD"};
try {
qr.update(sql,params);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void testDBUtilsDeleteById()
{
// 1,通过数据源来获取封装好的组件对象
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "delete from loginInfo where uid = ?";
//Object[] params = {11};
try {
qr.update(sql,11);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void testDBUtilsUpdateById()
{
// 1,通过数据源来获取封装好的组件对象
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "update loginInfo set upassword = ? where uid = ?";
Object[] params = {"lzd1",3};
try {
qr.update(sql,params);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 测试DBUtils组件中的BeanHandler
* 这个用法相当的使用,也是我们必须要掌握的一种方法
* 其中使用到了javaBean组件,所以也要要求了解掌握JavaBean的基本概念
*/
@Test
public void testDBUtilsQueryById()
{
// 1,通过数据源来获取封装好的组件对象
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "select * from loginInfo where uid = ?";
Object[] params = {3};
try {
User user = qr.query(sql,new BeanHandler(User.class),params);
System.out.println(Arrays.toString(user.getBeaninfo()));
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 测试DBUtils组件中的BeanListHandler
* 这个用法相当的使用,也是我们必须要掌握的一种方法
* 其中使用到了javaBean组件,所以也要要求了解掌握JavaBean的基本概念
* 其与BeanHandler的区别在于BeanListHandler用了List对BeanHandler进行了包装
*/
@Test
public void testDBUtilsAllQuery()
{
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "select * from loginInfo";
Object[] params = {};
try {
List users = qr.query(sql,new BeanListHandler(User.class),params);
for (User user : users) {
System.out.println(Arrays.toString(user.getBeaninfo()));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 测试DBUtils组件中的ArrayListHander
* 其与ArrayHander的区别在于ArrayListHander用了List对ArrayHander进行了包装
* 具体用法很简单,不在赘述;
*/
@Test
public void testDBUtilsAllQueryByArrayListHander()
{
QueryRunner qr = new QueryRunner(DBDbcp.getDataSource());
String sql = "select * from loginInfo where uid = ?";
Object[] params = {9};
try {
List