springBoot之Hibernate使用SQLite

引入依赖:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.7.2</version>
        </dependency>

配置文件hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="connection.url">jdbc:sqlite://H:/wf1.db</property>
    <property name="connection.driver_class">org.sqlite.JDBC</property>
    <property name="connection.username"></property>
    <property name="connection.password"></property>
    <!-- 数据库方言 -->
    <property name="dialect">com.whalefull.appwsd.utils.SQLiteDialect</property>
    <!-- 自动生成数据库 -->
    <!--     DB schema will be updated if needed -->
    <property name="hibernate.hbm2ddl.auto">update</property>

    <!-- 注册 -->
    <mapping resource="com/whalefull/appwsd/entity/BuMen.hbm.xml"/>
    <mapping resource="com/whalefull/appwsd/entity/WF_YongHu.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

hibernate.hbm2ddl.auto支持以下配置:Supported values include 'create', 'create-drop', 'create-only', 'drop', 'update', 'none' and 'validate'

SQLite方言类:

package com.whalefull.appwsd.utils;


import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.dialect.function.VarArgsSQLFunction;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;

public class SQLiteDialect extends Dialect {
    public SQLiteDialect() {
        super();
        registerColumnType(Types.BIT, "integer");
        registerColumnType(Types.TINYINT, "tinyint");
        registerColumnType(Types.SMALLINT, "smallint");
        registerColumnType(Types.INTEGER, "integer");
        registerColumnType(Types.BIGINT, "bigint");
        registerColumnType(Types.FLOAT, "float");
        registerColumnType(Types.REAL, "real");
        registerColumnType(Types.DOUBLE, "double");
        registerColumnType(Types.NUMERIC, "numeric");
        registerColumnType(Types.DECIMAL, "decimal");
        registerColumnType(Types.CHAR, "char");
        registerColumnType(Types.VARCHAR, "varchar");
        registerColumnType(Types.LONGVARCHAR, "longvarchar");
        registerColumnType(Types.DATE, "date");
        registerColumnType(Types.TIME, "time");
        registerColumnType(Types.TIMESTAMP, "timestamp");
        registerColumnType(Types.BINARY, "blob");
        registerColumnType(Types.VARBINARY, "blob");
        registerColumnType(Types.LONGVARBINARY, "blob");
        registerColumnType(Types.BLOB, "blob");
        registerColumnType(Types.CLOB, "clob");
        registerColumnType(Types.BOOLEAN, "integer");
        registerFunction("concat", new VarArgsSQLFunction(StringType.INSTANCE, "", "||", ""));
        registerFunction("mod", new SQLFunctionTemplate(IntegerType.INSTANCE, "?1 % ?2"));
        registerFunction("substr", new StandardSQLFunction("substr", StringType.INSTANCE));
        registerFunction("substring", new StandardSQLFunction("substr", StringType.INSTANCE));
    }

    public boolean supportsIdentityColumns() {
        return true;
    }

    /*
     public boolean supportsInsertSelectIdentity() {
     return true; // As specify in NHibernate dialect
     }
     */

    public boolean hasDataTypeInIdentityColumn() {
        return false; // As specify in NHibernate dialect
    }

    /*
     public String appendIdentitySelectToInsert(String insertString) {
     return new StringBuffer(insertString.length()+30). // As specify in NHibernate dialect
     append(insertString).
     append("; ").append(getIdentitySelectString()).
     toString();
     }
     */

    public String getIdentityColumnString() {
        // return "integer primary key autoincrement";
        return "integer";
    }

    public String getIdentitySelectString() {
        return "select last_insert_rowid()";
    }

    public boolean supportsLimit() {
        return true;
    }

    public String getLimitString(String query, boolean hasOffset) {
        return new StringBuffer(query.length() + 20).append(query).append(
                hasOffset ? " limit ? offset ?" : " limit ?").toString();
    }

    public boolean supportsTemporaryTables() {
        return true;
    }

    public String getCreateTemporaryTableString() {
        return "create temporary table if not exists";
    }

    public boolean dropTemporaryTableAfterUse() {
        return false;
    }

    public boolean supportsCurrentTimestampSelection() {
        return true;
    }

    public boolean isCurrentTimestampSelectStringCallable() {
        return false;
    }

    public String getCurrentTimestampSelectString() {
        return "select current_timestamp";
    }

    public boolean supportsUnionAll() {
        return true;
    }

    public boolean hasAlterTable() {
        return false; // As specify in NHibernate dialect
    }

    public boolean dropConstraints() {
        return false;
    }

    public String getAddColumnString() {
        return "add column";
    }

    public String getForUpdateString() {
        return "";
    }

    public boolean supportsOuterJoinForUpdate() {
        return false;
    }

    public String getDropForeignKeyString() {
        throw new UnsupportedOperationException(
                "No drop foreign key syntax supported by SQLiteDialect");
    }

    public String getAddForeignKeyConstraintString(String constraintName,
                                                   String[] foreignKey, String referencedTable, String[] primaryKey,
                                                   boolean referencesPrimaryKey) {
        throw new UnsupportedOperationException(
                "No add foreign key syntax supported by SQLiteDialect");
    }

    public String getAddPrimaryKeyConstraintString(String constraintName) {
        throw new UnsupportedOperationException(
                "No add primary key syntax supported by SQLiteDialect");
    }

    public boolean supportsIfExistsBeforeTableName() {
        return true;
    }

    public boolean supportsCascadeDelete() {
        return false;
    }
}

以下是测试:

实体类及配置,这里用的是lombok:

package com.whalefull.appwsd.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//部门表
@Data
//有参
@AllArgsConstructor
//无参
@NoArgsConstructor
public class BuMen {
    private Integer id;
    private String buMenMingCheng;
}
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" >
    <class name="com.whalefull.appwsd.entity.BuMen" table="WF_BuMen">
        <id name="id" type="java.lang.Integer">
            <column name="id"/>
            <generator class="native"></generator>
        </id>
        <property name="buMenMingCheng" type="java.lang.String">
            <column name="buMenMingCheng"/>
        </property>

    </class>
</hibernate-mapping>

测试用例:

public static void main(String[] args) {
        BuMen b = new BuMen();
        b.setBuMenMingCheng( "财务" );
        SessUtils.save( b );
    }

工具:

package com.whalefull.appwsd.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class SessUtils {


    /**
     * 调用Session类,执行以下过程:save → commit → close.
     * @param o 实体类对象
     */
    public static void save(Object o){

        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session sess = sf.openSession();
        Transaction transaction = sess.beginTransaction();
        sess.save(o);
        transaction.commit();
        sess.close();
        sf.close();
    }

    /**
     * 调用Session类,执行以下过程:update → commit → close.
     * @param o 实体类对象
     */
    public static void update(Object o) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session sess = sf.openSession();
        Transaction transaction = sess.beginTransaction();
        sess.update(o);
        transaction.commit();
        sess.close();
        sf.close();
    }
}

测试结果:

经过反复测试,id是可以自增的

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Spring Boot JPA连接SQLite数据库的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.30.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 2. 配置数据源 在application.properties文件中添加以下配置: ```properties spring.datasource.url=jdbc:sqlite:/path/to/your/db/file.db spring.datasource.driver-class-name=org.sqlite.JDBC spring.jpa.database-platform=org.hibernate.dialect.SQLiteDialect ``` 其中,`/path/to/your/db/file.db`是你的SQLite数据库文件路径。 3. 创建实体类 创建一个实体类,使用`@Entity`注解标记,并使用`@Id`注解标记主键字段。 ```java @Entity public class User { @Id private Long id; private String name; private Integer age; // 省略getter和setter方法 } ``` 4. 创建Repository 创建一个Repository接口,继承`JpaRepository`,并指定实体类和主键类型。 ```java public interface UserRepository extends JpaRepository<User, Long> { } ``` 5. 使用Repository 在需要使用Repository的地方注入`UserRepository`,即可使用其中的方法进行数据库操作。 ```java @Service public class UserService { @Autowired private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } public List<User> getAllUsers() { return userRepository.findAll(); } public User saveUser(User user) { return userRepository.save(user); } public void deleteUserById(Long id) { userRepository.deleteById(id); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值