java服务器连接mysql数据库
来源:互联网 发布:网络暴力事件案例 编辑:程序博客网 时间:2024/06/05 02:34
编辑POM
<build> <plugins> <plugin> <groupId>org.jooq</groupId> <artifactId>jooq-codegen-maven</artifactId> <version>3.7.2</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-meta</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-codegen</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq</artifactId> <version>3.7.2</version> </dependency> </dependencies> <configuration> <!-- JDBC connection parameters --> <jdbc> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://数据库连接:端口/?user=myUser</url> <user>myUser</user> <password>myPassword</password> </jdbc> <!--jdbc> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/?user=myUser</url> <user>myUser</user> <password>myPassword</password> </jdbc--> <!-- Generator parameters --> <generator> <name>org.jooq.util.DefaultGenerator</name> <database> <name>org.jooq.util.mysql.MySQLDatabase</name> <includes>.*</includes> <inputSchema>mySchema</inputSchema> </database> <target> <packageName>com.test.maverproject.generated.jooq</packageName> <directory>src/main/java</directory> </target> </generator> </configuration> </plugin> </plugins> </build> <dependencies> <!-- HikariCP is our jdbc connection pooler --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.4.3</version> <scope>compile</scope> </dependency> <!-- jooq makes db access easy and rewardType-safe --> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq</artifactId> <version>3.9.1</version> </dependency> </dependencies> <!-- database configuration --> <db.databaseUrl>jdbc:mysql://数据库连接:端口/schema?user=myUser</db.databaseUrl> <db.databaseUser>myUser</db.databaseUser> <db.databasePassword>myPassword</db.databasePassword> <db.datasource>com.mysql.jdbc.jdbc2.optional.MysqlDataSource</db.datasource> <db.sql.dialect>MYSQL</db.sql.dialect> </properties> <properties>
cmd中cd至pom.XML所在文件夹
mvn jooq-codegen:generate
就可以自动由数据库表生产对应java文件,方便使用。
ps:不更新代码,对数据库修改时:可以添加表。可以在已有表最后加行,但是不能插到中间。
编辑TestConfig.properties文件,添加
#databasedb.datasrc = ${db.datasource}db.url = ${db.databaseUrl}db.user = ${db.databaseUser}db.pass = ${db.databasePassword}db.sql.dialect = ${db.sql.dialect}
新建连接数据库用的DSLContextFactory
import javax.inject.Inject;import javax.sql.DataSource;import org.jooq.Configuration;import org.jooq.DSLContext;import org.jooq.SQLDialect;import org.jooq.conf.RenderNameStyle;import org.jooq.conf.Settings;import org.jooq.impl.DSL;import org.jooq.impl.DefaultConfiguration;public class DSLContextFactory { private final SQLDialect sqlDialect; private final Settings settings; private final DataSource dataSource; private final Configuration configuration; @Inject public DSLContextFactory(RenderNameStyle renderNameStyle, SQLDialect sqlDialect, DataSource dataSource) { this.settings = new Settings(); this.settings.setRenderSchema(false); this.settings.setRenderNameStyle(renderNameStyle); this.sqlDialect = sqlDialect; this.dataSource = dataSource; this.configuration = new DefaultConfiguration() .set(this.dataSource) .set(this.sqlDialect) .set(this.settings); } public DSLContext create() { return DSL.using(dataSource, sqlDialect, settings); } public DSLContext create(Configuration configuration) { return DSL.using(configuration); } public Configuration getConfiguration() { return configuration; }}
以及所需注入的三个facetory:
import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.PropertiesConfiguration;import org.glassfish.hk2.api.Factory;import org.jooq.SQLDialect;public class SQLDialectFactory implements Factory<SQLDialect> { private final SQLDialect sqlDialect; public SQLDialectFactory() throws ConfigurationException { Configuration config = new PropertiesConfiguration("TestConfig.properties"); sqlDialect = SQLDialect.valueOf(config.getString("db.sql.dialect")); } @Override public SQLDialect provide() { return sqlDialect; } @Override public void dispose(SQLDialect t) { } }
import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import javax.inject.Inject;import javax.sql.DataSource;import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.PropertiesConfiguration;import org.glassfish.hk2.api.Factory;import org.jooq.SQLDialect;import org.slf4j.LoggerFactory;public class DataSourceFactory implements Factory<DataSource> { private final String dataSourceClass; private final String dbUrl; private final String dbUser; private final String dbPass; private final String dbDialect; @Inject public DataSourceFactory() { Configuration configuration; try { configuration = new PropertiesConfiguration("TestConfig.properties"); } catch (ConfigurationException e) { LoggerFactory.getLogger(getClass()).error("Failed to read properties", e); throw new RuntimeException("Load gs.properties failed", e); } dataSourceClass = configuration.getString("db.datasrc"); dbUrl = configuration.getString("db.url"); dbUser = configuration.getString("db.user"); dbPass = configuration.getString("db.pass"); dbDialect = configuration.getString("db.sql.dialect"); } @Override public DataSource provide() { HikariConfig config = new HikariConfig(); config.setRegisterMbeans(true); config.setMaxLifetime(25 * 60 * 1000); config.setIdleTimeout(3 * 60 * 1000); config.setLeakDetectionThreshold(60 * 1000); config.setConnectionTimeout(10 * 1000); config.setMaximumPoolSize(30); config.setDataSourceClassName(dataSourceClass); config.addDataSourceProperty("url", dbUrl); config.addDataSourceProperty("user", dbUser); config.addDataSourceProperty("password", dbPass); //mysql optimization if (SQLDialect.MYSQL == SQLDialect.valueOf(dbDialect)) { config.addDataSourceProperty("cachePrepStmts", true); config.addDataSourceProperty("prepStmtCacheSize", 250); config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048); } HikariDataSource dataSource = new HikariDataSource(config); return dataSource; } @Override public void dispose(DataSource t) { }}
import org.glassfish.hk2.api.Factory;import org.jooq.conf.RenderNameStyle;public class RenderNameStyleFactory implements Factory<RenderNameStyle> { @Override public RenderNameStyle provide() { return RenderNameStyle.AS_IS; } @Override public void dispose(RenderNameStyle t) { } }
修改binder
@Override protected void configure() { //数据库 bindFactory(DataSourceFactory.class).to(DataSource.class).in(Singleton.class); bindFactory(RenderNameStyleFactory.class).to(RenderNameStyle.class).in(Singleton.class); bindFactory(SQLDialectFactory.class).to(SQLDialect.class).in(Singleton.class); bindAsContract(DSLContextFactory.class).in(Singleton.class); }
准备完成,可以使用DSLContextFactory建立连接修改数据库。
import static com.viewkingdom.zombiecatchers2.generated.jooq.Tables.AUTHENTICATION;import com.viewkingdom.zombiecatchers2.generated.jooq.tables.records.AuthenticationRecord;@Servicepublic class DatabaseUserStorage implements UserStorage { @Inject public DatabaseUserStorage( final DSLContextFactory dslContextFactory ){ this.dslContextFactory = dslContextFactory; } //插入 public int insert(){ AuthenticationRecord record = dslContextFactory.create().insertInto(AUTHENTICATION) .set(AUTHENTICATION.VALID_SESSION_NUMBER, 0) .returning(AUTHENTICATION.USER_ID) .execute(); } //更新 public void update(int userId){ AuthenticationRecord record = dslContextFactory.create() .selectFrom(AUTHENTICATION) .where(AUTHENTICATION.USER_ID.eq(userId)) .fetchOne(); record.set(AUTHENTICATION.VALID_SESSION_NUMBER, 0); record.update(); }}
jooq详细文档 Ver3.9
jOOQ教程 (3.3.3jOOQ as a SQL executor)
阅读全文
0 0
- java服务器连接mysql数据库
- Java连接服务器MySQL
- 命令行连接MySQL数据库服务器
- nacicat 连接服务器mysql数据库
- java连接MySql数据库!
- JAVA 连接 MySQL 数据库
- java连接mysql数据库
- java连接mysql数据库
- java连接mysql数据库
- Java连接MySQL数据库
- Java连接mysql数据库
- java连接MySQL数据库
- java连接mysql数据库
- Java连接Mysql数据库
- java连接mysql数据库
- java连接mysql数据库
- Java连接mysql数据库
- Java连接MySQL数据库
- linux内核内存管理学习之三(slab分配器)
- NATS核心技术基本介绍
- 36个Android开发常用代码片段
- 字符编码详解
- Python自然语言处理-自然语言工具包(NLTK)
- java服务器连接mysql数据库
- android 生命周期理解
- RDC如何构建一个基于NodeJS的前后端项目
- 【LeetCode】C# 48、Rotate Image
- 关于 #ifndef #indef 的用法总结
- nginx中开启keepalive后应答反而为close的原因
- kali linux 2017.2版下安装w3af 【超详细】
- 含水最多的容器(Container With Most Water)
- 洛谷P1008 三连击