java持久层框架,网上随便搜了搜,就有Hibernate、MyBatis、Spring Data、TopLink等,而偶最常用的就是MyBatis,Hibernate也使用过一段时间,很意外没有搜到 iBatis ,因为大家部分维护应用的持久层框架还处于 iBatis 的情况。当然,由于安全因素,直接拼 SQL 的使用最原始的 JdbcTemplate 的应用是没有的。持久层框架,也称 ORM 框架,对象关系映射(ORM,Object Relational Mapping)是一种功能,用于通过将对象状态映射到数据库列来开发和维护对象和关系数据库之间的关系。它能够轻松处理(或执行)各种数据库操作,如插入,更新,删除等。
最常用的就是 Mybatis ,MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。在 spring boot + gradle 的技术体系下使用 Mybatis 的的依赖示例如下:
dependencies {
compile “org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0”
compile “mysql:mysql-connector-java:5.1.43”
}
# yml 配置文件,
server:
spring:
#数据库连接配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
filters: stat
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#mybatis的相关配置
mybatis:
#mapper配置文件
type-aliases-package: com.wei.you.comb.entity
mapper-locations: classpath*:/mappings/*.xml,classpath*:/mappings/**/*.xml
#开启驼峰命名
configuration:
map-underscore-to-camel-case: true
用过一段时间依赖 Hibernate 的 Spring Data JPA,对其影响最深的是 对象间的关联关系,各种联合主键和外键注解,对使用者解决相关问题的能力有一定的要求,其大致有3种使用方法。
1.查询创建Query Creation。Spring Data Jpa通过解析方法名创建查询,框架在进行方法名解析时,会先把方法名多余的前缀find…By, read…By, query…By, count…By以及get…By截取掉,然后对剩下部分进行解析,第一个By会被用作分隔符来指示实际查询条件的开始。 如:
User findByUsername(String username);
List<User> findByUsernameIgnoreCase(String username);
List<User> findByUsernameLike(String username);
该方法上还支持原生查询Native Queries
@Query(value = “select * from tb_user u where u.email = ?1”, nativeQuery = true)
User queryByEmail(String email);
@Query(value = “select * from tb_user u where u.email = :email”, nativeQuery = true)
User queryByEmail(@Param(“email”) String email);
2.hql查询方式。
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//hql简单查询 注意 hql中不支持 直接使用*号 但在聚合函数中 比如 count(*) 可以
List<Customer> list = session.createQuery(“from Customer”).list();
tx.commit();
3.Criteria查询方式
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//简单查询
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
以上几种,在不同的业务需求中都有相应的使用场景,但整体感觉其学习成本较高,执行效率不高,也可能是学的不够深入吧。
最后,借用网上找到的一种观点来结尾,也是偶比较认同的:对这个东东不用纠结,团队用啥你用啥就得了,出问题有同事协助解决,如果和团队的技术栈不一致,出问题就只能自己补坑,花费大量的时间还不一定有结果。
作者:夕阳雨晴,欢迎关注偶的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。
萝卜家园系统怎么样,红米note怎么删除下载的主题,怎么关闭共享端口