简单介绍一下业务实现流程:
2.框架结构:
前期工作
1.导入数据库连接相关的jar包,在这次项目中我使用的是mysql数据库所以需导入的是MySQL数据库连接驱动包(mysql-connector-java-5.1.40.jar)和c3p0连接池专属包(mchange-commons-java-0.2.11.jar、c3p0-0.9.5.2.jar)
2.编写C3P0配置文件,连接数据库,引入MySQL数据库连接驱动包和c3p0连接池专属包(mysql-connector-java-5.1.40.jar、mchange-commons-java-0.2.11.jar、c3p0-0.9.5.2.jar)
C3p0-config.xml文件这里有两种写法:
<!-- 第一种c3p0的写法 -->
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!-- 前四个最重要 -->
<!-- 设置常用的属性 url 驱动 用户 密码 -->
<property name="jdbcUrl">
<![CDATA[jdbc:mysql://localhost:3306/water?useUnicode=true&characterEncoding=UTF8&useSSL=false]]>
</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password"></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 2 -->
<property name="acquireIncrement">2</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">3</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">3</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">5</property>
</default-config>
</c3p0-config>
<!-- 第二种c3p0的写法 -->
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!-- 必填 -->
<!-- 驱动类 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- URL -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/water?useUnicode=true&characterEncoding=UTF8&useSSL=false</property>
<!-- 账号 -->
<property name="user">root</property>
<!-- 密码 -->
<property name="password"></property>
<!-- 可选 -->
<!-- 初始连接数 -->
<property name="initialPoolSize">30</property>
<!-- 最大闲置时间 -->
<property name="maxIdleTime">30</property>
<!-- 最大连接数 -->
<property name="maxPoolSize">100</property>
<!-- 最小连接数 -->
<property name="minPoolSize">20</property>
<!-- 最大SQL语句数 -->
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
3.测试数据库连接
编写log4j日志记录器配置文件打印日志,引入Log4j日志记录包(log4j-1.2.8.jar)
在这里我使用了Log4j日志记录器来输入变量,需要导入log4j相关的jar包(log4j-1.2.8.jar)和配置相关的配置文件(log4j.properties)
#log4j.properties
#设置日志级别和目的地
#log4j.rootCategory=日志级别,目的地1,目的地2...
#日志级别有(从低到高)OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
#高级别的日志可以包含低级别的日志
#目的地可以定义多个
log4j.rootCategory=INFO,console,file
#配置目的地
#配置目的地的类型Appender
#log4j.appender.目的地名=目的地类型
#目的地类型有:
#org.apache.log4j.ConsoleAppender(控制台),
#org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l [%p] -- %m%n
#配置日志的格式Layout
#log4j.appender.目的地名.layout=格式类型
#格式类型有:
#org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
#配置具体的格式ConversionPattern
#%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
#比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
#%l 输出日志事件的发生位置,及在代码中的行数;
#%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
#%M 输出打印该条日志的方法名;
#%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l [%p] -- %m%n
log4j.appender.file.File=mylog.log
成功连接数据库显示如下:
正式开始
编写执行sql语句的配置文件(water.xml)解析XML文件,加载SQL语句到缓存
<!-- water.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<services>
<sql key="getAccountCount" value="select count(1) from account where user_name=? and user_pwd=?" />
<sql key="findUser" value="select count(1) from account where user_name=?" />
</services>
建立工具层(utils)