龙空技术网

HasorDB 一个全功能数据库访问工具

GitHub精选 2929

前言:

今天兄弟们对“mysql映射器”大约比较重视,看官们都想要了解一些“mysql映射器”的相关资讯。那么小编同时在网上收集了一些关于“mysql映射器””的相关内容,希望大家能喜欢,小伙伴们快快来学习一下吧!

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰富的类型处理、动态SQL、存储过程、内置分页方言20+、支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句/多结果。

介绍

HasorDB 是一个全功能数据库访问工具,提供对象映射、丰富的类型处理、动态SQL、存储过程、 内置分页方言20+、 支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句/多结果。并兼容 Spring 及 MyBatis 用法。 它不依赖任何其它框架,因此可以很方便地和任意一个框架整合在一起使用。

功能特性

熟悉的方式

JdbcTemplate 接口方式(高度兼容 Spring JDBC)Mapper 文件方式(高度兼容 MyBatis)LambdaTemplate (高度接近 MyBatis Plus、jOOQ 和 BeetlSQL)@Insert、@Update、@Delete、@Query、@Callable 注解(类似 JPA)

事务支持

支持 5 个事务隔离级别、7 个事务传播行为(与 Spring tx 相同)提供 TransactionTemplate、TransactionManager 接口方式声明式事务控制能力(用法与 Spring 相同)

特色优势

支持 分页查询 并且提供多种数据库方言(20+)支持 INSERT 策略(INTO、UPDATE、IGNORE)更加丰富的 TypeHandler(MyBatis 40+,HasorDB 60+)Mapper XML 支持多语句、多结果提供独特的 @{xxx, expr , xxxxx } 规则扩展机制,让动态 SQL 更加简单支持 存储过程支持 JDBC 4.2 和 Java8 中时间类型支持多数据源快速上手

引入依赖

<dependency>  <groupId>net.hasor</groupId>  <artifactId>hasor-db</artifactId>  <version>4.3.0</version><!-- 查看最新版本: --></dependency>

引入数据库驱动,例如 MySQL 驱动

<dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.22</version></dependency>

使用 HasorDB 可以不依赖数据库连接池,但有数据库连接池是大多数项目的标配。这里选用 Alibaba 的 Druid

<dependency>  <groupId>com.alibaba</groupId>  <artifactId>druid</artifactId>  <version>1.1.23</version></dependency>

最后准备一个数据库表,并初始化一些数据(CreateDB.sql 文件)

drop table if exists `test_user`;create table `test_user` (    `id`          int(11) auto_increment,    `name`        varchar(255),    `age`         int,    `create_time` datetime,    primary key (`id`));insert into `test_user` values (1, 'mali', 26, now());insert into `test_user` values (2, 'dative', 32, now());insert into `test_user` values (3, 'jon wes', 41, now());insert into `test_user` values (4, 'mary', 66, now());insert into `test_user` values (5, 'matt', 25, now());
使用 DAO

使用 DAO 可以继承 BaseMapper<T> 通用 DAO 接口来完成一些基本操作,仍然以单表 CRUD 为例

// DAO 的一些接口需要识别 ID 属性,因此有必要在 DTO 对象上通过 @Column 注解标记出它们@Table(mapUnderscoreToCamelCase = true)  public class TestUser {  @Column(primary = true)  private Integer id;  private String  name;  private Integer age;  private Date    createTime;    // getters and setters omitted}// 创建数据源DataSource dataSource = DsUtils.dsMySql();// 创建通用 DAODalSession session = new DalSession(dataSource);BaseMapper<TestUser> baseMapper = session.createBaseMapper(TestUser.class);// 初始化一些数据baseMapper.template().loadSQL("CreateDB.sql");// 查询数据List<TestUser> dtoList = baseMapper.query().queryForList();PrintUtils.printObjectList(dtoList);// 插入新数据TestUser newUser = new TestUser();newUser.setName("new User");newUser.setAge(33);newUser.setCreateTime(new Date());int result = baseMapper.insert(newUser);// 更新,将name 从 mali 更新为 malaTestUser sample = baseMapper.queryById(1);sample.setName("mala");int result = baseMapper.updateById(sample);// 删除,ID 为 2 的数据int result = baseMapper.deleteById(2);
使用 Mapper

统一管理 SQL 的最佳场所仍然是 Mapper 文件,而且 HasorDB 的 Mapper 文件高度兼容 MyBatis 学习成本极低

// 利用 @RefMapper 注解将 Mapper 文件和 接口类联系起来(继承 BaseMapper 是可选的)@RefMapper("/mapper/quick_dao3/TestUserMapper.xml")public interface TestUserDAO extends BaseMapper<TestUser> {    public int insertUser(@Param("name") String name, @Param("age") int age);    public int updateAge(@Param("id") int userId, @Param("age") int newAge);    public int deleteByAge(@Param("age") int age);    public List<TestUser> queryByAge(@Param("beginAge") int beginAge, @Param("endAge") int endAge);}

为了更好的了解和使用 HasorDB 的 Mapper 文件建议增加 DTD加以验证。另外 HasorDB 兼容 MyBatis3 的 DTD 对于绝大部分 MyBatis 工程都可以正常兼容

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//hasor.net//DTD Mapper 1.0//EN" ";><mapper namespace="net.hasor.db.example.quick.dao3.TestUserDAO">  <resultMap id="testuser_resultMap" type="net.hasor.db.example.quick.dao3.TestUser">    <id column="id" property="id"/>    <result column="name" property="name"/>    <result column="age" property="age"/>    <result column="create_time" property="createTime"/>  </resultMap>    <sql id="testuser_columns">    name,age,create_time  </sql>    <insert id="insertUser">    insert into `test_user` (      <include refid="testuser_columns"/>    ) values (      #{name}, #{age}, now()    )  </insert>    <update id="updateAge">    update `test_user` set age = #{age} where id = #{id}  </update>    <delete id="deleteByAge"><![CDATA[    delete from `test_user` where age > #{age}  ]]></delete>    <select id="queryByAge" resultMap="testuser_resultMap">    select id,<include refid="testuser_columns"/>    from `test_user`    where  #{beginAge} < age and age < #{endAge}  </select></mapper>
使用事务

HasorDB 提供了三种方式使用事务,分别为:

声明式事务,通过调用 TransactionManager 接口来实现事务控制。模版事务,通过 TransactionTemplate 接口来实现事务控制。注解事务,基于 @Transaction 的注解事务控制(开发中...)

更多内容:

标签: #mysql映射器 #java时间与数据库时间不一致 #什么叫数据库的映射功能 #浏览sql数据库的工具叫什么

上一篇MySQL慢查询日志的配置与使用

下一篇没有了