前言:
今天兄弟们对“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 的注解事务控制(开发中...)
更多内容: