JavaBean 是在编写 Java 时专门创建的 Java 类,根据 JavaBean API 规范进行编码 。 以下是区分
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>(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<User> users = qr.query(sql,new BeanListHandler<User>(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<Object[]> users = qr.query(sql,new ArrayListHandler(),params); for (Object[] user : users) { System.out.println(Arrays.toString(user)); } } catch (SQLException e) { e.printStackTrace(); } } /** * 测试DBUtils组件中的KeyedHander * 通过两层的Map对结果进行包装,了解即可,不在赘述 */ @Test public void testDBUtilsAllQueryByKeyedHander() { // 1,通过数据源来获取封装好的组件对象 QueryRunner qr = new QueryRunner(DBDbcp.getDataSource()); String sql = "select * from loginInfo"; Object[] params = {}; try { Map<Object, Map<String, Object>> users = qr.query(sql,new KeyedHandler<>(),params); System.out.println(users); } catch (SQLException e) { e.printStackTrace(); } } /** * 测试DBUtils组件中的MapListHander * 其与MapHander的区别在于MapListHander用了List对MapHander进行了baozhuang * 具体用法很简单,不在赘述; */ @Test public void testDBUtilsAllQueryMapListHander() { QueryRunner qr = new QueryRunner(DBDbcp.getDataSource()); String sql = "select * from loginInfo"; Object[] params = {}; try { List<Map<String, Object>> users = qr.query(sql,new MapListHandler(),params); System.out.println(users); } catch (SQLException e) { e.printStackTrace(); } } /** * 测试DBUtils组件中的ScalarHander处理数据库的单数据 * 例如String sql = "select count(*) from loginInfo"; * 返回值是long类型的 */ @Test public void testDBUtilsGetCounts() { // QueryRunner qr = new QueryRunner(DBDbcp.getDataSource()); String sql = "select count(*) from loginInfo"; Object[] params = {}; try { long count = qr.query(sql,new ScalarHandler<>(),params); //注意,这里返回值是long类型的 System.out.println(count); } catch (SQLException e) { e.printStackTrace(); } } }